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

Работа с текстовыми данными в Microsoft Excel часто требует извлечения фрагментов из строк — будь то первые символы артикула, фамилия из ФИО или домен из email. Без умения создавать подстроки вам придётся вручную редактировать тысячи ячеек, теряя часы на рутину. К счастью, в Excel есть как минимум 5 способов автоматизировать этот процесс: от базовых функций ЛЕВСИМВ и ПРАВСИМВ до гибких формул массива и инструмента Power Query.

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

Сразу отметим: в Excel 365 и Excel 2021 появилась функция ДИАПТЕКСТ, которая упрощает извлечение подстрок по разделителям — но она работает только в новых версиях и не поддерживается в Excel 2019 и старше. Если вы используете устаревшую версию, пригодятся альтернативные методы из этой статьи.

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

Начнём с трёх «китов», на которых держится 90% задач по извлечению подстрок. Эти функции входят в стандартный набор Excel и работают во всех версиях, включая Excel 2007.

ЛЕВСИМВ (LEFT) возвращает заданное количество символов с начала строки. Синтаксис прост:

=ЛЕВСИМВ(текст; [количество_символов])

Если второй аргумент опустить, функция вернёт только первый символ. Пример:

=ЛЕВСИМВ(A2; 5)

— извлечёт первые 5 символов из ячейки A2.

ПРАВСИМВ (RIGHT) действует зеркально — берёт символы с конца строки. Полезна для извлечения расширений файлов или последних цифр артикула:

=ПРАВСИМВ("отчёт_2026.xlsx"; 5)  // вернёт ".xlsx"

ПСТР (MID) — самая гибкая из трёх. Она позволяет указать стартовую позицию и длину подстроки:

=ПСТР(текст; начальная_позиция; количество_символов)

Ключевой нюанс: начальная_позиция считается с 1, а не с 0, как в большинстве языков программирования. Например, чтобы извлечь "Excel" из строки "Microsoft Excel 2023", используем:

=ПСТР(A2; 10; 5)
  • 📌 ЛЕВСИМВ — для фиксированного количества символов слева (коды товаров, префиксы).
  • 📍 ПРАВСИМВ — когда нужны символы справа (домены, суффиксы).
  • ПСТР — если подстрока находится в середине и её позиция известна.
⚠️ Внимание: Если в функции ПСТР указать начальную_позицию больше длины строки, Excel вернёт ошибку #ЗНАЧ!. Всегда проверяйте длину исходного текста функцией ДЛСТР.
📊 Какую функцию вы используете чаще для работы с подстроками?
ЛЕВСИМВ
ПРАВСИМВ
ПСТР
Комбинацию функций
Не знаю таких функций

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

Часто подстрока не имеет фиксированной позиции. Например, нужно извлечь фамилию из ячейки с ФИО ("Иванов Петр Сидорович") или домен из email ("user@example.com"). Здесь пригодятся функции ПОИСК (CASE-INSENSITIVE) и НАЙТИ (CASE-SENSITIVE), которые определяют позицию символа или подстроки.

Разберём классическую задачу: извлечь домен из email в ячейке A2 ("client@gmail.com"). Алгоритм:

  1. Найти позицию символа @ с помощью ПОИСК("@"; A2).
  2. К позиции @ прибавить 1, чтобы начать с первого символа домена.
  3. Из общей длины строки (ДЛСТР(A2)) вычесть позицию @, чтобы получить длину домена.
  4. Применить ПРАВСИМВ с рассчитанной длиной.

Итоговая формула:

=ПРАВСИМВ(A2; ДЛСТР(A2) - ПОИСК("@"; A2))

Для извлечения имени из ФИО ("Иванов Петр Сидорович") используем ЛЕВСИМВ + ПОИСК:

=ЛЕВСИМВ(A2; ПОИСК(" "; A2) - 1)

Здесь ПОИСК(" "; A2) находит первый пробел, а -1 исключает его из результата.

  • 🔍 ПОИСК игнорирует регистр ("A" = "a"), НАЙТИ — нет.
  • 📏 Всегда проверяйте, что искомый символ существует в строке, иначе формула вернёт #ЗНАЧ!.
  • 🔄 Для многоуровневых разделителей (например, "Иванов, Петр Сидорович") комбинируйте несколько ПОИСК.

Искомый символ точно есть в строке?|Учтён регистр (если важен)?|Позиция не выходит за длину строки?|Есть резервный вариант на случай ошибки?-->

3. Извлечение подстрок по разделителям (текст к столбцам и не только)

Когда данные имеют чёткую структуру с разделителями (запятая, точка с запятой, табуляция), проще всего воспользоваться инструментом "Текст по столбцам". Он доступен на вкладке Данные → Текст по столбцам и позволяет разбить содержимое ячейки по заданному символу.

Пример: в ячейке A2 хранится строка "Москва;Ленинградский проспект;125", и нужно разделить её на отдельные столбцы. Алгоритм:

  1. Выделите диапазон с данными.
  2. Перейдите в Данные → Текст по столбцам.
  3. Выберите С разделителями → Далее.
  4. Укажите символ-разделитель (в нашем случае ;).
  5. Нажмите Готово.

Минус метода: результат статичен. Если исходные данные изменятся, придётся повторять процедуру. Для динамического обновления лучше использовать формулы.

Альтернатива — функция РАЗДЕЛИТЬ (TEXTSPLIT) в Excel 365 и Excel 2021:

=РАЗДЕЛИТЬ(A2; ";")

Она автоматически разбивает строку по разделителю и возвращает массив значений, который можно "пролить" в соседние ячейки.

⚠️ Внимание: Если в строке несколько одинаковых разделителей подряд (например, "Москва;;Ленинградский"), функция РАЗДЕЛИТЬ создаст пустые ячейки. Чтобы их убрать, добавьте третий аргумент: =РАЗДЕЛИТЬ(A2; ";"; ;ИСТИНА).
Метод Преимущества Недостатки Подходит для версий
Текст по столбцам Быстро, визуально, не требует формул Статичный результат, не обновляется автоматически Все версии
РАЗДЕЛИТЬ Динамический, работает с массивами Только Excel 365/2021, может создавать пустые ячейки Excel 365, 2021
Формулы с ПОИСК Работает везде, гибко настраивается Сложно для новичков, требует проверок на ошибки Все версии

4. Продвинутые техники: формулы массива и регулярные выражения

Для сложных задач — например, извлечения всех email из текста или чисел, окружённых буквами — базовых функций недостаточно. Здесь помогут формулы массива (в старых версиях) или динамические массивы (в Excel 365).

Рассмотрим задачу: извлечь все числа из строки "Заказ 12345 на сумму 999,99 руб.". В Excel 365 используем комбинацию ПОДСТАВИТЬ, ПСТР и ПОВТОР с функцией ТЕКСТПОСЛЕ:

=--ТЕКСТДО(ПОДСТАВИТЬ(A2; {"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"}; ""); "")

Но этот метод удаляет все нецифровые символы, что не всегда удобно.

Более точный способ — использовать регулярные выражения через VBA или Power Query. Например, в Power Query можно применить функцию Text.Select с шаблоном [0-9] для извлечения только цифр.

Для извлечения всех вхождений подстроки (например, всех хэштегов из текста) в Excel 365 подойдёт комбинация:

=ТЕКСТРАЗД(A2; " "; ИСТИНА; "#")

— она вернёт массив слов, начинающихся с #.

Пример VBA-кода для регулярных выражений

Sub ExtractNumbers()

Dim regex As Object, cell As Range

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\d+"

For Each cell In Selection

If regex.Test(cell.Value) Then

cell.Offset(0, 1).Value = regex.Execute(cell.Value)(0)

End If

Next

End Sub

Этот код извлечёт первое число из выделенных ячеек и запишет результат в соседние справа.

⚠️ Внимание: Формулы массива в старых версиях Excel (до 2019) требуют подтверждения клавишами Ctrl+Shift+Enter. В Excel 365 они работают автоматически, но могут значительно тормозить файл при обработке больших диапазонов (10 000+ строк).

5. Power Query: обработка больших данных без тормозов

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

  • 🔄 Извлекать подстроки по шаблонам без формул.
  • 📊 Обрабатывать миллионы строк без замедления.
  • 🔄 Автоматически обновлять данные при изменении источника.

Разберём пример: у нас есть столбец с адресами email, и нужно извлечь домены (@gmail.com, @yandex.ru и т.д.). Алгоритм в Power Query:

  1. Выделите исходные данные и нажмите Данные → Из таблицы/диапазона (или Данные → Получить данные → Из таблицы/диапазона).
  2. В открывшемся редакторе Power Query выберите столбец с email.
  3. Перейдите на вкладку Добавить столбец → Извлечь → Текст после разделителя.
  4. Введите разделитель @ и нажмите OK.
  5. Сохраните запрос и загрузите данные обратно в Excel.

Преимущество метода: даже если в исходных данных появятся новые строки, достаточно обновить запрос (Данные → Обновить все), и домены извлекутся автоматически.

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

= Table.AddColumn(#"Previous Step", "Numbers", each Text.Select([Column1], {"0".."9"}))
= Table.AddColumn(#"Previous Step", "TextInBrackets", each Text.BetweenDelimiters([Column1], "(", ")"))-->

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

Даже опытные пользователи Excel допускают ошибки при работе с подстроками. Вот самые распространённые ловушки и способы их обхода:

  • 🚫 #ЗНАЧ! при ПСТР: Указана начальная позиция больше длины строки. Всегда проверяйте длину с помощью ДЛСТР или оборачивайте формулу в ЕСЛИОШИБКА:
    =ЕСЛИОШИБКА(ПСТР(A2; 10; 5); "")
  • 🚫 Неучтённые пробелы: Функция ПОИСК(" ") может найти неразрывный пробел (char 160). Используйте ПОДСТАВИТЬ(A2; СИМВОЛ(160); " ") для унификации.
  • 🚫 Регистрозависимость: НАЙТИ различает "A" и "a", а ПОИСК — нет. Если важен регистр, используйте НАЙТИ или ПОДСТАВИТЬ для приведения к одному регистру.
  • 🚫 Пустые ячейки: Если в исходной ячейке пусто, формулы вроде ЛЕВСИМВ вернут ошибку. Оборачивайте в ЕСЛИ:
    =ЕСЛИ(A2=""; ""; ЛЕВСИМВ(A2; 3))

Ещё одна частая проблема — некорректная обработка многобайтовых символов (кириллица, иероглифы). Функции ЛЕВСИМВ/ПРАВСИМВ считают байты, а не символы. Например, в строке "Привет" (5 символов) ЛЕВСИМВ(A2; 2) может вернуть не "Пр", а обрезанный символ, если кодировка не UTF-8. Чтобы избежать этого, используйте Power Query или VBA.

7. Автоматизация: макросы и пользовательские функции

Если вам регулярно приходится извлекать подстроки по сложным правилам, имеет смысл создать пользовательскую функцию (UDF) на VBA. Например, функция для извлечения всех чисел из строки:

Function ExtractNumbers(rng As Range) As String

Dim regex As Object, matches As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\d+"

Set matches = regex.Execute(rng.Value)

Dim result As String, match As Object

For Each match In matches

result = result & match.Value & " "

Next

ExtractNumbers = Trim(result)

End Function

После добавления этого кода в редактор VBA (Alt+F11) функцию можно использовать в Excel как обычную:

=ExtractNumbers(A2)

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

Function ExtractByPattern(rng As Range, pattern As String) As String

Dim regex As Object, matches As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = pattern

Set matches = regex.Execute(rng.Value)

Dim result As String, match As Object

For Each match In matches

result = result & match.Value & vbCrLf

Next

ExtractByPattern = Trim(result)

End Function

Вызов:

=ExtractByPattern(A2; "\b\w{5}\b")

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

  • ⚡ Гибкость: можно реализовать любую логику, включая регулярные выражения.
  • 🔄 Скорость: макросы работают быстрее формул на больших данных.
  • 📦 Переносимость: код можно сохранить в надстройке и использовать в разных файлах.
⚠️ Внимание: Пользовательские функции VBA не обновляются автоматически при изменении данных (в отличие от стандартных формул). Чтобы пересчитать результат, нажмите F9 или используйте Application.Volatile в коде функции.

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

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

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

=ПСТР(A2; ПОИСК("("; A2) + 1; ПОИСК(")"; A2) - ПОИСК("("; A2) - 1)

Если скобок несколько, используйте Power Query или VBA.

Почему ЛЕВСИМВ обрезает кириллические символы?

Функции ЛЕВСИМВ/ПРАВСИМВ считают байты, а не символы. В кодировке Windows-1251 кириллические буквы занимают 1 байт, а в UTF-8 — 2 байта. Чтобы избежать обрезки:

  • Сохраните файл в формате .xlsx (UTF-8).
  • Используйте Power Query или VBA для работы с Unicode.
Как извлечь последнее слово в строке?

Если слова разделены пробелами, используйте:

=ПРАВСИМВ(A2; ДЛСТР(A2) - ПОИСК("~"; ПОДСТАВИТЬ(A2; " "; "~"; СЧЁТЗ(A2:A2) - 1)))

Здесь мы заменяем последний пробел на символ ~, находим его позицию и извлекаем подстроку справа.

Можно ли извлечь подстроку без формул?

Да, есть три способа:

  1. Текст по столбцам (раздел 3 статьи).
  2. Фlash Fill (в Excel 2013+): введите пример результата в соседнюю ячейку и нажмите Ctrl+E.
  3. Power Query (раздел 5 статьи) — для автоматического обновления.
Как ускорить работу формул с подстроками на больших данных?

Если файл тормозит:

  • Замените формулы на Power Query или VBA.
  • Отключите автоматический пересчёт (Формулы → Параметры вычислений → Вручную).
  • Используйте helper-столбцы для промежуточных вычислений (например, сначала найдите позицию символа, затем извлеките подстроку).