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

Microsoft Excel — мощный инструмент для работы с данными, но многие пользователи сталкиваются с трудностями при попытке извлечь часть текста из ячейки. В отличие от чисел, текстовые данные требуют специальных функций: нельзя просто "отнять" один фрагмент из другого. В этой статье разберём 5 проверенных способов вычесть текст в Excel — от базовых функций до продвинутых комбинаций с регулярными выражениями (через Power Query).

Вы научитесь:

  • 🔹 Использовать ЛЕВСИМВ, ПРАВСИМВ и ПСТР для извлечения подстрок по позициям
  • 🔹 Применять ПОИСК и НАЙТИ, чтобы динамически определять границы текста
  • 🔹 Разбивать текст по разделителям с помощью ТЕКСТ.ПОСЛЕ и ТЕКСТ.ДО (Excel 365)
  • 🔹 Автоматизировать процесс через Power Query для больших массивов данных

Все примеры сопровождаются скриншотами и готовыми формулами — их можно скопировать и адаптировать под свои задачи. Если вы работаете с Google Таблицами, 90% методов из этой статьи будут работать и там (с учётом синтаксиса).

📊 Какой версии Excel вы пользуетесь?
Excel 2019 или старше
Excel 365 (подписка)
Google Таблицы
Другая версия

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

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

  • 📌 =ЛЕВСИМВ(текст; количество_символов) — возвращает заданное число символов с начала строки.
  • 📌 =ПРАВСИМВ(текст; количество_символов) — аналогично, но с конца строки.
  • 📌 =ПСТР(текст; начальная_позиция; количество_символов) — извлекает фрагмент с любой позиции.

Пример: из ячейки A1 с текстом "Артикул: T-456-XL" нужно извлечь сам артикул ("T-456-XL"). Поскольку "Артикул: " занимает 9 символов, используем:

=ПРАВСИМВ(A1; ДЛСТР(A1)-9)
ФункцияПримерРезультат для "Привет, мир!"
ЛЕВСИМВ(A1; 6)Извлечь первые 6 символов"Привет"
ПРАВСИМВ(A1; 5)Извлечь последние 5 символов"мир!"
ПСТР(A1; 8; 3)Извлечь 3 символа с 8-й позиции"мир"

Ограничение: эти функции требуют знания точного положения символов. Если текст меняется (например, длина префикса "Артикул: " непостоянна), придётся комбинировать их с ПОИСК или НАЙТИ.

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

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

Синтаксис:

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

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

Пример: из строки "Заказ #12345 от 01.05.2026" извлечём номер заказа (12345). Номер начинается после "#" и состоит из 5 цифр:

=ПСТР(A1; ПОИСК("#"; A1)+1; 5)

Если длина номера заказа переменная, замените 5 на формулу, которая найдёт следующий пробел:

=ПСТР(A1; ПОИСК("#"; A1)+1; ПОИСК(" "; A1; ПОИСК("#"; A1)+1) - ПОИСК("#"; A1) - 1)
⚠️ Внимание: Если искомая подстрока не найдена, ПОИСК и НАЙТИ вернут ошибку #ЗНАЧ!. Чтобы избежать сбоя формулы, оберните её в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(ПОИСК("#"; A1); 0)

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

В Excel 365 и Excel 2021 появились удобные функции для работы с текстом:

  • 🔥 =ТЕКСТ.ДО(текст; разделитель; [номер_вхождения]; [игнорировать_регистр]) — извлекает всё до указанного разделителя.
  • 🔥 =ТЕКСТ.ПОСЛЕ(текст; разделитель; [номер_вхождения]; [игнорировать_регистр]) — извлекает всё после разделителя.

Пример: разберём строку "Иванов_Иван_Иванович_1990" на компоненты. Чтобы извлечь фамилию:

=ТЕКСТ.ДО(A1; "_")

Для имени (второе вхождение "_"):

=ТЕКСТ.ПОСЛЕ(ТЕКСТ.ДО(A1; "_"; 2); "_")

Преимущества этих функций:

  • ✅ Не нужно считать позиции символов.
  • ✅ Поддерживают несколько вхождений разделителя.
  • ✅ Учитывают регистр (опционально).
⚠️ Внимание: В Google Таблицах аналогичные функции называются ТЕКСТДО и ТЕКСТПОСЛЕ, но работают идентично.

Убедитесь, что разделитель есть в каждой строке|Проверьте версию Excel (требуется 365 или 2021)|Учтите регистр, если это важно для ваших данных|Протестируйте формулу на 2-3 примерах-->

4. Извлечение текста по шаблону (регулярные выражения)

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

Алгоритм действий:

  1. Выделите диапазон с данными → Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся редакторе Power Query выберите столбец → Преобразовать → Извлечь → Текст по шаблону.
  3. Введите регулярное выражение. Например, для email:
    [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}
  4. Нажмите ОКЗакрыть и загрузить.

Пример: из столбца с текстом "Контакт: ivanov@mail.ru, тел. +7(999)123-45-67" извлечём email и телефон отдельно.

Тип данныхРегулярное выражениеПример результата
Email[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}ivanov@mail.ru
Телефон\+7\([0-9]{3}\)[0-9]{3}-[0-9]{2}-[0-9]{2}+7(999)123-45-67

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

5. Продвинутые техники: комбинации функций

Иногда для извлечения текста требуется цепочка функций. Рассмотрим реальный кейс: в ячейке содержится строка "Счёт №INV-2026-0543 от 15.05.2026 на сумму 12 500 руб.". Нужно извлечь:

  1. Номер счёта (INV-2026-0543).
  2. Дата (15.05.2026).
  3. Сумма (12 500).

Решения:

  • 📍 Номер счёта: между "№" и " от"
    =ПСТР(A1; ПОИСК("№"; A1)+1; ПОИСК(" от"; A1) - ПОИСК("№"; A1) - 1)
  • 📅 Дата: между "от " и " на сумму"
    =ПСТР(A1; ПОИСК("от "; A1)+3; ПОИСК(" на сумму"; A1) - ПОИСК("от "; A1) - 3)
  • 💰 Сумма: между "сумму " и " руб."
    =ПСТР(A1; ПОИСК("сумму "; A1)+6; ПОИСК(" руб."; A1) - ПОИСК("сумму "; A1) - 6)

Для упрощения можно создать пользовательскую функцию на VBA, которая будет извлекать текст между двумя маркерами:

Код VBA для извлечения текста между маркерами

Function ExtractBetween(Text As String, StartMarker As String, EndMarker As String) As String

Dim StartPos As Integer, EndPos As Integer

StartPos = InStr(Text, StartMarker) + Len(StartMarker)

EndPos = InStr(StartPos, Text, EndMarker)

If StartPos > 0 And EndPos > 0 Then

ExtractBetween = Mid(Text, StartPos, EndPos - StartPos)

Else

ExtractBetween = "#ОШИБКА"

End If

End Function

После добавления этого кода в редактор VBA (Alt + F11) функцию можно использовать как =ExtractBetween(A1; "№"; " от").

6. Ошибки и их решения

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

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

Пример исправления: если формула =ПСТР(A1; ПОИСК(":"; A1)+1; 5) возвращает #ЗНАЧ!, значит в ячейке A1 нет символа ":". Добавьте обработку ошибки:

=ЕСЛИОШИБКА(ПСТР(A1; ПОИСК(":"; A1)+1; 5); "Нет данных")
⚠️ Внимание: Если вы работаете с большими текстами (более 1000 символов), избегайте многократного использования ПОИСК в одной формуле — это значительно замедляет пересчёт. Вместо этого разбейте задачу на этапы или используйте Power Query.

FAQ: Частые вопросы по извлечению текста в Excel

Как извлечь первую слово из ячейки?

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

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

Добавление " " & A1 гарантирует, что формула сработает даже если в ячейке одно слово.

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

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

Как извлечь все цифры из строки?

В Excel 365 используйте:

=ТЕКСТПОСЛЕ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(...; "0"; ""); "1"; ""); ...; "9"; ""); "")

Для старых версий напишите пользовательскую функцию на VBA или используйте Power Query с регулярным выражением [0-9]+.

Почему ПСТР возвращает #ЗНАЧ!, если позиция корректна?

Ошибка возникает в трёх случаях:

  1. Начальная позиция < 1.
  2. Количество символов < 0.
  3. Сумма начальная_позиция + количество_символов - 1 превышает длину текста.

Проверьте аргументы с помощью =ДЛСТР(A1).

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

Например, из строки "==Важное сообщение== " нужно получить "Важное сообщение". Используйте:

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