Как выбрать значение из текста в Excel: от простых функций до Power Query

Работа с текстовыми данными в Microsoft Excel часто превращается в головоломку, когда нужно вытащить из ячейки только часть информации. Вы когда-нибудь сталкивались с ситуацией, когда в одной колонке смешаны фамилии и имена, артикулы с описаниями, или номера телефонов с дополнительными символами? Извлечение нужных фрагментов вручную отнимает часы, а ошибки при копировании обходятся дорого.

К счастью, Excel предлагает более 15 инструментов для работы с текстовыми строками — от элементарных функций до сложных формул с регулярными выражениями. Но как выбрать оптимальный метод? Если вы новичок, начните с базовых ЛЕВСИМВ и ПРАВСИМВ. Для обработки больших массивов данных пригодятся Power Query или ТЕКСТПОСЛЕ/ТЕКСТДО (в новых версиях Excel). А когда структура текста хаотична — спасут регулярные выражения через VBA.

В этой статье мы разберём 7 проверенных способов извлечения текста — от простейших до профессиональных, с примерами для каждой ситуации. Вы узнаете, как автоматизировать рутинные задачи и сэкономить до 80% времени на обработке данных.

1. Базовые функции: ЛЕВСИМВ, ПРАВСИМВ и ПСТР

Начнём с азов. Три функции — ЛЕВСИМВ, ПРАВСИМВ и ПСТР — покрывают 60% задач по извлечению текста. Они работают во всех версиях Excel (включая Excel 2003) и не требуют дополнительных надстроек.

Функция ЛЕВСИМВ возвращает заданное количество символов с начала строки. Например, чтобы из ячейки A1 с текстом "Артикул: T-45678" получить только "Артикул", используйте:

=ЛЕВСИМВ(A1; 7)

ПРАВСИМВ действует зеркально — извлекает символы с конца. Это удобно для номеров телефонов или почтовых индексов. А ПСТР (она же MID в английской версии) вырезает фрагмент из середины строки, если указать стартовую позицию и длину. Синтаксис:

=ПСТР(текст; начальная_позиция; количество_символов)
  • 📌 Пример 1: Из "Счёт #INV-2026-05432" извлечь номер счета ("05432"). Формула: =ПРАВСИМВ(A1;5).
  • 📌 Пример 2: Получить домен из email "user@example.com": =ПСТР(A1;НАЙТИ("@";A1)+1;20).
  • 🔍 Подводный камень: Если в формуле ПСТР указать длину больше, чем осталось символов, Excel вернёт ошибку #ЗНАЧ!.
⚠️ Внимание: Функции ЛЕВСИМВ/ПРАВСИМВ не учитывают пробелы как разделители. Если нужно извлечь слово (а не фиксированное количество символов), используйте комбинацию с НАЙТИ или ПОИСК.
📊 Какой функцией вы чаще всего извлекаете текст в Excel?
ЛЕВСИМВ/ПРАВСИМВ
ПСТР
НАЙТИ/ПОИСК
Power Query
Регулярные выражения

2. Динамическое извлечение: НАЙТИ, ПОИСК и их комбинации

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

Ключевое отличие: НАЙТИ чувствительна к регистру ("А""а"), а ПОИСК — нет. Например, чтобы извлечь все символы после двоеточия в строке "Город: Москва", используйте:

=ПСТР(A1; НАЙТИ(":"; A1)+2; 100)

Для извлечения текста между двумя разделителями (например, скобками) комбинируйте функции:

=ПСТР(A1; НАЙТИ("("; A1)+1; НАЙТИ(")"; A1) - НАЙТИ("("; A1) - 1)
  • 🔄 Пример: Из "[ID: 456] Имя: Иван" получить "456":
    =ПСТР(A1; НАЙТИ(":"; A1)+2; НАЙТИ("]"; A1) - НАЙТИ(":"; A1) - 2)
  • Совет: Заменяйте 100 в формулах на большое число (например, 255), чтобы захватить весь текст до конца строки.
Задача Формула Пример входных данных Результат
Извлечь слово после запятой =ПСТР(A1;НАЙТИ(";"A1)+1;255) "Иванов; Петр; Москва" " Петр; Москва"
Получить домен из URL =ПСТР(A1;НАЙТИ("://";A1)+3;НАЙТИ("/";A1;НАЙТИ("://";A1)+3)-НАЙТИ("://";A1)-3) "https://example.com/page" "example.com"
Выделить номер телефона в скобках =ПСТР(A1;НАЙТИ("(";A1)+1;НАЙТИ(")";A1)-НАЙТИ("(";A1)-1) "Контакт: (495) 123-45-67" "495"

Убедитесь, что разделитель есть в каждой строке|Проверьте регистр символов (если используете НАЙТИ)|Замените пробелы на подчеркивания, если они мешают|Протестируйте формулу на 2-3 примерах-->

3. Новые функции Excel: ТЕКСТДО, ТЕКСТПОСЛЕ и ТЕКСТРАЗД

В Excel 365 и Excel 2021 появились революционные функции для работы с текстом: ТЕКСТДО, ТЕКСТПОСЛЕ и ТЕКСТРАЗД. Они упрощают извлечение фрагментов до/после разделителя или по шаблону.

Функция ТЕКСТПОСЛЕ возвращает текст после указанного символа (или подстроки). Например, чтобы получить фамилию из ячейки "Иванов Петр Сидорович":

=ТЕКСТПОСЛЕ(A1; " ")

ТЕКСТДО работает зеркально — извлекает текст до разделителя. А ТЕКСТРАЗД разбивает строку на массив по разделителю, что удобно для извлечения N-го элемента:

=ТЕКСТРАЗД(A1; " "; 2)

Эта формула вернёт второе слово из строки (в примере выше — "Петр").

  • 🎯 Преимущество: Функции автоматически обрабатывают ошибки (например, если разделитель отсутствует).
  • 🔧 Ограничение: Доступны только в новых версиях Excel. Для Excel 2019 и старше используйте Power Query.
⚠️ Внимание: Функция ТЕКСТРАЗД возвращает массив, который может "пролиться" на соседние ячейки. Чтобы избежать этого, оберните её в ИНДЕКС:
=ИНДЕКС(ТЕКСТРАЗД(A1; " "; {1;2;3}); 1; 2)
Как извлечь последнее слово в строке?

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

=ТЕКСТПОСЛЕ(A1; ПОВТОР(" "; СЧЁТЗНАК(A1)-СЧЁТЗНАК(ПОДСТАВИТЬ(A1; " "; ""))))

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

4. Регулярные выражения через VBA

Когда текстовые данные имеют сложную структуру (например, лог-файлы или HTML-код), стандартные функции Excel бессильны. Здесь на помощь приходят регулярные выражения (regex) через VBA.

Допустим, у вас в ячейках строки вида "Email: user1@example.com, user2@domain.ru", и нужно извлечь все email-адреса. Создайте пользовательскую функцию:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль (Insert → Module).
  3. Добавьте код:
    Function ExtractEmail(rng As Range) As String
    

    Dim regex As Object, matches As Object

    Set regex = CreateObject("VBScript.RegExp")

    regex.Pattern = "([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)"

    regex.Global = True

    Set matches = regex.Execute(rng.Value)

    If matches.Count > 0 Then

    ExtractEmail = matches(0)

    Else

    ExtractEmail = "Не найдено"

    End If

    End Function

  4. Теперь в Excel используйте =ExtractEmail(A1).

Регулярные выражения поддерживают шаблоны для:

  • 📧 Email: [\w.-]+@[\w.-]+\.\w+
  • 📞 Телефонов: (\+?\d[-\s]?)?\(?\d{3}\)?[-\s]?\d{3}[-\s]?\d{4}
  • 🔢 Числовых кодов: \b\d{5,10}\b (например, артикулы)
⚠️ Внимание: Регулярные выражения в VBA чувствительны к локали. Если ваш Excel использует русскую версию, замените CreateObject("VBScript.RegExp") на CreateObject("VBScript.RegExp.5.5") для стабильной работы.

5. Power Query: обработка больших массивов

Если вам нужно обработать тысячи строк с одинаковой структурой, Power Query (вкладка Данные → Получить данные) станет вашим лучшим другом. Этот инструмент позволяет:

  • 🔄 Разбивать столбцы по разделителям (запятая, точка с запятой, пробел).
  • 🔍 Извлекать текст по шаблонам (аналог ТЕКСТДО/ТЕКСТПОСЛЕ).
  • 📊 Объединять данные из нескольких источников.

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

  1. Выделите исходные данные и нажмите Данные → Из таблицы/диапазона.
  2. В редакторе Power Query выберите столбец с текстом → Преобразовать → Разделить столбец → По разделителю.
  3. Укажите разделитель (например, запятую) и настройте параметры разбивки.
  4. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

Power Query сохраняет все шаги преобразования, поэтому при обновлении исходных данных достаточно нажать "Обновить" — и формулы пересчитаются автоматически.

Сценарий Действие в Power Query Пример
Разбить ФИО на отдельные столбцы Разделить по пробелу "Иванов Петр Сидорович" → 3 столбца
Извлечь домен из email Разделить по "@" и взять вторую часть "user@example.com""example.com"
Удалить префиксы (например, "ID: ") Заменить текст или обрезать начало "ID: 12345""12345"

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

Для нестандартных задач часто требуется комбинировать функции. Рассмотрим несколько примеров:

Задача 1: Извлечь все числа из строки "Заказ 456 на сумму 1200 руб.".

=--ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" ";"");"а";"");"б";"");...)

Этот метод громоздкий. Лучше использовать VBA или Power Query.

Задача 2: Получить первые буквы каждого слова (аббревиатуру).

=СЦЕПИТЬ(ЛЕВСИМВ(ТЕКСТРАЗД(A1; " "; ПОСЛЕДНИЙНЕПУСТОЙ(СТРОКА(1:10))));1))

Для строки "Российская Федерация" результат — "РФ".

Задача 3: Извлечь текст между двумя одинаковыми символами (например, кавычками).

=ПСТР(A1; НАЙТИ(""""; A1)+1; НАЙТИ(""""; A1; НАЙТИ(""""; A1)+1) - НАЙТИ(""""; A1) - 1)
  • 🧩 Совет: Для работы с массивами используйте ИНДЕКС + ПОИСКПОЗ. Например, чтобы извлечь все уникальные слова из диапазона:
    =УНИК(ТЕКСТРАЗД(ТЕКСТСЦЕПИТЬ(" ";ИСТИНА;A1:A10); " "))
  • ⚠️ Осторожно: Формулы массивов (вводимые через Ctrl+Shift+Enter в старых версиях) могут значительно замедлить файл при большом объёме данных.

7. Ошибки и их решение

При извлечении текста в Excel часто возникают ошибки. Рассмотрим самые распространённые и способы их исправления:

Ошибка Причина Решение
#ЗНАЧ! Разделитель не найден (например, НАЙТИ вернула ошибку) Добавьте проверку ЕЧИСЛО(НАЙТИ(...)) или используйте ЕСЛИОШИБКА
#ИМЯ? Опечатка в названии функции Проверьте синтаксис (например, ЛЕВСИМВ, а не ЛЕВСИМВ)
Неправильный результат Неучтённые пробелы или регистр Используйте СЖПРОБЕЛЫ и ПОИСК вместо НАЙТИ
Медленная работа файла Слишком много формул массивов Замените на Power Query или VBA

Типичные ловушки:

  • 🕳️ Пробелы: Функция ДЛСТР считает пробелы как символы. Используйте СЖПРОБЕЛЫ, чтобы удалить лишние.
  • 🔤 Регистр: НАЙТИ("а"; "А") вернёт ошибку. Для нечувствительного поиска применяйте ПОИСК.
  • 📏 Длина строки: Максимальная длина текста в ячейке — 32 767 символов. При превышении используйте Power Query.
⚠️ Внимание: Если вы работаете с данными на кириллице, убедитесь, что в настройках Windows включена поддержка русского языка. В противном случае функции вроде НАЙТИ могут некорректно обрабатывать символы.

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

Как извлечь текст после последнего разделителя?

Используйте комбинацию ПРАВСИМВ и НАЙТИ с поиском последнего вхождения:

=ПРАВСИМВ(A1; ДЛСТР(A1) - НАЙТИ("|"; ПОДСТАВИТЬ(A1; "|"; "§" & ПОВТОР(" "; 100)); 100))

Для Excel 365 проще: =ТЕКСТПОСЛЕ(A1; "|"; -1) (аргумент -1 ищет последний разделитель).

Можно ли извлечь текст по цвету шрифта?

Стандартными функциями — нет. Используйте VBA:

Function GetTextByColor(rng As Range, color As Long) As String

Dim char As Object, result As String

For Each char In rng.Characters

If char.Font.Color = color Then result = result & char.Text

Next char

GetTextByColor = result

End Function

Вызов: =GetTextByColor(A1; RGB(255;0;0)) (для красного текста).

Как обработать текст с переносами строк?

Замените символ переноса (CHAR(10)) на разделитель с помощью ПОДСТАВИТЬ:

=ПОДСТАВИТЬ(A1; СИМВОЛ(10); "|")

Затем разбейте строку по "|" с помощью ТЕКСТРАЗД или Power Query.

Почему ТЕКСТДО возвращает ошибку в Excel 2016?

Эти функции появились только в Excel 365 и Excel 2021. Для старых версий используйте:

=ЛЕВСИМВ(A1; НАЙТИ(":"; A1)-1)

или обновите Excel до актуальной версии.

Как извлечь все вхождения подстроки?

Создайте пользовательскую функцию в VBA:

Function ExtractAll(rng As Range, substr As String) As String

Dim regex As Object, matches As Object, result As String, i As Integer

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = substr

regex.Global = True

Set matches = regex.Execute(rng.Value)

For i = 0 To matches.Count - 1

result = result & matches(i) & vbCrLf

Next i

ExtractAll = Left(result, Len(result) - 2)

End Function

Вызов: =ExtractAll(A1; "\d{5}") (извлечёт все 5-значные числа).