При сравнении двух колонок с текстом в 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 (позиция вхождения) |
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) и выделения совпадений:
- Выделите диапазон
B2:B100. - Создайте правило условного форматирования с формулой:
=СЧЁТЕСЛИ($A$2:$A$100; B2)>0 - Задайте формат (например, зелёную заливку).
Чтобы извлечь уникальные значения из списка, используйте в Excel 365:
=УНИК(A2:A100)
В старых версиях применяйте комбинацию ЧАСТОТА + ИНДЕКС (формула массива).
6. Продвинутые методы: Power Query и VBA
Для обработки больших массивов данных (100 000+ строк) или сложных правил сравнения (например, сравнение по нескольким критериям) используйте:
- 🛠️ Power Query:
- Выделите данные →
Данные→Из таблицы/диапазона. - В редакторе Power Query добавьте столбец с формулой сравнения (например,
= Text.Upper([Column1]) = Text.Upper([Column2])). - Примените фильтр по новому столбцу.
- Выделите данные →
Код 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 возвращает ЛОЖЬ, хотя строки выглядят одинаково?
Причины:
- Лишние пробелы (используйте
СЖПРОБЕЛЫ). - Скрытые символы (
CHAR(10),CHAR(13)). - Разный регистр (примените
ПЕЧСИМВ). - Разные шрифты или форматирование (проверьте через
ЯЧЕЙКА("формат"; 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; "Дубликат"; ""))— поиск дубликатов.