Как найти схожие данные в Excel: от дубликатов до частичных совпадений

Почему стандартный поиск не находит все совпадения

Вы когда-нибудь пытались найти в Excel строки, которые «похожи, но не идентичны»? Стандартная функция Найти и заменить (Ctrl+F) ищет только точные совпадения — а это значит, что «Иванов И.П.» и «Иванов Иван Петрович» для программы будут абсолютно разными записями. Между тем, в реальных данных часто встречаются:

  • 🔹 Опечатки: «Мосвка» вместо «Москва», «ООО Ромашка» vs «ООО Ромашка-ЛТД»
  • 🔹 Разные форматы: «+7(999)123-45-67» и «89991234567»
  • 🔹 Синонимы: «ул.» и «улица», «г.» и «город»
  • 🔹 Аббревиатуры: «ОАО» vs «Открытое акционерное общество»

В этой статье разберём 7 методов поиска схожих данных в Excel — от встроенных функций до малоизвестных надстроек, которые экономят часы ручной работы. Вы узнаете, как находить не только дубликаты, но и «почти дубликаты», а также автоматизировать проверку больших таблиц.

📊 Как часто вам приходится искать похожие данные в Excel?
Ежедневно
Раз в неделю
Редко, но методично
Никогда не занимался этим

Метод 1: Условное форматирование для дубликатов

Самый простой способ выделить полные дубликаты — использовать условное форматирование. Это не требует формул и работает даже в больших таблицах (до 1 млн строк в современных версиях Excel).

Как сделать:

  1. Выделите диапазон данных (например, столбец A2:A1000).
  2. Перейдите на вкладку Главная → Условное форматирование → Правила выделения ячеек → Повторяющиеся значения.
  3. В выпадающем меню выберите формат (например, светло-красную заливку).

⚠️ Ограничение метода: условное форматирование находит только 100% совпадения. Если в ячейках есть пробелы, разные регистры («МОСКВА» vs «Москва») или скрытые символы — дубликаты останутся незамеченными.

Метод 2: Функция ВПР для частичных совпадений

Если нужно найти строки, которые содержат общий фрагмент (например, одинаковые фамилии в разных адресах), используйте ВПР с подстановочным знаком *. Эта функция ищет приблизительные совпадения, если четвертый аргумент равен ИСТИНА.

Пример формулы для поиска похожих названий компаний в столбце B:

=ВПР(""&A2&"";B:B;1;ИСТИНА)

Как это работает:

  • 🔍 ""&A2&"" — ищет ячейки, где содержимое A2 является частью текста.
  • 📊 B:B — диапазон поиска.
  • 🔢 1 — номер столбца для возврата значения.
  • ИСТИНА — разрешает приблизительный поиск.
⚠️ Внимание: ВПР с приблизительным поиском требует, чтобы данные в поисковом столбце были отсортированы по алфавиту. Иначе результат будет некорректным.
Искомое значение (A2) Список для поиска (B:B) Результат ВПР
Рога ООО "Рога и копыта" ООО "Рога и копыта"
Иванов Иванов П.С.
Петров И.В.
Иванова А.К.
Иванов П.С.
Москва г. Москва, ул. Ленина
Московская обл.
Санкт-Петербург
г. Москва, ул. Ленина

Метод 3: Функция ПОИСКПОЗ с подстановочными знаками

ПОИСКПОЗ — более гибкая альтернатива ВПР, которая умеет работать с подстановочными знаками * (любое количество символов) и ? (один символ). Например, чтобы найти все email-адреса с доменом @gmail.com, используйте:

=ПОИСКПОЗ("*"&"@gmail.com";B:B;0)

Ключевые отличия от ВПР:

  • 🔢 Возвращает позицию найденного элемента, а не само значение.
  • 📌 Не требует сортировки данных.
  • 🚀 Работает быстрее на больших массивах.

Удалить лишние пробелы (=СЖПРОБЕЛЫ())

Привести текст к нижнему регистру (=НИЖНРЕГ())

Заменить синонимы (например, «ул.» → «улица»)

Удалить скрытые символы (=ПЕЧСИМВ())-->

Метод 4: Надстройка Fuzzy Lookup для «размытого» поиска

Если встроенные функции не справляются с задачей (например, нужно найти «ОАО Газпром» и «ПАО Газпром нефть» как похожие записи), используйте надстройку Fuzzy Lookup от Microsoft. Она анализирует сходство текста по алгоритму, похожему на тот, что используют поисковые системы.

Как установить:

  1. Скачайте надстройку с официального сайта Microsoft (бесплатно).
  2. В Excel перейдите в Файл → Параметры → Надстройки → Управление надстройками Excel → Перейти.
  3. Нажмите Обзор и выберите загруженный файл FuzzyLookupAddIn.xlam.

После установки в меню появится пункт Fuzzy Lookup. Надстройка позволяет:

  • 🔍 Настраивать порог сходства (например, 80% совпадений).
  • 📊 Сравнивать два столбца или две таблицы.
  • 📤 Экспортировать результаты в новый лист.
⚠️ Внимание: Fuzzy Lookup работает только в Excel для Windows (не поддерживается в Excel Online или Mac). Для больших таблиц (более 100 тыс. строк) может потребоваться несколько минут на обработку.
Как работает алгоритм Fuzzy Lookup?

Надстройка использует модифицированный алгоритм Jaccard similarity, который сравнивает множества токенов (слов) в строках. Например, для строк «Microsoft Corporation» и «MS Corp» алгоритм выделит общие токены «MS» и «Corp», а затем вычислит коэффициент сходства. Пороговое значение (по умолчанию 0.7) определяет, какие пары считаются «похожими».

Метод 5: Power Query для сложных сравнений

Power Query (вкладка Данные → Получить данные) — это инструмент для преобразования данных, который умеет объединять таблицы по неточным совпадениям. Например, можно сравнить два списка клиентов и найти записи с похожими ФИО, даже если они записаны по-разному.

Пошаговая инструкция:

  1. Загрузите обе таблицы в Power Query (Данные → Из таблицы/диапазона).
  2. В редакторе запросов выберите Главная → Объединить запросы → Объединить.
  3. В окне объединения выберите столбцы для сравнения и тип объединения Нечеткое соответствие.
  4. Настройте параметры сходства (например, Порог сходства: 0.8).

Преимущества метода:

  • 🔧 Гибкая настройка алгоритма сравнения (можно учитывать транслитерацию, опечатки).
  • 📈 Работает с большими объемами данных (миллионы строк).
  • 🔄 Позволяет автоматизировать процесс (обновление при изменении исходных данных).

Метод 6: Формулы для вычисления сходства текста

Если нужно количественно оценить, насколько похожи две строки, используйте формулы на основе:

  • 📏 Расстояния Левенштейна (количество изменений для преобразования одной строки в другую).
  • 🔢 Коэффициента Жаккара (доля общих слов в двух строках).

Пример формулы для расстояния Левенштейна (для коротких строк до 255 символов):

=ЛЕВЕНШТЕЙН(A2;B2)

Где:

  • A2 — первая строка.
  • B2 — вторая строка.

Чем меньше значение, тем похожее строки. Например:

Строка 1 Строка 2 Расстояние Левенштейна
Excel Exel 1
Microsoft Office Office 365 10
Иванов Иван Иванов И. 3

Для длинных строк используйте VBA-функцию (пример кода можно найти в разделе про автоматизацию).

Метод 7: VBA для автоматизации поиска

Если вам регулярно приходится искать похожие данные, имеет смысл написать макрос на VBA. Например, этот код находит все строки в столбце A, которые похожи на строку в ячейке B1 с точностью до 2 символов (по Левенштейну):

Sub FindSimilar()

Dim searchTerm As String

Dim rng As Range, cell As Range

Dim maxDistance As Integer

Dim results As String

searchTerm = Range("B1").Value

maxDistance = 2

results = ""

For Each cell In Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)

If Levenshtein(cell.Value, searchTerm) <= maxDistance Then

results = results & cell.Address & ": " & cell.Value & vbCrLf

End If

Next cell

If results <> "" Then

MsgBox "Найдены похожие строки:" & vbCrLf & results, vbInformation

Else

MsgBox "Похожие строки не найдены.", vbExclamation

End If

End Sub

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

' Реализация алгоритма Левенштейна

Dim i As Integer, j As Integer

Dim len1 As Integer, len2 As Integer

Dim d() As Integer

len1 = Len(s1): len2 = Len(s2)

ReDim d(len1, len2)

For i = 0 To len1

d(i, 0) = i

Next

For j = 0 To len2

d(0, j) = j

Next

For i = 1 To len1

For j = 1 To len2

If Mid(s1, i, 1) = Mid(s2, j, 1) Then

d(i, j) = d(i - 1, j - 1)

Else

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

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

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

End If

Next

Next

Levenshtein = d(len1, len2)

End Function

Чтобы использовать этот код:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Вернитесь в Excel, в ячейку B1 введите образец для поиска.
  4. Запустите макрос FindSimilar (Alt + F8).
⚠️ Внимание: Макросы с функцией Levenshtein могут тормозить на больших данных (более 10 тыс. строк). Для ускорения ограничьте диапазон поиска или используйте Power Query.

FAQ: Ответы на частые вопросы

Можно ли найти похожие данные в Excel Online?

В Excel Online доступны только базовые функции: условное форматирование для дубликатов и ВПР с точным поиском. Для «размытого» поиска потребуется десктопная версия Excel (Windows или Mac) с надстройкой Fuzzy Lookup или Power Query.

Как найти похожие строки, если они записаны в разных регистрах?

Используйте функцию =НИЖНРЕГ(), чтобы привести текст к нижнему регистру перед сравнением. Например:

=ЕСЛИ(НИЖНРЕГ(A2)=НИЖНРЕГ(B2);"Совпадают";"Не совпадают")

Для частичных совпадений комбинируйте с ПОИСК:

=ЕСЛИ(НЕ(ЕОШ(ПОИСК(НИЖНРЕГ("иванов");НИЖНРЕГ(A2))));"Есть совпадение";"")
Какая максимальная длина строки для функции ЛЕВЕНШТЕЙН?

Встроенная функция =ЛЕВЕНШТЕЙН() в Excel 2016 и новее поддерживает строки до 255 символов. Для более длинных строк используйте VBA-функцию (пример приведён в разделе про автоматизацию) или Power Query.

Как сравнить две таблицы на похожие записи?

Лучшие способы:

  1. Power Query: загрузите обе таблицы, выберите Объединить запросы → Нечеткое соответствие.
  2. Fuzzy Lookup: надстройка сравнит таблицы и выведет процент сходства для каждой пары.
  3. VBA: напишите макрос, который последовательно сравнивает строки из первой таблицы со строками второй (например, по расстоянию Левенштейна).

Для визуального анализа можно использовать сводные таблицы с группировкой по первым символам.

Почему Fuzzy Lookup не находит очевидные совпадения?

Возможные причины:

  • 🔢 Слишком высокий порог сходства (по умолчанию 0.7). Попробуйте уменьшить до 0.5–0.6.
  • 📌 Данные не очищены (лишние пробелы, скрытые символы). Используйте =СЖПРОБЕЛЫ() и =ПЕЧСИМВ().
  • 🔡 Надстройка сравнивает только текстовые данные. Числа и даты предварительно преобразуйте в текст (=ТЕКСТ()).
  • 📊 Ограничение на количество сравниваемых строк (максимум 250 тыс. пар). Для больших таблиц разбейте данные на части.