Как сравнить строки на совпадение в Excel: от простых формул до VBA

При сравнении двух колонок с текстом в Microsoft Excel вы получаете результат ЛОЖЬ даже когда строки визуально идентичны? Проблема кроется в скрытых символах — пробелах, неразрывных пробелах, переносах строк или регистре букв. Чтобы точно определить совпадение строк в Excel 2019–2026 (включая Excel 365), недостаточно использовать оператор = или функцию ЕСЛИ. Требуется комбинация из СЖПРОБЕЛЫ, ПЕЧСИМВ и СРАВНИТЬ, либо применение регулярных выражений через Power Query.

В 80% случаев ошибки при сравнении возникают из-за: 1) Лишних пробелов в начале/конце строки (включая неразрывные пробелы CHAR(160)), 2) Разного регистра букв (например, "Иванов" ≠ "иванов"), 3) Скрытых символов переноса (CHAR(10) или CHAR(13)), вставленных при копировании из веб-страниц.

Ниже разберём 6 методов — от базовых формул до автоматизации через VBA, — которые покрывают все сценарии: точные совпадения, частичные вхождения и поиск дубликатов в больших массивах данных (10 000+ строк).

1. Базовое сравнение строк оператором "=" и функцией ЕСЛИ

Самый простой способ — использовать оператор равенства (=) или функцию ЕСЛИ для попарного сравнения ячеек. Однако этот метод работает только при полном совпадении символов, включая регистр и пробелы. Например, формула =A2=B2 вернёт ИСТИНА только если содержимое A2 и B2 идентично вплоть до последнего символа.

Чтобы визуализировать результат, используйте ЕСЛИ:

=ЕСЛИ(A2=B2; "Совпадает"; "Не совпадает")
  • Плюсы: Простота, не требует дополнительных функций.
  • Минусы: Не игнорирует пробелы и регистр, не подходит для частичных совпадений.
  • ⚠️ Ограничение: В Excel Online формулы массива с ЕСЛИ могут работать медленнее.
⚠️ Внимание: Если в ячейках есть формулы (например, =СЦЕПИТЬ("текст";" ")"), оператор = сравнивает результаты вычислений, а не сами формулы. Чтобы сравнить формулы как текст, используйте режим отображения формул (Ctrl + `).

2. Учёт регистра: функция СРАВНИТЬ и точные совпадения

Когда важен регистр букв (например, при сравнении email-адресов или логинов), замените оператор = на функцию СРАВНИТЬ:

=СРАВНИТЬ(A2; B2; 0)

Третий аргумент 0 означает, что функция чувствительна к регистру. Результат: 0 — строки идентичны, 1 — первая строка "больше" (по алфавиту), -1 — вторая строка "больше".

Для удобства оберните СРАВНИТЬ в ЕСЛИ:

=ЕСЛИ(СРАВНИТЬ(A2; B2; 0)=0; "Точное совпадение"; "Есть различия")
ФормулаПример A2Пример B2Результат
=A2=B2ИвановивановЛОЖЬ
=СРАВНИТЬ(A2;B2;0)Ивановиванов-1
=НАЙТИ(A2;B2)ванИванов2 (позиция вхождения)
📊 Какой метод сравнения строк вы используете чаще?
Формулы ЕСЛИ/СРАВНИТЬ
Условное форматирование
Power Query
VBA

3. Игнорирование пробелов и скрытых символов

Чтобы устранить влияние лишних пробелов, комбинируйте СЖПРОБЕЛЫ (удаляет пробелы в начале/конце и сокращает несколько пробелов между словами до одного) с ПЕЧСИМВ (преобразует текст в верхний регистр):

=ЕСЛИ(ПЕЧСИМВ(СЖПРОБЕЛЫ(A2))=ПЕЧСИМВ(СЖПРОБЕЛЫ(B2)); "Совпадает"; "Не совпадает")

Для удаления всех непечатаемых символов (включая перenosы строк и табуляции) используйте:

=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2; CHAR(10); ""); CHAR(13); ""); CHAR(9); "")
  • 🔍 CHAR(10) — символ перевода строки (Line Feed).
  • 🔍 CHAR(13) — возврат каретки (Carriage Return).
  • 🔍 CHAR(9) — табуляция.
  • 🔍 CHAR(160) — неразрывный пробел (вставляется при копировании из Word).
Как удалить все непечатаемые символы за один шаг?

Используйте эту формулу массива (вводится через Ctrl+Shift+Enter в старых версиях Excel):

=СЖПРОБЕЛЫ(ПЕЧСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A2; CHAR(10); ""); CHAR(13); ""); CHAR(9); ""); CHAR(160); " ")))

В Excel 365 достаточно нажать Enter.

4. Поиск частичных совпадений: функции НАЙТИ, ПОИСК и ПОИСКБ

Если нужно проверить, содержится ли подстрока в другой строке (например, поиск домена в email), используйте:

  • 📌 НАЙТИ — чувствительна к регистру, возвращает позицию вхождения или ошибку #ЗНАЧ!.
  • 📌 ПОИСК — игнорирует регистр.
  • 📌 ПОИСКБ — аналогично ПОИСК, но работает с байтами (актуально для двухбайтовых языков, например, японского).

Примеры:

=ЕСЛИ(ЕЧИСЛО(НАЙТИ("gmail"; A2)); "Содержит gmail"; "Не содержит")

=ЕСЛИ(ПОИСК("иванов"; A2)>0; "Есть вхождение"; "Нет вхождения")

⚠️ Внимание: Функция НАЙТИ вернёт ошибку, если подстрока не найдена. Чтобы избежать этого, оберните её в ЕЧИСЛО или ЕОШИБКА:
=ЕСЛИ(НЕ(ЕОШИБКА(НАЙТИ("текст"; A2))); "Есть"; "Нет")

5. Сравнение списков: поиск дубликатов и уникальных значений

Чтобы найти дубликаты в одном столбце или сравнить два списка, используйте:

1. Выделите диапазон с данными (например, A2:A100)

2. Перейдите на вкладку ГлавнаяУсловное форматированиеПравила выделения ячеекПовторяющиеся значения

3. Выберите формат выделения (например, красный текст)

4. Нажмите ОК-->

Для сравнения двух столбцов (A и B) и выделения совпадений:

  1. Выделите диапазон B2:B100.
  2. Создайте правило условного форматирования с формулой:
    =СЧЁТЕСЛИ($A$2:$A$100; B2)>0
  3. Задайте формат (например, зелёную заливку).

Чтобы извлечь уникальные значения из списка, используйте в Excel 365:

=УНИК(A2:A100)

В старых версиях применяйте комбинацию ЧАСТОТА + ИНДЕКС (формула массива).

6. Продвинутые методы: Power Query и VBA

Для обработки больших массивов данных (100 000+ строк) или сложных правил сравнения (например, сравнение по нескольким критериям) используйте:

  • 🛠️ Power Query:
    1. Выделите данные → ДанныеИз таблицы/диапазона.
    2. В редакторе Power Query добавьте столбец с формулой сравнения (например, = Text.Upper([Column1]) = Text.Upper([Column2])).
    3. Примените фильтр по новому столбцу.
  • 🤖 VBA: Скрипт для сравнения строк с учётом левештейна (расстояние между строками):
    Код VBA для сравнения с учётом опечаток

    Вставьте этот код в модуль VBA (Alt+F11 → Вставка → Модуль):

    Function Levenshtein(s1 As String, s2 As String) As Integer
    

    Dim i As Integer, j As Integer, cost As Integer

    Dim d() As Integer

    ReDim d(0 To Len(s1), 0 To Len(s2))

    For i = 0 To Len(s1)

    d(i, 0) = i

    Next

    For j = 0 To Len(s2)

    d(0, j) = j

    Next

    For i = 1 To Len(s1)

    For j = 1 To Len(s2)

    cost = IIf(Mid(s1, i, 1) = Mid(s2, j, 1), 0, 1)

    d(i, j) = Application.WorksheetFunction.Min( _

    d(i - 1, j) + 1, _

    d(i, j - 1) + 1, _

    d(i - 1, j - 1) + cost)

    Next

    Next

    Levenshtein = d(Len(s1), Len(s2))

    End Function

    Используйте в ячейке как =Levenshtein(A2; B2). Чем меньше результат, тем ближе строки.

  • FAQ: Частые вопросы по сравнению строк в Excel

    Почему формула =A1=B1 возвращает ЛОЖЬ, хотя строки выглядят одинаково?

    Причины:

    1. Лишние пробелы (используйте СЖПРОБЕЛЫ).
    2. Скрытые символы (CHAR(10), CHAR(13)).
    3. Разный регистр (примените ПЕЧСИМВ).
    4. Разные шрифты или форматирование (проверьте через ЯЧЕЙКА("формат"; A1)).
    Как сравнить две колонки и вывести совпадающие строки в третий столбец?

    В Excel 365 используйте:

    =ФИЛЬТР(A2:A100; СЧЁТЕСЛИ(B2:B100; A2:A100)>0; "Нет совпадений")

    В старых версиях:

    =ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$100; ПОИСКПОЗ(0; СЧЁТЕСЛИ($B$2:B2; $A$2:$A$100)+ЕСЛИ(СЧЁТЕСЛИ($B$2:B2; $A$2:$A$100)=0; 1; 0); 0)); "")

    (Формула массива, вводится через Ctrl+Shift+Enter.)

    Можно ли сравнить строки по звучанию (например, "Михаил" и "Михайло")?

    Да, используйте функцию ФОНЕТИЧЕСКИЙ (требуется надстройка Phonetic для английского) или VBA-решение с алгоритмом Soundex. Пример кода:

    VBA-функция для сравнения по Soundex

    Вставьте в модуль:

    Function Soundex(s As String) As String
    

    Dim c As String, prev As String, result As String

    Dim i As Integer, code As String

    s = UCase(Left(s, 1) & Mid(s, 2))

    result = Left(s, 1)

    For i = 2 To Len(s)

    c = Mid(s, i, 1)

    Select Case c

    Case "B", "F", "P", "V": code = "1"

    Case "C", "G", "J", "K", "Q", "S", "X", "Z": code = "2"

    Case "D", "T": code = "3"

    Case "L": code = "4"

    Case "M", "N": code = "5"

    Case "R": code = "6"

    Case Else: code = ""

    End Select

    If code <> "" And code <> prev Then

    result = result & code

    End If

    prev = code

    Next

    Soundex = Left(result & "000", 4)

    End Function

    Сравнивайте строки через =Soundex(A2)=Soundex(B2).

    Как сравнить строки в Google Таблицах?

    Аналоги Excel-функций в Google Sheets:

    • =EXACT(A2; B2) — точное сравнение с учётом регистра.
    • =REGEXMATCH(A2; B2) — проверка на частичное совпадение с регулярными выражениями.
    • =ARRAYFORMULA(IF(COUNTIF(B2:B; A2:A)>0; "Дубликат"; "")) — поиск дубликатов.