Введение: зачем нужна функция СОВПАД в Excel
Функция СОВПАД (англ. ISNUMBER + SEARCH) — это мощный, но часто недооценённый инструмент Microsoft Excel, который позволяет проверять наличие одного текстового фрагмента внутри другого. В отличие от простого сравнения (=A1=B1), она умеет работать с подстановочными знаками и даже поддерживает регулярные выражения в новых версиях программы. Почему это важно?
Представьте: у вас список из 10 000 email-адресов, и нужно найти все ящики на @gmail.com. Или базу клиентов, где в поле "Адрес" скрыты номера домов — их требуется извлечь. Или проверка орфографических ошибок в большом отчёте. Во всех этих случаях СОВПАД сэкономит часы ручной работы. Но есть нюанс: функция возвращает не сами совпадения, а лишь логические значения (ИСТИНА/ЛОЖЬ), поэтому её почти всегда комбинируют с другими инструментами — ЕСЛИ, ПОИСКПОЗ или ФИЛЬТР.
В этой статье разберём функцию "по косточкам": от базового синтаксиса до хитростей, которые знают только 1% пользователей. А ещё — типичные ошибки, из-за которых формулы ломаются, и реальные кейсы применения в бизнесе.
Синтаксис функции СОВПАД: разбираем аргументы
Официальный синтаксис функции выглядит так:
=СОВПАД(искомый_текст; текст_для_поиска; [чувствительность_к_регистру])
Разберём каждый аргумент подробно:
- 🔍 искомый_текст — это подстрока, которую вы хотите найти. Может быть текстом (
"привет"), ссылкой на ячейку (A1) или даже результатом другой функции (ЛЕВСИМВ(B2;3)). - 📄 текст_для_поиска — строка или ячейка, в которой ведётся поиск. Например, если ищете слово "кот" в фразе "мой кот Вася", то второй аргумент — это "мой кот Вася".
- 🅰️ [чувствительность_к_регистру] — необязательный параметр. Если указать
ИСТИНА, функция будет различать "Кот" и "кот". По умолчанию регистр игнорируется (ЛОЖЬ).
Пример простейшей формулы:
=СОВПАД("кот"; "мой кот Вася") → вернёт ИСТИНА
Критичный нюанс: функция СОВПАД не поддерживает подстановочные знаки (* и ?) напрямую — для этого используйте функцию ПОИСК или НАЙТИ. Но об этом подробнее в следующем разделе.
Подстановочные знаки и регулярные выражения: расширяем возможности
Базовая функция СОВПАД ограничена поиском точных подстрок, но в реальных задачах часто нужны более гибкие инструменты. Здесь на помощь приходят:
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.
Почему СОВПАД не находит слово, которое точно есть в ячейке?
Вероятные причины:
- В ячейке есть непечатаемые символы (пробелы, переводы строк). Используйте
=ЧИСТ(A1). - Текст в ячейке хранится как число (например,
123вместо"123"). Преобразуйте в текст:=ТЕКСТ(A1;"0"). - Указан чувствительный к регистру поиск, а регистры не совпадают.
Как найти ячейки, где есть любое из нескольких слов?
Используйте комбинацию ИЛИ и СОВПАД:
=ИЛИ(СОВПАД("слово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))
Формулы → Вычисления → Вручную).