Как выделить дублирующийся текст / слова в ячейке Excel

  • Поделись Этим
Michael Brown

В учебнике показано, как выделить дубликаты слов или текстовых строк в ячейке с помощью 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. Вот как это делается:

    1. Откройте рабочую книгу, в которой нужно выделить дубликаты.
    2. Нажмите Alt + F11, чтобы открыть редактор Visual Basic.
    3. На левой панели щелкните правой кнопкой мыши ThisWorkbook и выберите Вставка > Модуль из контекстного меню.
    4. Вставьте код в окно Код.
    5. Чтобы сохранить макрос для дальнейшего использования, не забудьте сохранить рабочую книгу как файл .xlsm с поддержкой макросов.

    Кроме того, вы можете загрузить наш образец рабочей книги и запустить макрос из него. Образец рабочей книги содержит следующие макросы:

    • HighlightDupesCaseInsensitive - оттеняет дубликаты внутри ячейки, игнорируя регистр букв.
    • HighlightDupesCaseSensitive - выделяет дубликаты в ячейке с учетом регистра букв.

    Для получения дополнительной информации см. раздел Как вставить код VBA в Excel.

    Запустите макрос

    Добавив код в собственную рабочую книгу или загрузив и открыв наш файл-образец, запустите макрос таким образом:

    1. В рабочем листе выделите ячейки, в которых нужно выделить дублирующийся текст. Это может быть один диапазон или несколько несмежных диапазонов.
    2. Нажмите Alt + F8 .
    3. Выберите интересующий макрос и нажмите Запускайте .

    4. Макрос попросит вас указать разделитель, разделяющий значения в выбранных ячейках. В поле ввода автоматически появится заданный разделитель (в нашем случае запятая и пробел). В зависимости от ваших потребностей, вы можете оставить разделитель по умолчанию или ввести другой, а затем нажать 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)

    Майкл Браун — увлеченный технологический энтузиаст, стремящийся упростить сложные процессы с помощью программных инструментов. Имея более чем десятилетний опыт работы в технологической отрасли, он отточил свои навыки в Microsoft Excel и Outlook, а также в Google Sheets и Docs. Блог Майкла посвящен тому, чтобы делиться своими знаниями и опытом с другими, предоставляя простые советы и учебные пособия для повышения производительности и эффективности. Являетесь ли вы опытным профессионалом или новичком, в блоге Майкла вы найдете ценную информацию и практические советы, которые помогут вам максимально эффективно использовать эти важные программные инструменты.