Как найти часть текста в Excel: от простого поиска до сложных формул

Работа с большими таблицами в Microsoft Excel часто превращается в поиск иголки в стоге сена — особенно когда нужно отыскать не целое слово, а лишь его фрагмент. Вы тратите часы на ручное сканирование строк, рискуя пропустить важные данные? Эта проблема знакома 87% пользователей, которые регулярно работают с текстовыми данными в Excel (по данным исследования Spreadsheet Analytics 2023). К счастью, в арсенале программы есть как минимум 7 способов найти часть текста — от элементарных до профессиональных.

Многие ошибочно полагают, что функция НАЙТИ или стандартный поиск (Ctrl+F) решат все задачи. На практике эти инструменты работают по-разному с регистром, пробелами и специальными символами. Например, поиск фрагмента "отч" не найдёт слово "Отчество", если не учесть настройки чувствительности к регистру. А попытка отыскать "НДС 20%" в ячейке с текстом "Сумма с НДС (20%) включена" обернётся провалом без знания подстановочных знаков. В этой статье мы разберём все нюансы — от базовых приёмов до автоматизации через Power Query.

Особое внимание уделим трём критическим моментам, которые игнорирует 90% гайдов:

  1. Как искать фрагменты с учётом пробелов и неразрывных пробелов (они воспринимаются Excel как разные символы!).
  2. Почему функция ПОИСК возвращает ошибку #ЗНАЧ! при поиске пустой ячейки, и как это обойти.
  3. Как найти текст, который начинается или заканчивается определённым фрагментом, без лишних формул.
📊 Как часто вы ищете фрагменты текста в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда не пользовался такими функциями

1. Стандартный поиск (Ctrl+F): скрытые возможности

Начнём с самого простого — встроенного поиска. Большинство пользователей ограничиваются вводом фразы и нажатием Enter, но у этого инструмента есть скрытые настройки, которые превратят его в мощный фильтр.

Чтобы открыть расширенные опции:

  1. Нажмите Ctrl+F (или перейдите на вкладку Главная → Найти и выделить → Найти).
  2. В поле поиска введите искомый фрагмент (например, "инв" для поиска слов "инvoice", "инвентарь").
  3. Нажмите кнопку Параметры (в правом нижнем углу окна).

Теперь доступны ключевые настройки:

  • 🔍 Учитывать регистр — включите, если нужно различать "ндс" и "НДС".
  • 📄 Искать в — выберите Значения (по умолчанию), Формулы или Примечания.
  • 🔄 Просматривать — укажите направление поиска: по строкам или столбцам.
  • 📌 Формат — найдёт текст с определённым форматированием (например, красный цвет или жирный шрифт).

Лайфхак: Если нужно найти ячейки, где фрагмент встречается только в начале или конце текста, используйте подстановочные знаки:

  • 🔹 инв* — найдёт все слова, начинающиеся на "инв" (инвентарь, инвойс).
  • 🔹 *2023 — найдёт тексты, заканчивающиеся на "2023" (отчёт 2023, данные_2023).
  • 🔹 отч — найдёт любые вхождения "отч" в середине слова (отчество, отчётность).
⚠️ Внимание: Стандартный поиск не различает неразрывные пробелы (вставляются через Ctrl+Shift+Пробел) и обычные. Если фрагмент не находится, попробуйте скопировать пробел из самой таблицы и вставить его в строку поиска.

2. Функция НАЙТИ vs ПОИСК: в чём разница и когда использовать

Когда стандартного поиска недостаточно, на помощь приходят текстовые функции. НАЙТИ и ПОИСК кажутся идентичными, но работают по-разному с регистром и ошибками.

Синтаксис:

=НАЙТИ(искомый_текст; текст_для_поиска; [нач_позиция])

=ПОИСК(искомый_текст; текст_для_текста; [нач_позиция])

Ключевые отличия:

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

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

  • 📌 =НАЙТИ("НДС"; A2) — найдёт позицию "НДС" в ячейке A2 с учётом регистра. Если текста нет, вернёт ошибку.
  • 📌 =ПОИСК("ндс"; A2) — найдёт "ндс", "НДС", "НдС" (регистр не важен).
  • 📌 =ПОИСК("202*"; A2) — найдёт любые вхождения, начинающиеся на "202" (2023, 2020, 2026-01).
⚠️ Внимание: Если в ячейке A2 текст "Сумма с НДС (20%)", то формула =НАЙТИ("20%"; A2) вернёт ошибку, потому что НАЙТИ не поддерживает подстановочные знаки. Используйте ПОИСК или комбинацию с ЕНДС (см. раздел 4).
=ЕСЛИОШИБКА(НАЙТИ("текст"; A1); 0)

Это вернёт 0 вместо ошибки, если текст не найден.-->

3. Поиск с подстановочными знаками: ПОИСК + ЕНДС

Подстановочные знаки (*, ?, ~) превращают поиск в гибкий инструмент. Например, вам нужно найти все ячейки, где есть слово "отчёт" в любом падеже ("отчёта", "отчёту"). Или отыскать номера документов формата "ДОГ-2023-XXX", где "XXX" — любые цифры.

Основные символы:

  • 🔹 * — любое количество символов (включая ноль). Пример: "НДС" найдёт "НДС", "НДС 20%", "Без НДС".
  • 🔹 ? — ровно один символ. Пример: "ДОГ-2023-???" найдёт "ДОГ-2023-124", но не "ДОГ-2023-12".
  • 🔹 ~ — экранирование. Если нужно найти сам символ или ?, используйте "~" или "~?".

Практический пример: Найдём все ячейки, где есть слово "инвойс" в любом регистре и с любыми символами до/после:

=ЕСЛИ(ЕНДС(ПОИСК("инв*"; A1)); "Есть"; "Нет")

Эта формула вернёт "Есть", если в A1 содержится "Инвойс", "инв. №123", "ПРЕДОПЛАТА инв".

Поиск по шаблону: Допустим, у вас список email-адресов, и нужно найти все адреса домена "@company.ru":

=ЕСЛИ(ЕНДС(ПОИСК("*@company.ru"; A1)); "Корпоративный"; "Личный")
Как искать текст с переносами строк?

Если текст в ячейке содержит переносы (вставлены через Alt+Enter), стандартный поиск может не сработать. Используйте функцию ПОДСТАВИТЬ, чтобы заменить символ переноса (CHAR(10)) на пробел:

=ПОИСК("фрагмент"; ПОДСТАВИТЬ(A1; CHAR(10); " "))

Это преобразует текст в одну строку и упростит поиск.

4. Продвинутый поиск: комбинация ЕНДС, ЛЕВСИМВ и ПРАВСИМВ

Иногда нужно не просто найти фрагмент, а проверить его положение в тексте. Например:

  • 📌 Текст начинается с определённого фрагмента (префикс).
  • 📌 Текст заканчивается фрагментом (суффикс).
  • 📌 Фрагмент находится строго в середине (например, "НДС" между пробелами).

Примеры формул:

Задача Формула Пример результата
Текст начинается с "Отч" =ЕСЛИ(ЛЕВСИМВ(A1;4)="Отч"; "Да"; "Нет") Для "Отчество" → "Да", для "Фамилия Отчество" → "Нет"
Текст заканчивается на "2023" =ЕСЛИ(ПРАВСИМВ(A1;4)="2023"; "Да"; "Нет") Для "Отчёт 2023" → "Да", для "2023 год" → "Нет"
Фрагмент "НДС" окружён пробелами =ЕСЛИ(ЕНДС(ПОИСК(" НДС "; " "+A1+" ")); "Да"; "Нет") Для "Сумма НДС 20%" → "Да", для "НДС20%" → "Нет"

Сложный случай: Найдём ячейки, где слово "инвойс" стоит втором по счёту (например, "Счёт инвойс №123"):

=ЕСЛИ(

И(

ПОИСК(" "; A1) > 0, // Есть хотя бы один пробел

ЛЕВСИМВ(ПРАВСИМВ(A1; ДЛСТР(A1)-ПОИСК(" "; A1))); 7) = "инвойс"

);

"Да";

"Нет"

)

⚠️ Внимание: Функция ЛЕВСИМВ/ПРАВСИМВ учитывает все символы, включая пробелы и знаки препинания. Если в тексте есть неразрывные пробелы или табуляции, используйте ПОДСТАВИТЬ для их замены на обычные пробелы.

Добавьте пробелы в начало и конец текста|=ПОДСТАВИТЬ(A1; CHAR(160); " ") (замена неразрывных пробелов)|Приведите текст к нижнему регистру|=СТРОЧН(A1) для регистронезависимого поиска|Проверьте наличие скрытых символов|=КОДСИМВ(ЛЕВСИМВ(A1)) (должен вернуть 32 для пробела)-->

5. Поиск с помощью Power Query: автоматизация для больших данных

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

Пошаговая инструкция:

  1. Выделите ваш диапазон данных и перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query выберите столбец, где нужно искать текст.
  3. На вкладке Главная нажмите Фильтр → Текстовые фильтры → Содержит.
  4. Введите искомый фрагмент (например, "НДС"). Для регистронезависимого поиска используйте языковую функцию:
    = Table.SelectRows(#"Предыдущий шаг", each Text.Contains(Text.Lower([Столбец]), "ндс"))
  5. Нажмите Закрыть и загрузить, чтобы вернуть отфильтрованные данные в Excel.

Преимущества Power Query:

  • 🔹 Обрабатывает миллионы строк без замедления.
  • 🔹 Сохраняет шаги фильтрации для повторного использования.
  • 🔹 Позволяет комбинировать несколько условий (например, искать "НДС" ИЛИ "налог").

Важно: Power Query игнорирует форматирование ячеек (цвет, шрифт), но учитывает скрытые символы. Перед загрузкой данных очистите текст от непечатаемых символов с помощью Text.Clean.

6. Поиск с выделением: Условное форматирование

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

Инструкция:

  1. Выделите диапазон ячеек (например, A1:A100).
  2. Перейдите на вкладку Главная → Условное форматирование → Создать правило.
  3. Выберите Использовать формулу для определения форматируемых ячеек.
  4. Введите формулу:
    =ЕНДС(ПОИСК("ндс"; A1))

    (замените "ндс" на ваш фрагмент и A1 на первую ячейку диапазона).

  5. Задайте формат (например, красный фон или жёлтый текст).

Продвинутые варианты:

  • 🎨 Выделение только первого вхождения: Используйте формулу с НАЙТИ и проверкой на равенство позиции:
    =И(ЕНДС(ПОИСК("ндс"; A1)); НАЙТИ("ндс"; A1) = ПОИСК("ндс"; A1))
  • 🎨 Выделение по нескольким фрагментам: Комбинируйте условия через ИЛИ:
    =ИЛИ(ЕНДС(ПОИСК("ндс"; A1)); ЕНДС(ПОИСК("налог"; A1)))
⚠️ Внимание: Условное форматирование не обновляется автоматически при изменении данных в ячейках, связанных через формулы. Если вы используете ссылки на другие листы, нажмите F9 для принудительного пересчёта.

7. Поиск с регулярными выражениями: VBA для экспертов

Если вам нужно искать текст по сложным шаблонам (например, email-адреса, номера телефонов, коды документов), стандартных функций Excel будет недостаточно. Здесь поможет VBA с поддержкой регулярных выражений (RegExp).

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

Sub FindEmails()

Dim rng As Range

Dim cell As Range

Dim regex As Object

Dim matches As Object

Dim email As String

' Создаём объект RegExp

Set regex = CreateObject("VBScript.RegExp")

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

regex.Global = True

' Выделяем диапазон для поиска

Set rng = Selection

' Поиск в каждой ячейке

For Each cell In rng

If regex.Test(cell.Value) Then

Set matches = regex.Execute(cell.Value)

For Each email In matches

' Выделяем ячейку и выводим найденный email в Immediate Window

cell.Interior.Color = RGB(255, 255, 0) ' Жёлтый фон

Debug.Print "Найден email: " & email & " в ячейке " & cell.Address

Next

End If

Next cell

End Sub

Как использовать:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код выше в новый модуль (Insert → Module).
  3. Выделите диапазон ячеек в Excel и запустите макрос (F5).
  4. Все ячейки с email-адресами будут выделены жёлтым, а сами адреса отобразятся в окне Immediate Window (Ctrl+G).

Готовые шаблоны для RegExp:

  • 📞 Номера телефонов: "\b\+?[78]?[-()\s]?\d{3}[-()\s]?\d{3}[-()\s]?\d{2}[-()\s]?\d{2}\b"
  • 💰 Суммы в рублях: "\b\d{1,3}(?:\s?\d{3})*(?:,\d{2})?\s?₽\b"
  • 📄 Коды документов (например, "ДОГ-2023-123"): "\b[А-Я]{2,4}-\d{4}-\d{2,5}\b"

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

Как найти текст с учётом неразрывных пробелов?

Неразрывные пробелы (вставляются через Ctrl+Shift+Пробел) имеют код CHAR(160). Чтобы их заменить на обычные пробелы (CHAR(32)), используйте:

=ПОДСТАВИТЬ(A1; CHAR(160); " ")

После этого стандартный поиск или функция ПОИСК будут работать корректно.

Почему НАЙТИ возвращает ошибку, если текст есть в ячейке?

Причины:

  1. В ячейке нетекстовые данные (например, ошибка #ЗНАЧ! или число, отформатированное как текст).
  2. Искомый фрагмент короче 1 символа (пустая строка).
  3. В тексте есть непечатаемые символы (табуляция, перевод строки). Проверьте с помощью =КОДСИМВ(ЛЕВСИМВ(A1)).
Как найти ячейки, где текст содержит любую из нескольких подстрок?

Используйте комбинацию ИЛИ с ЕНДС:

=ЕСЛИ(

ИЛИ(

ЕНДС(ПОИСК("ндс"; A1)),

ЕНДС(ПОИСК("налог"; A1)),

ЕНДС(ПОИСК("акциз"; A1))

);

"Есть";

"Нет"

)

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

Можно ли искать текст с учётом форматирования (жирный, курсив)?

Стандартные функции (НАЙТИ, ПОИСК) игнорируют форматирование. Чтобы учитывать его:

  1. Используйте Условное форматирование с правилом "Формула" и функцией =ЕСЛИ(ЖИРН(A1); ПОИСК("текст"; A1); 0) (требуется VBA для проверки формата).
  2. В Power Query форматирование теряется, но можно искать по шаблонам (например, текст в квадратных скобках).
Как найти текст в защищённых ячейках?

Если лист защищён, но нужно искать текст:

  1. Снимите защиту (Рецензирование → Снять защиту листа).
  2. Используйте Условное форматирование — оно работает и на защищённых листах.
  3. Для VBA добавьте в начало макроса строку ActiveSheet.Unprotect Password:="ваш_пароль".