Вы когда-нибудь сталкивались с ситуацией, когда в огромной таблице Excel нужно найти все варианты написания одного и того же термина? Например, "ООО Ромашка", "ООО Ромашка-ЛТД", "Ромашка (ООО)" или даже опечатки вроде "Ромашкаа"? Или вам требуется выявить все синонимы типа "клиент"/"заказчик"/"покупатель"? Вручную это заняло бы часы, но с правильными инструментами Excel справится за минуты.
В этой статье мы разберём 7 практических методов поиска похожих слов — от элементарных функций до продвинутых скриптов. Вы узнаете, как:
- 🔍 Находить точные дубликаты с помощью условного форматирования
- 📝 Использовать текстовые функции для поиска частичных совпадений
- 🤖 Автоматизировать процесс с
Power QueryиVBA - 🧩 Применять нечёткое сравнение для опечаток и синонимов
Все методы протестированы на Excel 2010–2026 (включая Microsoft 365) и адаптированы для таблиц с 10–100 000 строк. Готовые файлы с примерами можно скачать в конце статьи.
1. Поиск точных дубликатов: условное форматирование
Самый быстрый способ выделить повторяющиеся слова — использовать условное форматирование. Это работает, если слова совпадают буквально (включая регистр). Например, "Мoskva" и "Москва" будут считаться разными.
Инструкция:
- Выделите диапазон с данными (например,
A1:A100). - Перейдите на вкладку
Главная → Условное форматирование → Правила выделения ячеек → Повторяющиеся значения. - Выберите формат (например, красный текст) и нажмите
ОК.
✅ Плюсы: мгновенный результат, не требует формул.
❌ Минусы: не находит частичные совпадения ("ООО Ромашка" vs "Ромашка").
Удалить лишние пробелы функцией TRIM|Привести текст к одному регистру (LOWER/UPPER)|Убрать знаки препинания (ЗАМЕНИТЬ)|Проверить отсутствие скрытых символов (CHAR(160) вместо пробела)-->
2. Частичные совпадения: функции ПОИСК и ЕЧИСЛО
Если нужно найти ячейки, содержащие определённую подстроку (например, все слова с "Ромашка"), используйте комбинацию функций ПОИСК (или FIND в английской версии) и ЕЧИСЛО (ISNUMBER).
Формула для ячейки B1 (если данные в A1):
=ЕЧИСЛО(ПОИСК("Ромашка";A1))
Вернёт ИСТИНА, если "Ромашка" есть в тексте ячейки A1 (в любом регистре). Для точного поиска с учётом регистра используйте НАЙТИ (FIND).
| Функция | Пример | Результат для "ООО Ромашка-ЛТД" |
|---|---|---|
ПОИСК("ромашка";A1) | Ищет "ромашка" в любом регистре | 5 (позиция начала подстроки) |
НАЙТИ("Ромашка";A1) | Ищет "Ромашка" с учётом регистра | 5 |
ПОИСК("ООО";A1)=1 | Проверяет, начинается ли текст с "ООО" | ИСТИНА |
Продвинутый трюк: Чтобы найти ячейки, содержащие любое из нескольких слов (например, "Ромашка" или "Тюльпан"), используйте:
=ИЛИ(ЕЧИСЛО(ПОИСК("Ромашка";A1)); ЕЧИСЛО(ПОИСК("Тюльпан";A1)))
3. Нечёткое сравнение: функция ЛЕВСИМВ и процент совпадения
Для поиска похожих, но не идентичных слов (например, опечаток "Мoskva" vs "Москва") используйте функцию ЛЕВСИМВ (LEVENSHTEIN в новых версиях Excel). Она вычисляет расстояние Левенштейна — количество изменений (замен, удалений, вставок), чтобы превратить одно слово в другое.
Формула для процента совпадения между ячейками A1 и B1:
=1 - ЛЕВСИМВ(A1; B1) / МАКС(ДЛСТР(A1); ДЛСТР(B1))
Результат ближе к 1 — слова очень похожи. Например:
- 🔹 "Excel" vs "Exel" → ~0.8 (одна опечатка)
- 🔹 "Microsoft" vs "Microsof" → ~0.9 (одна пропущенная буква)
⚠️ Внимание: Функция ЛЕВСИМВ доступна только в Excel 2019+ и Microsoft 365. Для старых версий используйте VBA (см. раздел 6).
4. Поиск синонимов: Power Query и внешние словари
Если вам нужно найти не опечатки, а синонимы (например, "клиент" = "заказчик" = "покупатель"), стандартными функциями Excel не обойтись. Здесь поможет Power Query + внешний словарь синонимов.
Алгоритм:
- Создайте таблицу синонимов в отдельном листе (столбец A — основное слово, столбец B — синонимы через запятую).
- Загрузите основные данные и словарь в
Power Query(Данные → Получить данные → Из таблицы/диапазона). - Объедините таблицы по условию "содержит" с помощью
Table.AddColumnи функцииText.Contains.
Пример кода для Power Query (M):
let
Source = Excel.CurrentWorkbook(){[Name="Данные"]}[Content],
Synonyms = Excel.CurrentWorkbook(){[Name="Синонимы"]}[Content],
ExpandedSynonyms = Table.ExpandListColumn(Synonyms, "Синонимы"),
Merged = Table.AddColumn(Source, "Синоним найден", each
List.Contains(ExpandedSynonyms[Синонимы], [Слово]), type logical)
in
Merged
📌 Где взять словари синонимов?:
- 📖 Экспортировать из WordNet или Русского тезауруса.
- 🤖 Использовать API Yandex Speller или Datamuse (требует VBA).
Как автоматизировать обновление синонимов?
Создайте запрос к API тезауруса через Power Query с параметром "обновлять при открытии файла". Пример для Datamuse:
let Source = Json.Document(Web.Contents("https://api.datamuse.com/words?rel_syn=клиент")) in Source
Это позволит всегда использовать актуальные синонимы без ручного редактирования таблицы.
5. Фильтрация по маске: символы подстановки
Если вы знаете шаблон искомого слова, используйте символы подстановки:
- 🌟
*— любое количество символов (например,машканайдёт "Ромашка", "Машка-инк"). - 🌟
?— один любой символ (например,?омашканайдёт "Ромашка", "Аомашка"). - 🌟
~— экранирование (поиск самого символа*или?).
Как применить:
- Нажмите
Ctrl + F(поиск). - В поле ввода укажите маску (например,
ромашка). - Включите опцию
Учитывать регистр, если нужно.
| Маска | Пример данных | Найдёт | Не найдёт |
|---|---|---|---|
р*а | Ромашка, Россия, Рама | Ромашка, Рама | Россия |
????? | Привет, Excel, Москва | Москва (5 букв) | Привет, Excel |
*лтд | ООО Ромашка-ЛТД, ЛТД Весна | Оба варианта | ЛТ (без "д") |
⚠️ Внимание: Поиск по маске в Excel ограничен 255 символами. Для длинных шаблонов используйте формулы сПОИСКилиРУБЛЬ.ТЕКСТ(в новых версиях).
6. Автоматизация: VBA для сложных задач
Если вам нужно обработать десятки тысяч строк или использовать нечёткое сравнение в старых версиях Excel, напишите макрос на VBA. Ниже пример кода для поиска похожих слов с порогом совпадения 80%:
Sub FindSimilarWords()
Dim ws As Worksheet
Dim rng As Range, cell As Range
Dim dict As Object
Dim similarityThreshold As Double
Dim i As Long, j As Long
Dim distance As Integer, maxLen As Integer
Set ws = ActiveSheet
Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
Set dict = CreateObject("Scripting.Dictionary")
similarityThreshold = 0.8 ' Порог совпадения (80%)
' Удаляем дубликаты и добавляем уникальные слова в словарь
For Each cell In rng
If Not dict.exists(cell.Value) Then
dict.Add cell.Value, 1
End If
Next cell
' Сравниваем каждое слово с каждым
ReDim similarPairs(1 To dict.Count * (dict.Count - 1) / 2, 1 To 2)
i = 1
For j = 0 To dict.Count - 2
For k = j + 1 To dict.Count - 1
distance = LevenshteinDistance(dict.Keys(j), dict.Keys(k))
maxLen = Application.WorksheetFunction.Max(Len(dict.Keys(j)), Len(dict.Keys(k)))
If 1 - (distance / maxLen) >= similarityThreshold Then
similarPairs(i, 1) = dict.Keys(j)
similarPairs(i, 2) = dict.Keys(k)
i = i + 1
End If
Next k
Next j
' Выводим результаты на новый лист
If i > 1 Then
Sheets.Add.Name = "Похожие слова"
Range("A1:B" & i - 1).Value = Application.Transpose(similarPairs)
Else
MsgBox "Похожие слова не найдены (порог: " & similarityThreshold * 100 & "%)", vbInformation
End If
End Sub
Function LevenshteinDistance(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(0 To len1, 0 To 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
d(i, j) = Application.WorksheetFunction.Min( _
d(i - 1, j) + 1, _
d(i, j - 1) + 1, _
d(i - 1, j - 1) + IIf(Mid(s1, i, 1) = Mid(s2, j, 1), 0, 1))
Next j
Next i
LevenshteinDistance = d(len1, len2)
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Запустите макрос
FindSimilarWords(F5).
✅ Плюсы: работает в Excel 2010+, обрабатывает большие объёмы данных.
❌ Минусы: требует знания VBA для модификации.
7. Продвинутые инструменты: надстройки и AI
Если встроенных функций Excel недостаточно, рассмотрите специализированные надстройки:
- 🛠️ Fuzzy Lookup Add-In от Microsoft (бесплатно, интегрируется в
Power Query). - 🤖 Excel AI Tools (например, Ablebits) — плагин с функцией нечёткого поиска.
- 🔧 Python + XLWings: подключите скрипты на Python с библиотекой
fuzzywuzzy.
Пример кода для Python (через XLWings):
import xlwings as xw
from fuzzywuzzy import fuzz
@xw.func
def fuzzy_match(text1, text2, threshold=80):
ratio = fuzz.ratio(text1, text2)
return ratio >= threshold
📌 Как подключить:
- Установите Python и библиотеки:
pip install xlwings fuzzywuzzy python-Levenshtein. - В Excel:
=fuzzy_match(A1; B1; 80)— вернётИСТИНА, если совпадение ≥80%.
⚠️ Внимание: Надстройки могут конфликтовать с корпоративными политиками безопасности. Перед установкой проверьте разрешения у администратора IT.
FAQ: Частые вопросы по поиску похожих слов
Можно ли найти похожие слова в Excel Online?
В Excel Online доступны только базовые функции: условное форматирование и ПОИСК. Для нечёткого поиска используйте Power Query (доступен в браузере с 2023 года) или экспортируйте данные в настольную версию.
Как найти слова с опечатками в одной букве (например, "Ексель" вместо "Эксель")?
Используйте функцию ЛЕВСИМВ с порогом совпадения 0.8–0.9. Для старых версий Excel напишите VBA-функцию (см. раздел 6) или примените Fuzzy Lookup.
Почему условное форматирование не находит дубликаты с разным регистром?
Excel по умолчанию учитывает регистр. Чтобы игнорировать его, добавьте вспомогательный столбец с функцией =СТРОЧН(A1) и применяйте форматирование к нему.
Как автоматически исправить опечатки в словах?
Создайте таблицу с правильными вариантами и используйте ВПР или ПОИСКПОЗ для замены. Для автоматической коррекции подключите Python с библиотекой textblob:
from textblob import TextBlob
corrected = TextBlob("Ексель").correct() # Вернёт "Excel"
Можно ли искать похожие слова в Google Sheets?
Да, в Google Sheets есть аналогичные функции:
=REGEXMATCH(A1; "ромашка")— для частичных совпадений.=ARRAYFORMULA(IFERROR(MATCH(...— для нечёткого поиска.- Надстройка Fuzzy Match из магазина дополнений.
Критическая заметка: Функция ЛЕВСИМВ в Excel 2019+ не учитывает транслитерацию (например, "Moskva" и "Москва" будут считаться совершенно разными словами). Для таких случаев используйте VBA с внешними библиотеками или Python.