Функция ПОИСКПОЗ в Excel: полное руководство с примерами и лайфхаками

Вы когда-нибудь пытались найти позицию текста или числа в Excel, но стандартный ПОИСК не давал нужного результата? Функция ПОИСПОЗ (или SEARCH в английской версии) — это мощный инструмент, который часто остаётся в тени у своего "собрата" НАЙТИ. Она не просто ищет подстроку, а делает это с учётом регистра, поддерживает подстановочные знаки и работает с ошибками более гибко.

В этой статье мы разберём ПОИСКПОЗ от А до Я: от базового синтаксиса до продвинутых приёмов, которые экономят часы ручной работы. Вы узнаете, как функция отличается от НАЙТИ, когда её использовать для обработки больших массивов данных, и как избежать типичных ошибок. А ещё — реальные кейсы из практики: от парсинга email до анализа логов.

Если вы работаете с текстами в Excel — будь то списки клиентов, отчёты или веб-данные — эта функция станет вашим секретным оружием. Готовы? Тогда начнём с основ!

Что такое ПОИСКПОЗ и зачем она нужна

Функция ПОИСКПОЗ (SEARCH) возвращает позицию первого вхождения подстроки в текстовой строке, причём в отличие от НАЙТИ, она игнорирует регистр букв и поддерживает подстановочные знаки. Это делает её незаменимой для работы с "грязными" данными, где регистр может варьироваться (например, "Иванов" vs "иванов").

Базовый синтаксис:

=ПОИСКПОЗ(искомая_подстрока; текст_для_поиска; [нач_позиция])
  • 🔍 искомая_подстрока — что ищем (может включать * и ?)
  • 📄 текст_для_поиска — где ищем (ячейка или текст)
  • 📍 нач_позиция — с какой позиции начинать (по умолчанию 1)

Ключевое отличие от НАЙТИ:

ФункцияЧувствительность к региструПодстановочные знакиОбработка ошибок
ПОИСКПОЗНетДа (*, ?)Возвращает #ЗНАЧ! если не найдено
НАЙТИДаНетВозвращает #ЗНАЧ!
ПОИСК (англ. FIND)ДаНетАналог НАЙТИ

Пример: если в ячейке A1 текст "Привет, Мир!", то:

  • =ПОИСКПОЗ("мир"; A1) → вернёт 9 (независимо от регистра)
  • =НАЙТИ("мир"; A1) → вернёт ошибку (ищет точно "мир")
📊 Как часто вы используете текстовые функции в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

Подстановочные знаки: * и ? в действии

Главное преимущество ПОИСКПОЗ — поддержка подстановочных знаков:

  • 🌟 — любое количество символов (включая ноль). Пример: "@gmail.com" найдёт все email на Gmail.
  • ? — ровно один символ. Пример: "Иван?в" найдёт "Иванов", "Иванёв", но не "Ивановский".

Практические примеры:

=ПОИСКПОЗ(".xls"; A1)  // Ищет ссылки на Excel-файлы

=ПОИСКПОЗ("+7 (???) ???-??-??"; A1) // Ищет российские номера телефонов

Важно: чтобы найти сами символы * или ?, используйте тильду ~ перед ними:

=ПОИСКПОЗ("5~*7"; "1235*789")  // Вернёт 4 (ищет именно "5*7")

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

Даже опытные пользователи сталкиваются с ошибками при работе с ПОИСКПОЗ. Вот самые распространённые:

⚠️ Внимание: Если функция возвращает #ЗНАЧ!, это не всегда означает, что подстрока отсутствует. Возможно, вы забыли указать текст для поиска или использовали неверный синтаксис.
  • 🔴 Ошибка #ИМЯ? — опечатка в названии функции (правильно: ПОИСКПОЗ, не ПОИСК_ПОЗ).
  • 🔴 Ошибка #ЗНАЧ! — подстрока не найдена или аргументы неверного типа (например, поиск числа в тексте).
  • 🔴 Неожиданные результаты — забыли, что функция игнорирует регистр. Используйте НАЙТИ, если важен регистр.

Как отлаживать:

  1. Проверьте, что оба аргумента — текстовые значения (используйте ТЕКСТ для преобразования чисел).
  2. Убедитесь, что подстрока действительно содержится в тексте (пробелы и непечатаемые символы тоже важны!).
  3. Для поиска спецсимволов (* ? ~) экранируйте их тильдой.
Почему ПОИСКПОЗ иногда находит "лишние" вхождения?

Функция возвращает позицию ПЕРВОГО найденного вхождения. Если в тексте несколько совпадений, используйте комбинацию с ПСТР и ПОДСТАВИТЬ, чтобы обработать все случаи.

Продвинутые приёмы: комбинации с другими функциями

Реальная мощь ПОИСКПОЗ проявляется в сочетании с другими функциями. Вот несколько killer-комбо:

1. Извлечение текста между разделителями

Допустим, в ячейке A1 строка "Иванов_Иван_Иванович_1990", и нужно извлечь отчество:

=ПСТР(A1; ПОИСКПОЗ("_"; A1; ПОИСКПОЗ("_"; A1)+1)+1; ПОИСКПОЗ("_"; A1; ПОИСКПОЗ("_"; A1; ПОИСКПОЗ("_"; A1)+1)+1) - ПОИСКПОЗ("_"; A1; ПОИСКПОЗ("_"; A1)+1)-1)

Упрощённо: сначала находим второе подчёркивание, затем третье, и извлекаем текст между ними.

2. Проверка наличия одного из нескольких слов

Нужно проверить, содержит ли ячейка любое из слов "ургентно", "срочно", "ASAP"?

=ЕСЛИ(СУММПРОИЗВ(--НЕТ(ЕОШ(ПОИСКПОЗ({"ургентно";"срочно";"ASAP"};A1)))))>0; "Да"; "Нет")

3. Парсинг email-адресов

Извлечь домен из email в ячейке A1:

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

☑️ Подготовка данных перед использованием ПОИСКПОЗ

Выполнено: 0 / 4

ПОИСКПОЗ vs НАЙТИ vs ПОИСК: когда что использовать

В Excel есть три похожие функции для поиска подстрок. Как выбрать?

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

Алгоритм выбора:

  1. Нужны подстановочные знаки? → ПОИСКПОЗ.
  2. Важен регистр? → НАЙТИ.
  3. Работаете с английской версией Excel? → ПОИСК (=FIND).

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

=ПОИСКПОЗ("отч*т"; A1)

Реальные кейсы: где ПОИСКПОЗ экономит часы работы

Теория — это хорошо, но как функция применяется на практике? Вот 3 кейса из реальных задач:

Кейс 1: Очистка базы клиентов

Задача: В списке 10 000 email-адресов нужно отделить корпоративные (с доменом компании) от личных (@gmail.com, @yandex.ru и т.д.).

Решение:

=ЕСЛИ(ИЛИ(НЕТ(ЕОШ(ПОИСКПОЗ("@gmail.com";A1))); НЕТ(ЕОШ(ПОИСКПОЗ("@yandex.ru";A1)))); "Личный"; "Корпоративный")

Кейс 2: Анализ логов ошибок

Задача: В логах сервера (текстовый файл, импортированный в Excel) нужно найти все строки, содержащие ошибки с кодом 404 или 500.

Решение:

=ЕСЛИ(ИЛИ(НЕТ(ЕОШ(ПОИСКПОЗ("404";A1))); НЕТ(ЕОШ(ПОИСКПОЗ("500";A1)))); "Ошибка"; "")

Кейс 3: Разделение ФИО на компоненты

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

Решение:

  • 📌 Фамилия: =ЛЕВСИМВ(A1; ПОИСКПОЗ(" "; A1)-1)
  • 📌 Имя: =ПСТР(A1; ПОИСКПОЗ(" "; A1)+1; ПОИСКПОЗ(" "; A1; ПОИСКПОЗ(" "; A1)+1)-ПОИСКПОЗ(" "; A1)-1)
  • 📌 Отчество: =ПРАВСИМВ(A1; ДЛСТР(A1)-ПОИСКПОЗ(" "; A1; ПОИСКПОЗ(" "; A1)+1))

Эти приёмы сокращают время обработки данных в 10–100 раз по сравнению с ручным разделением!

Оптимизация производительности при работе с ПОИСКПОЗ

На больших массивах данных (10 000+ строк) ПОИСКПОЗ может тормозить. Вот как ускорить работу:

  • Избегайте вложенных ПОИСКПОЗ: каждая функция в формуле увеличивает время вычисления. Например, вместо =ПОИСКПОЗ("а"; ПОИСКПОЗ("б"; A1)) используйте вспомогательные столбцы.
  • Преобразуйте данные в таблицу Excel: формулы в таблицах пересчитываются оптимизированно.
  • Отключите автоматический пересчёт: перейдите в Формулы → Параметры вычислений → Вручную и запускайте пересчёт по F9 только когда нужно.
  • Используйте Power Query: для сложного парсинга текстовых данных инструмент Power Query работает быстрее формул.
⚠️ Внимание: Если вам нужно найти все вхождения подстроки (не только первое), комбинация ПОИСКПОЗ + ПОДСТАВИТЬ в массиве может зависнуть на больших данных. В таких случаях лучше использовать VBA или Power Query.

Пример оптимизированной формулы для поиска всех вхождений:

=ЕСЛИОШИБКА(МАЛСИМВ(ЕСЛИОШ(ПОИСКПОЗ("~"; ПОДСТАВИТЬ(A1; "а"; "~"; (СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1; "а"; ""))+1))-1))); ""); СТРОКА(ДВССЫЛ("1:99"))); "")

Эта формула массива найдёт позиции всех букв "а" в тексте. Для других символов замените "а" на нужный.

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

Можно ли использовать ПОИСКПОЗ для поиска по нескольким условиям одновременно?

Да! Для этого оберните функцию в СУММПРОИЗВ с массивом условий:

=СУММПРОИЗВ(--НЕТ(ЕОШ(ПОИСКПОЗ({"слово1";"слово2";"слово3"};A1))))

Эта формула вернёт количество найденных слов из списка.

Почему ПОИСКПОЗ не находит кириллические символы в некоторых файлах?

Проблема может быть в кодировке файла. Попробуйте:

  1. Сохраните файл в формате .csv с кодировкой UTF-8.
  2. Импортируйте данные заново через Данные → Из текста.
  3. Используйте функцию ПЕРЕКОДИРОВАТЬ (если доступна в вашей версии Excel).
Как найти позицию последнего вхождения подстроки?

Стандартная ПОИСКПОЗ находит только первое вхождение. Для последнего используйте:

=ДЛСТР(A1)-ПОИСКПОЗ("~"; ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; "искомый_текст"; "~"); "~"; ""; СЧЁТЕСЛИ(ПОДСТАВИТЬ(A1; "искомый_текст"; "~"); "~")-1))+1
Можно ли использовать ПОИСКПОЗ в Google Sheets?

Да, в Google Таблицах функция называется SEARCH (или ПОИСКПОЗ в русской версии) и работает идентично. Синтаксис:

=SEARCH("text"; A1)

Отличия от Excel:

  • В Google Sheets нет ограничения на длину строки (в Excel — 32 767 символов).
  • Функция автоматически обновляется при изменении данных (нет ручного пересчёта).
Как извлечь все email-адреса из текста с помощью ПОИСКПОЗ?

Для этого понадобится комбинация функций. Пример для извлечения первого email:

=ПСТР(A1; ПОИСКПОЗ("?@?.?"; A1 & " "); ПОИСКПОЗ(" "; ПСТР(A1; ПОИСКПОЗ("?@?.?"; A1 & " "); 99)))

Для извлечения всех email лучше использовать Power Query или VBA.