Microsoft Excel — мощный инструмент для работы с данными, но многие пользователи сталкиваются с трудностями при попытке извлечь часть текста из ячейки. В отличие от чисел, текстовые данные требуют специальных функций: нельзя просто "отнять" один фрагмент из другого. В этой статье разберём 5 проверенных способов вычесть текст в Excel — от базовых функций до продвинутых комбинаций с регулярными выражениями (через Power Query).
Вы научитесь:
- 🔹 Использовать
ЛЕВСИМВ,ПРАВСИМВиПСТРдля извлечения подстрок по позициям - 🔹 Применять
ПОИСКиНАЙТИ, чтобы динамически определять границы текста - 🔹 Разбивать текст по разделителям с помощью
ТЕКСТ.ПОСЛЕиТЕКСТ.ДО(Excel 365) - 🔹 Автоматизировать процесс через Power Query для больших массивов данных
Все примеры сопровождаются скриншотами и готовыми формулами — их можно скопировать и адаптировать под свои задачи. Если вы работаете с Google Таблицами, 90% методов из этой статьи будут работать и там (с учётом синтаксиса).
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 — инструмент для преобразования данных, поддерживающий регулярные выражения.
Алгоритм действий:
- Выделите диапазон с данными →
Данные → Получить данные → Из таблицы/диапазона.- В открывшемся редакторе Power Query выберите столбец →
Преобразовать → Извлечь → Текст по шаблону.- Введите регулярное выражение. Например, для email:
[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}- Нажмите
ОК→Закрыть и загрузить.Пример: из столбца с текстом
"Контакт: ivanov@mail.ru, тел. +7(999)123-45-67"извлечём 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 руб.". Нужно извлечь:
- Номер счёта (
INV-2026-0543).- Дата (
15.05.2026).- Сумма (
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.- Количество символов
< 0.- Сумма
начальная_позиция + количество_символов - 1превышает длину текста.Проверьте аргументы с помощью
=ДЛСТР(A1).Как извлечь текст между двумя одинаковыми разделителями?
Например, из строки
"==Важное сообщение== "нужно получить"Важное сообщение". Используйте:=ПСТР(A1; ПОИСК("=="; A1)+2; ПОИСК("=="; A1; ПОИСК("=="; A1)+1) - ПОИСК("=="; A1) - 2)