Оглавление
В учебнике показано, как выделить дубликаты слов или текстовых строк в ячейке с помощью VBA.
Условное форматирование Excel позволяет выделять дубликаты всеми возможными способами, которые только можно придумать: с первым вхождением или без, в одном столбце или нескольких столбцах, последовательные дубликаты ячеек и целых строк на основе одинаковых значений в ключевом столбце. Но, как обычно, есть одно "но". Правила условного форматирования работают на уровне ячеек, в то время как вы можете захотеть выделить дубликаты на уровне ячеек.Это можно сделать только с помощью макросов. Даже если у вас нет опыта работы с VBA, не спешите закрывать эту страницу. Здесь вы найдете готовые примеры кода и подробные инструкции по их использованию в рабочих листах.
Выделение дублирующихся слов в ячейке с игнорированием регистра текста
В этом примере показано, как затенять дубликаты слов или текстовых строк в ячейке красным цветом шрифта, как показано на рисунке ниже. Обратите внимание, что строчные и прописные буквы рассматриваются как одинаковые символы. Например, апельсин , ОРАНЖЕВЫЙ и Апельсин считаются одним и тем же словом.
Код макроса выглядит следующим образом:
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Введите разделитель, разделяющий значения в ячейке" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, False ) Next End Sub Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End SubВыделение дублирующегося текста в ячейке с учетом регистра
В большинстве ситуаций мы не обращаем внимания на регистр букв при работе с текстовыми записями в Excel. Однако при определенных обстоятельствах регистр текста имеет значение. Например, если вы имеете дело с идентификаторами, паролями или другими записями такого рода, то строки типа 1-AA , 1-а и 1-Aa не являются дубликатами и не должны выделяться:
В этом случае используйте следующую версию кода:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Введите разделитель, разделяющий значения в ячейке" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, True ) Next End Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End SubКак использовать макросы для выделения дубликатов слов в Excel
Если вы новичок в использовании VBA, то приведенные ниже пошаговые инструкции помогут вам с комфортом пройти этот путь. Опытные пользователи могут просто выбрать ссылку на скачивание и пропустить остальное :)
Добавьте код в рабочую книгу
Начните с вставки кода макроса в рабочую книгу Excel. Вот как это делается:
- Откройте рабочую книгу, в которой нужно выделить дубликаты.
- Нажмите Alt + F11, чтобы открыть редактор Visual Basic.
- На левой панели щелкните правой кнопкой мыши ThisWorkbook и выберите Вставка > Модуль из контекстного меню.
- Вставьте код в окно Код.
- Чтобы сохранить макрос для дальнейшего использования, не забудьте сохранить рабочую книгу как файл .xlsm с поддержкой макросов.
Кроме того, вы можете загрузить наш образец рабочей книги и запустить макрос из него. Образец рабочей книги содержит следующие макросы:
- HighlightDupesCaseInsensitive - оттеняет дубликаты внутри ячейки, игнорируя регистр букв.
- HighlightDupesCaseSensitive - выделяет дубликаты в ячейке с учетом регистра букв.
Для получения дополнительной информации см. раздел Как вставить код VBA в Excel.
Запустите макрос
Добавив код в собственную рабочую книгу или загрузив и открыв наш файл-образец, запустите макрос таким образом:
- В рабочем листе выделите ячейки, в которых нужно выделить дублирующийся текст. Это может быть один диапазон или несколько несмежных диапазонов.
- Нажмите Alt + F8 .
- Выберите интересующий макрос и нажмите Запускайте .
- Макрос попросит вас указать разделитель, разделяющий значения в выбранных ячейках. В поле ввода автоматически появится заданный разделитель (в нашем случае запятая и пробел). В зависимости от ваших потребностей, вы можете оставить разделитель по умолчанию или ввести другой, а затем нажать OK.
Мгновение спустя все дубликаты строк в выделенных ячейках будут затенены красным цветом (или любым другим цветом шрифта, установленным в вашем коде).
Совет. Чтобы быстро удаление дубликатов в ячейке, вы можете воспользоваться функцией удаления дублирующихся подстрок - одним из многих инструментов экономии времени, включенных в наш пакет Ultimate Suite.
Как приспособить код для ваших нужд
Имея эти указания по использованию и самые базовые знания VBA (или просто внимательно следуя приведенным ниже инструкциям), вы сможете легко модифицировать коды в точном соответствии с вашими потребностями.
Разместить на одном модуле
Как вы можете заметить, оба макроса ( HighlightDupesCaseSensitive и HighlightDupesCaseInsensitive ) вызывают HighlightDupeWordsInCell Разница между двумя приведенными выше макросами заключается только в третьем параметре (CaseSensitive), передаваемом указанной функции.
Для поиска с учетом регистра оно устанавливается в TRUE:
Call HighlightDupeWordsInCell(Cell, Delimiter, True)
Для поиска без учета регистра устанавливается значение FALSE:
Call HighlightDupeWordsInCell(Cell, Delimiter, False)
Для того чтобы макросы работали, необходимо, чтобы код файла HighlightDupeWordsInCell функция должна быть помещена в тот же модуль, что и макросы.
Разделитель
При запуске макрос попросит вас указать разделитель, разделяющий слова/строки в выбранных ячейках. По умолчанию разделителем является запятая и пробел (", "), и он предварительно установлен в InputBox:
Delimiter = InputBox("Укажите разделитель, разделяющий значения в ячейке", "Delimiter", ", ")
В своем коде вы можете использовать любой другой символ (символы) в качестве предопределенного разделителя.
Цвет
По умолчанию HighlightDupeWordsInCell функция затеняет дубликаты красным цветом шрифта. Цвет задается в этой строке:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Здесь vbRed - это своего рода цветовая константа VBA. Чтобы отобразить дубликаты другим цветом, вы можете заменить vbRed другой константой, например vbGreen, vbYellow, vbBlue и т.д. T список поддерживаемых цветовых констант можно найти здесь.
Вот как выделить дублирующиеся слова в ячейках Excel. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
Доступные загрузки
Примеры кода для выделения дубликатов в ячейке (файл.xlsm)
Ultimate Suite 14-дневная полнофункциональная версия (файл .exe)