Как работает функция СОВПАД в Excel: от базового синтаксиса до продвинутых приёмов

Введение: зачем нужна функция СОВПАД в Excel

Функция СОВПАД (англ. ISNUMBER + SEARCH) — это мощный, но часто недооценённый инструмент Microsoft Excel, который позволяет проверять наличие одного текстового фрагмента внутри другого. В отличие от простого сравнения (=A1=B1), она умеет работать с подстановочными знаками и даже поддерживает регулярные выражения в новых версиях программы. Почему это важно?

Представьте: у вас список из 10 000 email-адресов, и нужно найти все ящики на @gmail.com. Или базу клиентов, где в поле "Адрес" скрыты номера домов — их требуется извлечь. Или проверка орфографических ошибок в большом отчёте. Во всех этих случаях СОВПАД сэкономит часы ручной работы. Но есть нюанс: функция возвращает не сами совпадения, а лишь логические значения (ИСТИНА/ЛОЖЬ), поэтому её почти всегда комбинируют с другими инструментами — ЕСЛИ, ПОИСКПОЗ или ФИЛЬТР.

В этой статье разберём функцию "по косточкам": от базового синтаксиса до хитростей, которые знают только 1% пользователей. А ещё — типичные ошибки, из-за которых формулы ломаются, и реальные кейсы применения в бизнесе.

Синтаксис функции СОВПАД: разбираем аргументы

Официальный синтаксис функции выглядит так:

=СОВПАД(искомый_текст; текст_для_поиска; [чувствительность_к_регистру])

Разберём каждый аргумент подробно:

  • 🔍 искомый_текст — это подстрока, которую вы хотите найти. Может быть текстом ("привет"), ссылкой на ячейку (A1) или даже результатом другой функции (ЛЕВСИМВ(B2;3)).
  • 📄 текст_для_поиска — строка или ячейка, в которой ведётся поиск. Например, если ищете слово "кот" в фразе "мой кот Вася", то второй аргумент — это "мой кот Вася".
  • 🅰️ [чувствительность_к_регистру] — необязательный параметр. Если указать ИСТИНА, функция будет различать "Кот" и "кот". По умолчанию регистр игнорируется (ЛОЖЬ).

Пример простейшей формулы:

=СОВПАД("кот"; "мой кот Вася")  → вернёт ИСТИНА

Критичный нюанс: функция СОВПАД не поддерживает подстановочные знаки (* и ?) напрямую — для этого используйте функцию ПОИСК или НАЙТИ. Но об этом подробнее в следующем разделе.

📊 Как часто вы используете текстовые функции в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

Подстановочные знаки и регулярные выражения: расширяем возможности

Базовая функция СОВПАД ограничена поиском точных подстрок, но в реальных задачах часто нужны более гибкие инструменты. Здесь на помощь приходят:

1. Подстановочные знаки в функциях ПОИСК/НАЙТИ

Хотя СОВПАД не работает с * и ?, их можно использовать в комбинации с другими функциями:

  • — заменяет любое количество символов (включая ноль). Пример: поиск всех слов, начинающихся на "А" — =ЕСЛИ(ЕЧИСЛО(ПОИСК("А"; A1));...
  • ? — заменяет ровно один символ. Пример: поиск "кот" или "кит" — =ЕСЛИ(ЕЧИСЛО(ПОИСК("к?т"; A1));...

2. Регулярные выражения (только Excel 365 и Excel 2021)

В новых версиях Excel появилась поддержка регулярных выражений (regex) через функции ТЕКСТРАЗД, ТЕКСТДО и ТЕКСТПОСЛЕ. Например, чтобы найти все email-адреса в тексте, можно использовать:

=ТЕКСТРАЗД(A1; "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")

Сравнение инструментов:

МетодПоддержка * и ?РегистрРегулярные выраженияВозвращает
СОВПАД❌ НетОпционально❌ НетИСТИНА/ЛОЖЬ
ПОИСК✅ Да❌ Нет❌ НетПозиция символа
НАЙТИ❌ Нет✅ Да❌ НетПозиция символа
ТЕКСТРАЗД❌ Нет✅ Да✅ ДаМассив совпадений
=ЕСЛИ(ЕЧИСЛО(ПОИСК("+7()--*"; A1)); "Да"; "Нет")-->

Практическое применение: 5 реальных кейсов

Теория — это хорошо, но как СОВПАД помогает на практике? Вот несколько примеров из реальных задач:

1. Проверка корректности email-адресов

Допустим, у вас список email, и нужно отметить те, что содержат "@gmail.com":

=ЕСЛИ(СОВПАД("@gmail.com"; A1); "Gmail"; "Другой")

2. Поиск дубликатов с учётом частичного совпадения

Нужно найти клиентов с одинаковыми фамилиями (даже если имена разные):

=ЕСЛИ(СЧЁТЕСЛИ($B$1:$B$100; ""&ПРАВСИМВ(A1;3)&"")>1; "Дубликат"; "")

3. Извлечение числовых значений из текста

В ячейке текст "Заказ №12345 на сумму 5000 руб". Нужно вытащить номер заказа:

=--ТЕКСТРАЗД(A1; "[0-9]+"; 1)

4. Фильтрация строк по ключевым словам

В большом отчёте нужно оставить только строки, где упоминается "оплата" или "счёт":

=ФИЛЬТР(A1:B100; (СОВПАД("оплата"; A1:A100)) + (СОВПАД("счёт"; A1:A100)))

5. Проверка соответствия шаблону

Например, все артикулы должны начинаться с "ART-" и содержать 6 цифр:

=ЕСЛИ(И(НАЧИСТРОК(A1;5)="ART-"; ДЛСТР(A1)=11; ЕЧИСЛО(ПСТР(A1;6;6))); "Корректно"; "Ошибка")

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

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

Заменить специальные символы на унифицированный формат

Проверить наличие скрытых непечатаемых символов (=ЧИСТ())-->

Типичные ошибки и как их избежать

Даже опытные пользователи Excel иногда сталкиваются с неожиданными результатами при работе с СОВПАД. Вот самые распространённые ловушки:

⚠️ Внимание: Функция СОВПАД возвращает #ЗНАЧ!, если хотя бы один из аргументов не текст. Например, если в ячейке число 123, а не текст "123", формула сломается. Используйте =ТЕКСТ(A1;"0") для преобразования.

Ошибка 1: Пустые ячейки

Если в ячейке пусто, СОВПАД вернёт #ЗНАЧ!. Решение — добавить проверку:

=ЕСЛИ(A1=""; ""; СОВПАД("текст"; A1))

Ошибка 2: Неучтённые пробелы

Пробелы в начале или конце строки могут сломать поиск. Всегда очищайте данные:

=СЖПРОБЕЛЫ(A1)

Ошибка 3: Чувствительность к регистру

По умолчанию СОВПАД("Кот"; "кот") вернёт ИСТИНА. Если нужно различать регистр, используйте третий аргумент:

=СОВПАД("Кот"; "кот"; ИСТИНА)  → вернёт ЛОЖЬ

Ошибка 4: Поиск спецсимволов

Символы ~ * ? имеют специальное значение. Чтобы найти их как текст, используйте тильду:

=СОВПАД("~"; "Звезда ")  → ищет именно символ *

Ошибка 5: Длинные тексты

Excel ограничивает длину текста в ячейке 32 767 символами. При работе с большими текстами разделяйте их на части.

Почему СОВПАД иногда работает медленно?

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

1. Используйте ПОИСКПОЗ для бинарного поиска (требует отсортированные данные).

2. Преобразуйте данные в Power Query — там поиск оптимизирован.

3. Для статических данных создайте вспомогательный столбец с хэш-кодами (=СЦЕПИТЬ(КОДСИМВ(ЛЕВСИМВ(A1));...) и сравнивайте их.

СОВПАД vs ПОИСК vs НАЙТИ: что выбрать?

В Excel есть три основные функции для поиска подстрок, и каждая имеет свои особенности. Давайте сравним их:

КритерийСОВПАДПОИСКНАЙТИ
Возвращаемое значениеИСТИНА/ЛОЖЬПозиция символаПозиция символа
Подстановочные знаки❌ Нет✅ Да (* и ?)❌ Нет
Чувствительность к региструОпционально❌ Нет✅ Да
Обработка ошибок❌ Возвращает #ЗНАЧ!❌ Возвращает #ЗНАЧ!❌ Возвращает #ЗНАЧ!
Производительность⚠️ Медленнее на больших данных✅ Быстрее✅ Быстрее

Когда использовать какую функцию?

  • 🔹 СОВПАД — когда нужен простой логический результат (ДА/НЕТ) и не нужны подстановочные знаки.
  • 🔹 ПОИСК — для гибкого поиска с * и ?, когда регистр не важен.
  • 🔹 НАЙТИ — когда важен регистр или нужно точное положение подстроки.

Пример комбинированного использования:

=ЕСЛИ(ЕЧИСЛО(ПОИСК(""&D1&""; A1)); "Совпадает"; "Не совпадает")

Здесь D1 — искомое слово, а A1 — текст для поиска. Функция ЕЧИСЛО проверяет, вернул ли ПОИСК позицию (число) или ошибку.

=ЕСЛИ((СОВПАД("кот";A1))*(СОВПАД("собака";A1)); "Есть и кот, и собака"; "...")

Это работает потому, что ИСТИНА=1, а ЛОЖЬ=0 — умножение даёт 1 только если оба условия выполнены.-->

Продвинутые техники: массивы и LAMBDA

Если вы работаете с Excel 365 или Excel 2021, у вас есть доступ к динамическим массивам и функции LAMBDA. Это открывает новые возможности для работы с СОВПАД:

1. Поиск нескольких подстрок одновременно

Допустим, нужно проверить, содержит ли текст любое из слов "кот", "собака" или "попугай":

=ЕСЛИ(ИЛИ(СОВПАД({"кот";"собака";"попугай"}; A1)); "Есть животное"; "Нет")

Здесь {"кот";"собака";"попугай"} — это вертикальный массив, который автоматически разворачивается в несколько проверок.

2. Создание пользовательской функции с LAMBDA

Можно создать свою функцию для гибкого поиска:

=LAMBDA(текст; шаблоны;

ЛОЖЬ=ИЛИ(СОВПАД(шаблоны; текст))

)(A1; {"кот";"собака"})

Эта функция вернёт ИСТИНА, если в A1 есть хотя бы одно из указанных слов.

3. Извлечение всех совпадений в массив

С помощью ТЕКСТРАЗД и ФИЛЬТР можно получить список всех найденных подстрок:

=ТЕКСТРАЗД(A1; "[А-Яа-яЁё]+")  → вернёт массив всех слов

4. Подсчёт количества вхождений

Чтобы посчитать, сколько раз слово "кот" встречается в тексте:

=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"кот";""))/ДЛСТР("кот")

Пример сложной формулы: найдём все ячейки, где есть цифры, но нет букв "а" или "б":

=ФИЛЬТР(A1:A100;

(ЕЧИСЛО(НАЙТИ(ТЕКСТРАЗД(A1:A100; "[0-9]"); A1:A100))) *

(НЕ(СОВПАД("а"; A1:A100))) *

(НЕ(СОВПАД("б"; A1:A100)))

)

Оптимизация производительности при работе с большими данными

Функции поиска подстрок могут значительно тормозить Excel, если применять их к большим диапазонам (100 000+ строк). Вот как ускорить работу:

  • Отключите автоматический пересчёт: перейдите в Формулы → Параметры вычислений → Вручную и обновляйте только когда нужно (F9).
  • Используйте вспомогательные столбцы: вместо сложных формул в основной таблице вынесите промежуточные вычисления в отдельные столбцы.
  • Замените текстовые функции на Power Query: инструмент Главная → Получить данные обрабатывает миллионы строк без тормозов.
  • Применяйте фильтры на уровне данных: если можно отфильтровать данные до применения СОВПАД, сделайте это — меньше строк = быстрее поиск.

Пример оптимизации: вместо

=СЧЁТЕСЛИ(A1:A100000; "кот")

лучше использовать:

// В Power Query:

= Table.SelectRows(Источник; each Text.Contains([Column1]; "кот"))

Критичный факт: в Excel 2019 и старше функция СОВПАД работает на 30-40% быстрее, если второй аргумент — прямая ссылка на ячейку (A1), а не текст в кавычках ("текст").

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

Можно ли в СОВПАД использовать регулярные выражения?

Нет, сама функция СОВПАД не поддерживает regex. Но в Excel 365 есть альтернативы:

  • ТЕКСТРАЗД — для извлечения данных по шаблону.
  • РЕГВЫРАЖ.ИЗВЛЕЧЬ (в бета-версиях) — полноценная поддержка regex.

Для старых версий Excel используйте надстройки или Power Query.

Почему СОВПАД не находит слово, которое точно есть в ячейке?

Вероятные причины:

  1. В ячейке есть непечатаемые символы (пробелы, переводы строк). Используйте =ЧИСТ(A1).
  2. Текст в ячейке хранится как число (например, 123 вместо "123"). Преобразуйте в текст: =ТЕКСТ(A1;"0").
  3. Указан чувствительный к регистру поиск, а регистры не совпадают.
Как найти ячейки, где есть любое из нескольких слов?

Используйте комбинацию ИЛИ и СОВПАД:

=ИЛИ(СОВПАД("слово1";A1); СОВПАД("слово2";A1); СОВПАД("слово3";A1))

Или для больших списков:

=ЕСЛИ(СУММПРОИЗВ(--СОВПАД(D1:D10;A1))>0; "Есть совпадение"; "")

Где D1:D10 — диапазон с искомыми словами.

Можно ли с помощью СОВПАД проверять формат данных (например, ИНН или телефон)?

Да, но лучше комбинировать с другими функциями. Примеры:

Проверка ИНН (10 или 12 цифр):

=И(ДЛСТР(A1)=10; ЕЧИСЛО(ПОИСКПОЗ(ЛЕВСИМВ(A1); "0123456789";0))); "Корректный ИНН"; "Ошибка")

Проверка телефона (+7XXX...):

=ЕСЛИ(И(ЛЕВСИМВ(A1;2)="+7"; ДЛСТР(ПОДСТАВИТЬ(A1;"+7";""))=10; ЕЧИСЛО(ПОДСТАВИТЬ(A1;"+7";""))); "Корректно"; "Ошибка")
Как ускорить работу СОВПАД на больших таблицах?

Рекомендации по оптимизации:

  • Используйте вспомогательные столбцы для промежуточных вычислений.
  • Замените СОВПАД на ПОИСК + ЕЧИСЛО — это быстрее:
  • =ЕЧИСЛО(ПОИСК("текст";A1))
  • Для статических данных используйте Power Query — там поиск оптимизирован.
  • Отключите автоматический пересчёт формул (Формулы → Вычисления → Вручную).