Как найти частичное совпадение в ячейках Excel: от простых функций до Power Query

Вы когда-нибудь пытались найти в Excel ячейки, которые содержат лишь часть искомого текста? Например, отфильтровать список email-адресов по домену @gmail.com или выделить все строки с упоминанием конкретного продукта в длинных описаниях? Задача кажется простой, но стандартный поиск по Ctrl+F часто не справляется — он ищет только точные вхождения. В этой статье разберём 7 рабочих методов, от базовых функций до продвинутых инструментов, которые помогут найти частичные совпадения в данных любой сложности.

Особенность частичного поиска в том, что он требует гибкости: иногда нужно найти текст в начале ячейки (например, коды продуктов типа ART-), иногда — в середине (фрагменты адресов), а иногда — игнорировать регистр или учитывать ошибки ввода. Мы рассмотрим решения для всех этих случаев, включая малоизвестные приёмы с регулярными выражениями и Power Query, которые экономят часы ручной работы. Если вы работаете с большими массивами данных — этот гайд сэкономит вам время и нервы.

1. Базовые функции: ПОИСК, ПОИСКПОЗ и ЕЧИСЛО

Начнём с классики — встроенных функций Excel, которые справится с 80% задач по частичному поиску. Их главное преимущество: работают во всех версиях программы (включая Excel 2010 и старше) и не требуют дополнительных надстроек.

Функция ПОИСК(искомая_подстрока; текст; [нач_позиция]) возвращает позицию первого вхождения подстроки в тексте. Если подстрока не найдена — вернёт ошибку #ЗНАЧ!. Например, формула =ПОИСК("кот"; "Котика зовут Мурзик") вернёт 2, потому что "кот" начинается со второго символа. Чтобы преобразовать это в логическое значение (ИСТИНА/ЛОЖЬ), обернём функцию в ЕЧИСЛО:

=ЕЧИСЛО(ПОИСК("кот"; A1))  → вернёт ИСТИНА, если "кот" есть в ячейке A1

Для поиска с учётом регистра используйте НАЙТИ (аналог ПОИСК, но чувствителен к заглавным буквам). А если нужно найти позицию подстроки для дальнейших манипуляций (например, извлечь часть текста), комбинируйте ПОИСК с ПСТР:

=ПСТР(A1; ПОИСК("@"; A1); 10)  → извлечёт 10 символов, начиная с "@"
  • 🔍 ПОИСК — ищет подстроку без учёта регистра, возвращает позицию.
  • 🔎 НАЙТИ — то же, но с учётом регистра (например, различает "Excel" и "excel").
  • ЕЧИСЛО — преобразует результат в ИСТИНА/ЛОЖЬ для фильтрации.
  • 📌 ПОИСКПОЗ — полезен для поиска частичного совпадения в массиве (см. следующий раздел).
⚠️ Внимание: Функция ПОИСК не работает с подстановочными знаками (вроде * или ?). Для этого используйте ПОИСКПОЗ с маской или регулярные выражения (раздел 5).

2. Функция ПОИСКПОЗ для частичного совпадения в массивах

ПОИСКПОЗ чаще ассоциируется с поиском точных значений, но её можно адаптировать для частичного совпадения. Секрет — в третьем аргументе, где указывается тип сопоставления:

  • 0 — точное совпадение (по умолчанию).
  • 1 — поиск наибольшего значения, не превышающего искомое (для отсортированных данных).
  • 2поиск подстроки с подстановочными знаками * и ?.

Пример: найдём первую ячейку в диапазоне A1:A10, которая содержит слово "отчёт" (в любом регистре и с любыми символами до/после):

=ПОИСКПОЗ("'отчёт'; A1:A10; 2)

Здесь * означает "любое количество символов". Важно: данные в диапазоне A1:A10 должны быть отсортированы по алфавиту, иначе результат будет некорректным. Для несортированных данных комбинируйте ПОИСКПОЗ с ИНДЕКС:

=ИНДЕКС(A1:A10; ПОИСКПОЗ("'отчёт'; A1:A10; 2))
Подстановочный знакЗначениеПример
*Любое количество символов (включая ноль)"отчёт" — найдёт "ежедневный отчёт", "отчёт за месяц"
?Ровно один символ"отч?т" — найдёт "отчёт", но не "отчет"
~Экранирование (поиск самого или ?)"~" — найдёт ячейки со звёздочкой
📊 Какой метод поиска вы используете чаще?
Функции ПОИСК/НАЙТИ
Фильтры и условное форматирование
Power Query
Регулярные выражения

3. Фильтрация и условное форматирование

Если вам не нужны формулы, а достаточно просто выделить или отфильтровать ячейки с частичным совпадением — используйте встроенные инструменты Excel. Это быстрее, чем писать формулы, и визуально нагляднее.

Способ 1: Текстовый фильтр

  1. Выделите диапазон данных (например, A1:A100).
  2. Перейдите на вкладку Данные → Фильтр.
  3. Нажмите на стрелку фильтра в заголовке столбца и выберите Текстовые фильтры → Содержит....
  4. Введите искомую подстроку (например, @gmail) и нажмите ОК.

Способ 2: Условное форматирование

Чтобы автоматически подсвечивать ячейки с частичным совпадением:

  1. Выделите диапазон (например, B2:B50).
  2. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  3. Выберите Использовать формулу для определения форматируемых ячеек.
  4. Введите формулу: =ЕЧИСЛО(ПОИСК("текст"; B2)) (замените "текст" на свою подстроку).
  5. Задайте цвет заполнения (например, жёлтый) и нажмите ОК.

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

Привести текст к одному регистру (функция ПРОПИСН или СТРОЧН)

Проверить отсутствие ошибок (#Н/Д, #ЗНАЧ!)

Сортировать данные (для корректной работы ПОИСКПОЗ)-->

Преимущество этого метода — динамичность: при изменении данных подсветка или фильтр обновляются автоматически. Однако для больших таблиц (100 000+ строк) условное форматирование может замедлять работу файла.

4. Power Query: продвинутый поиск для больших данных

Если вы работаете с большими массивами данных (например, логами, базами клиентов или каталогами товаров), стандартные функции Excel могут подтормаживать. Здесь на помощь приходит Power Query — инструмент для трансформации и очистки данных, встроенный в Excel 2016+ и Power BI.

Алгоритм действий:

  1. Выделите исходные данные и перейдите на вкладку Данные → Из таблицы/диапазонаExcel 2016-2019) или Данные → Получить данные → Из таблицы/диапазонаExcel 365).
  2. В открывшемся редакторе Power Query выберите столбец, где нужно искать частичное совпадение.
  3. Перейдите на вкладку Добавить столбец → Пользовательский столбец.
  4. Введите формулу для поиска. Например, чтобы найти строки с подстрокой "urgent":
    = Text.Contains([YourColumn], "urgent")

    Здесь [YourColumn] — название вашего столбца.

  5. Нажмите ОК, затем Закрыть и загрузить.

Power Query поддерживает регистронезависимый поиск по умолчанию, а также работу с регулярными выражениями (через Text.Select или Text.Replace). Например, чтобы извлечь все email-адреса из текста:

= Text.Select([TextColumn], {"a-z", "A-Z", "0-9", ".", "@", "_"})

Главное преимущество Power Queryне нагружает файл: все преобразования происходят при загрузке данных, а не в реальном времени. Это критично для файлов размером 100+ МБ.

Как обновить данные после изменений?

В Excel щёлкните правой кнопкой по результату Power Query (таблице) и выберите Обновить. Либо нажмите Данные → Обновить все. В Power BI обновление происходит автоматически при публикации отчёта.

5. Регулярные выражения (Regex) в Excel

Регулярные выражения (regex) — это "язык" для сложного поиска по шаблонам. В стандартном Excel их нет, но можно подключить через:

  • 📌 VBA (макрос с использованием RegExp).
  • 🔧 Power Query (функции Text.Select, Text.Replace с regex).
  • 🛠️ Надстройки (например, ABLEbits или Kutools for Excel).

Пример макроса для поиска email-адресов в тексте:

Sub FindEmails()

Dim rng As Range, cell As Range

Dim regex As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"

regex.Global = True

For Each cell In Selection

If regex.Test(cell.Value) Then

cell.Interior.Color = RGB(255, 255, 0) ' Подсветка жёлтым

End If

Next cell

End Sub

Чтобы запустить макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите диапазон ячеек в Excel и запустите макрос (F5).
⚠️ Внимание: Регулярные выражения в VBA чувствительны к регистру по умолчанию. Чтобы игнорировать регистр, добавьте строку regex.IgnoreCase = True перед циклом For Each.
Шаблон regexЧто ищетПример совпадения
\d{3}-\d{2}Три цифры, дефис, две цифры123-45
[A-Za-z]+\d{2}Буквы + две цифры в концеProduct42
^ПриветСлово "Привет" в начале строкиПривет, мир!
@gmail\.com$Email-адреса на @gmail.comuser@gmail.com

6. Поиск с учётом опечаток (нечёткий поиск)

Что делать, если в данных есть опечатки? Например, нужно найти все вхождения "Мoskva", но в ячейках встречается "Moskva", "Moscow", "Мосвка". Здесь поможет нечёткий поиск (fuzzy matching). В Excel для этого нет встроенных функций, но есть обходные пути:

Способ 1: Функция ПОДОБН (для небольших расхождений)

Функция =ПОДОБН(искомый_текст; текст_в_ячейке) возвращает ИСТИНА, если тексты совпадают с учётом подстановочных знаков. Например:

=ПОДОБН("Мос?ва"; A1)  → найдёт "Москва", "Мосвва", но не "Moskva"

Способ 2: Надстройка Fuzzy Lookup

Для серьёзных задач (например, сверки баз данных с опечатками) используйте надстройку Fuzzy Lookup от Microsoft Research:

  1. Скачайте надстройку с сайта Microsoft.
  2. Установите и активируйте в Excel через Файл → Параметры → Надстройки.
  3. Выделите два столбца (например, A1:A100 и B1:B100) и запустите Fuzzy Lookup.
  4. Настройте порог сходства (например, 80%) и получите таблицу совпадений.

Способ 3: Формула расстояния Левенштейна

Расстояние Левенштейна показывает, сколько изменений (замен, удалений, вставок) нужно сделать, чтобы один текст превратить в другой. В Excel эту функцию можно реализовать через VBA:

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

' Код функции (можно найти в открытых источниках)

End Function

Затем используйте её в ячейке:

=Levenshtein(A1; "Мoskva")  → вернёт 1 (одна замена "o" на "о")

7. Примеры реальных задач и решения

Разберём типичные сценарии, с которыми сталкиваются пользователи.

Задача 1: Найти все строки, где в ячейке есть слово "срочно" (в любом регистре и с любыми символами вокруг).

Решение: Используйте фильтр с подстановочными знаками или формулу:

=ЕЧИСЛО(ПОИСК("срочно"; A1))

Задача 2: Извлечь все домены из списка email-адресов (например, из user@gmail.com получить gmail.com).

Решение: Комбинация ПОИСК, ПСТР и ДЛСТР:

=ПСТР(A1; ПОИСК("@"; A1) + 1; ДЛСТР(A1) - ПОИСК("@"; A1))

Задача 3: Проверить, содержится ли хотя бы одно из ключевых слов ("отчёт", "документ", "справка") в ячейке.

Решение: Используйте ИЛИ с вложенными ПОИСК:

=ИЛИ(ЕЧИСЛО(ПОИСК("отчёт"; A1)); ЕЧИСЛО(ПОИСК("документ"; A1)); ЕЧИСЛО(ПОИСК("справка"; A1)))

Задача 4: Найти дубликаты с учётом частичных совпадений (например, "ООО Ромашка" и "Ромашка ЛТД").

Решение: Примените Fuzzy Lookup (раздел 6) или создайте дополнительный столбец с "нормализованными" данными (удалите пробелы, приведите к нижнему регистру, оставите только ключевые слова).

FAQ: Частые вопросы по частичному поиску

Как найти ячейки, которые НЕ содержат определенную подстроку?

Используйте формулу с НЕ:

=НЕ(ЕЧИСЛО(ПОИСК("текст"; A1)))

Или примените фильтр: Текстовые фильтры → Не содержит....

Почему ПОИСКПОЗ с подстановочными знаками возвращает #Н/Д?

Причины:

  • Данные не отсортированы (для типа сопоставления 2 сортировка обязательна!).
  • В подстановочной маске есть ошибка (например, забыли * до/после искомого текста).
  • Искомый текст содержит символы ~ * ? — их нужно экранировать тильдой (~).
Как искать частичное совпадение в Google Sheets?

В Google Таблицах используйте:

  • =REGEXMATCH(A1; "текст") — для поиска с regex.
  • =SEARCH("текст"; A1) — аналог ПОИСК в Excel.
  • =FILTER(A1:A10; REGEXMATCH(A1:A10; "текст")) — для фильтрации.
Можно ли искать частичное совпадение по нескольким критериям одновременно?

Да, комбинируйте функции с И или ИЛИ:

=И(ЕЧИСЛО(ПОИСК("критерий1"; A1)); ЕЧИСЛО(ПОИСК("критерий2"; A1)))

Для трёх и более критериев удобнее использовать Power Query или VBA.

Как ускорить поиск в больших таблицах (100 000+ строк)?

Рекомендации:

  • Преобразуйте данные в Таблицу Excel (Ctrl+T) — это ускорит фильтрацию.
  • Используйте Power Query для предварительной обработки.
  • Отключите автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную).
  • Для критических задач экспортируйте данные в Power BI или Python (библиотека pandas).