Поиск текста и символов в Excel: НАЙТИ против ПОИСК
Чтобы найти позицию текста или символа внутри ячейки в Excel, используйте функцию НАЙТИ (для точного поиска с учетом регистра) или ПОИСК (для гибкого поиска без учета регистра). Обе функции возвращают номер позиции первого найденного символа, что позволяет использовать этот результат для дальнейшего извлечения или замены данных.
Краткий ответ: Если нужно просто найти слово независимо от того, написан оно заглавными или строчными буквами — используйте =ПОИСК("текст"; A1). Если важен точный регистр (например, отличить "Май" от "май") — используйте =НАЙТИ("текст"; A1).
В чем главная разница между функциями
Несмотря на схожий синтаксис, эти две функции ведут себя по-разному в критических ситуациях. Понимание этих отличий сэкономит вам часы отладки формул.
-
Чувствительность к регистру.
- НАЙТИ (FIND): Различает заглавные и строчные буквы. Поиск "А" и "а" даст разные результаты или ошибку.
- ПОИСК (SEARCH): Игнорирует регистр. Для него "А" и "а" — это один и тот же символ.
-
Поддерживаемые символы.
- НАЙТИ: Работает только с конкретным текстом. Символы
*(звездочка) и?(вопросительный знак) ищутся буквально. - ПОИСК: Поддерживает подстановочные знаки.
*заменяет любую последовательность символов, а?— любой одиночный символ.
- НАЙТИ: Работает только с конкретным текстом. Символы
Если функция не находит искомый текст, она возвращает ошибку #ЗНАЧ! (#VALUE!). Это частая причина поломок в сложных цепочках вычислений. Всегда предусматривайте обработку этой ошибки.
Синтаксис и аргументы
Обе функции имеют идентичную структуру аргументов:
=НАЙТИ(что_ищем; где_ищем; [начальная_позиция])
=ПОИСК(что_ищем; где_ищем; [начальная_позиция])
- что_ищем (обязательно): Текст, символ или ссылка на ячейку с искомым значением.
- где_ищем (обязательно): Ячейка или текстовая строка, в которой производится поиск.
- начальная_позиция (необязательно): Номер символа, с которого начать поиск. По умолчанию равен 1 (начало строки). Если указать 5, поиск начнется с пятого символа, игнорируя первые четыре.
Практические примеры использования
Рассмотрим реальные сценарии, чтобы закрепить понимание.
Пример 1: Учет регистра
Допустим, в ячейке A1 находится текст: Привет, Мир.
- Формула
=НАЙТИ("мир"; A1)вернет #ЗНАЧ!, так как в тексте "Мир" написано с большой буквы, а мы ищем с маленькой. - Формула
=ПОИСК("мир"; A1)вернет 9, успешно найдя слово независимо от регистра.
Пример 2: Использование подстановочных знаков
В ячейке B1 записан артикул: Товар-АБ-123. Нам нужно найти позицию любого дефиса, за которым следуют две буквы.
- Формула
=ПОИСК("-??"; B1)найдет позицию первого дефиса, после которого идут два любых символа. - Функция НАЙТИ не сможет обработать вопросительные знаки как шаблон и будет искать буквальный символ
?.
Пример 3: Поиск второго вхождения
Иногда нужно найти не первое, а второе упоминание слова. Для этого используется аргумент начальная_позиция.
Допустим, в ячейке C1 текст: отдел продаж, отдел закупок, отдел логистики. Нужно найти начало слова "отдел" во второй раз.
- Сначала находим первый "отдел":
=ПОИСК("отдел"; C1)→ результат 1. - Запускаем повторный поиск, начиная со следующей позиции после первого нахождения:
=ПОИСК("отдел"; C1; ПОИСК("отдел"; C1) + 1)Эта формула пропустит первое вхождение и вернет позицию второго.
Комбинация с другими функциями
Сама по себе позиция числа мало полезна. Обычно результат функций НАЙТИ/ПОИСК используют как аргумент для функций извлечения текста: ЛЕВСИМВ, ПСТР или ПРАВСИМВ.
Извлечение текста до разделителя
Частая задача: получить имя пользователя из email (все символы до собаки @).
Формула:
=ЛЕВСИМВ(A2; ПОИСК("@"; A2) - 1)
Логика: ПОИСК находит позицию @, мы вычитаем 1, чтобы не захватить сам символ, и ЛЕВСИМВ забирает всё слева от этой позиции.
Извлечение текста между скобками
Задача: вытащить текст из (скобки).
Формула:
=ПСТР(A2; ПОИСК("("; A2) + 1; ПОИСК(")"; A2) - ПОИСК("("; A2) - 1)
Здесь мы вычисляем начальную позицию (после открывающей скобки) и длину извлекаемого фрагмента (расстояние между скобками минус 1).
Лайфхак для безопасности формул:
Всегда оборачивайте поиск в функцию ЕСЛИОШИБКА, если искомый текст может отсутствовать.
Вместо =НАЙТИ("код"; A1) используйте:
=ЕСЛИОШИБКА(НАЙТИ("код"; A1); 0)
Это заменит страшную ошибку #ЗНАЧ! на понятный ноль, который легко отфильтровать или использовать в условиях.
Сравнительная таблица функций
| Характеристика | Функция НАЙТИ (FIND) | Функция ПОИСК (SEARCH) |
|---|---|---|
| Регистр | Учитывает (А ≠ а) | Не учитывает (А = а) |
| Спецсимволы | Ищет буквально (* и ?) | Поддерживает шаблоны (* и ?) |
| Язык | Работает с любыми символами | Зависит от локали (в некоторых версиях могут быть нюансы с двойными байтами) |
| Когда применять | Парсинг кодов, паролей, точных идентификаторов | Поиск ключевых слов, очистка данных, работа с пользовательским вводом |
Частые ошибки при работе с поиском
-
Ошибка #ЗНАЧ! (#VALUE!) Возникает, если текст не найден. Решение: Используйте конструкцию
ЕСЛИОШИБКА(формула; "Не найдено"). -
Неверный результат из-за пробелов Часто в данных есть лишние пробелы в начале или конце (
" текст "). Функция поиска может не найти совпадение или вернуть неверную позицию для обрезки. Решение: Оборачивайте исходную ячейку в функцию СЖПРОБЕЛЫ (TRIM). Пример:=ПОИСК("слово"; СЖПРОБЕЛЫ(A1)). -
Поиск цифры в числе Если в ячейке хранится числовой формат (12345), а вы ищете текст "2", функции сработают корректно, так как Excel автоматически преобразует число в текст для поиска. Однако поиск части числа (например, найти "23" в 12345) вернет позицию 2. Будьте внимательны при математических операциях с результатом.
FAQ
Можно ли найти все вхождения текста сразу? Нет, функции НАЙТИ и ПОИСК возвращают только позицию первого найденного элемента (или первого после указанной стартовой позиции). Чтобы найти все, нужно использовать циклические ссылки (не рекомендуется) или писать макросы VBA / использовать новые динамические массивы в сочетании с другими функциями.
Что делать, если нужно найти текст с конца строки?
Стандартные функции ищут только слева направо. Для поиска справа налево можно использовать трюк: перевернуть строку с помощью комбинации функций (что сложно) или вычесть позицию последнего вхождения, найденного через хитрую формулу с ПОДСТАВИТЬ.
Пример поиска последней точки:
=ПОИСК("@@@", ПОДСТАВИТЬ(A1; "."; "@"; ДЛИНА(A1)-ДЛИНА(ПОДСТАВИТЬ(A1; "."; ""))))
Работают ли эти функции в Google Таблицах?
Да, синтаксис полностью идентичен. Функции называются так же: FIND и SEARCH (или НАЙТИ и ПОИСК в русской локализации).