Функция ПСТР (или MID в английской версии Excel) возвращает ошибку #ЗНАЧ!, если вы пытаетесь извлечь подстроку за пределами исходного текста — например, когда начальная позиция больше длины строки. Чтобы избежать этой проблемы, сначала проверьте длину текста с помощью ДЛСТР, а уже потом применяйте ПСТР с корректными параметрами. Эта функция незаменима для работы с фрагментами данных: извлечения фамилий из ФИО, кодировок из артикулов или цифр из алфавитно-цифровых строк.
В отличие от ЛЕВСИМВ и ПРАВСИМВ, которые извлекают символы с краёв, ПСТР позволяет указать точную стартовую позицию и количество символов для вырезки из середины строки. Например, чтобы достать "2026" из строки "Договор_2026_123", достаточно задать начальную позицию 9 и длину 4. Но здесь кроются подводные камни: если исходный текст содержит пробелы или невидимые символы (например, переносы строк), функция может вернуть неожиданный результат.
Разберёмся, как правильно использовать ПСТР в Excel 2010–2023 и Office 365, включая обработку ошибок, динамические формулы и комбинации с другими функциями (ПОИСК, НАЙТИ, ЕСЛИОШИБКА). Вы узнаете, почему иногда функция возвращает пустую строку, как извлекать текст между разделителями и автоматизировать процесс для тысяч строк.
Синтаксис функции ПСТР: разбор аргументов
Формула ПСТР в Excel имеет три обязательных аргумента:
ПСТР(текст; начальная_позиция; количество_символов)
Где:
- 📌
текст— строка или ссылка на ячейку с текстом, из которого извлекается подстрока. Может быть результатом другой функции (например,СЦЕПИТЬ). - 📍
начальная_позиция— номер символа, с которого начинается извлечение (первый символ имеет позицию1, а не0!). - ✂️
количество_символов— сколько символов нужно вернуть. Если указать0, функция вернёт пустую строку.
Пример: =ПСТР("Excel2023"; 6; 4) вернёт "2023", так как извлекает 4 символа, начиная с 6-й позиции. Если же указать начальная_позиция = 10, результат будет пустым — в строке всего 9 символов.
⚠️ Внимание: В английской версии Excel функция называетсяMID, а в немецкой —TEIL. При копировании формул из иностранных источников заменяйте название на ПСТР, иначе получите ошибку#ИМЯ?.
Практическое применение ПСТР: 5 реальных примеров
Рассмотрим типичные задачи, где ПСТР экономит часы ручной работы:
- Извлечение года из даты в текстовом формате
Если дата хранится как строка (например, "15.01.2026"), формула
=ПСТР(A1; 7; 4)вернёт"2026". - Выделение кода продукта из артикула
Для строки "ART-12345-XL" код
12345извлекается так:=ПСТР(A1; 5; 5). - Разделение ФИО на отдельные столбцы
Если в ячейке "Иванов Иван Иванович", фамилию получим как
=ПСТР(A1; 1; ПОИСК(" "; A1)-1).
Для динамического извлечения текста между двумя разделителями (например, "_") используйте комбинацию:
=ПСТР(A1; ПОИСК("_"; A1)+1; ПОИСК("_"; A1; ПОИСК("_"; A1)+1) - ПОИСК("_"; A1)-1)
Ошибки при работе с ПСТР и как их исправить
Даже опытные пользователи сталкиваются с ошибками при работе с ПСТР. Вот самые распространённые:
| Ошибка | Причина | Решение |
|---|---|---|
#ЗНАЧ! | Начальная позиция больше длины текста | Проверьте длину строки с ДЛСТР или используйте ЕСЛИОШИБКА |
#ИМЯ? | Опечатка в названии функции | Убедитесь, что написали ПСТР (не ПСТ или ПОДСТР) |
| Пустая строка | Количество символов = 0 или отрицательное | Проверьте третий аргумент функции |
Чтобы избежать ошибок, оберните ПСТР в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(ПСТР(A1; B1; C1); "")
⚠️ Внимание: Если исходный текст содержит непечатаемые символы (например, табуляцию или перевод строки), функция ПСТР может вернуть неожиданный результат. Очистите данные с помощьюСЖПРОБЕЛЫилиПЕЧСИМВ.
ПСТР vs ЛЕВСИМВ и ПРАВСИМВ: когда что использовать
Все три функции извлекают подстроки, но работают по-разному:
- 🔹 ЛЕВСИМВ — берёт символы слева (например, первые 3 символа). Синтаксис:
=ЛЕВСИМВ(A1; 3). - 🔸 ПРАВСИМВ — берёт символы справа (например, последние 2 символа). Синтаксис:
=ПРАВСИМВ(A1; 2). - 🔶 ПСТР — извлекает символы с любой позиции (например, 4 символа, начиная с 5-го).
Выбор функции зависит от задачи:
- 📌 Нужны первые/последние символы →
ЛЕВСИМВ/ПРАВСИМВ. - 📍 Нужна подстрока из середины → ПСТР.
- 🔄 Нужно извлечь текст между разделителями → комбинация ПСТР +
ПОИСК.
Динамическое извлечение текста: комбинации с ПОИСК и НАЙТИ
Часто начальная позиция или длина подстроки заранее неизвестны. В таких случаях ПСТР комбинируют с функциями ПОИСК (регистронезависимый поиск) или НАЙТИ (с учётом регистра).
Пример: извлечь домен из email user@example.com:
=ПСТР(A1; ПОИСК("@"; A1)+1; ДЛСТР(A1)-ПОИСК("@"; A1))
Разберём формулу по шагам:
ПОИСК("@"; A1)находит позицию символа@(например, 5).ПОИСК("@"; A1)+1сдвигает стартовую позицию на 1 вправо (чтобы пропустить@).ДЛСТР(A1)-ПОИСК("@"; A1)вычисляет количество символов после@.
Для извлечения текста между двумя одинаковыми разделителями (например, "/") используйте:
=ПСТР(A1; ПОИСК("/"; A1)+1; ПОИСК("/"; A1; ПОИСК("/"; A1)+1) - ПОИСК("/"; A1)-1)
1. Убедитесь, что начальная позиция не превышает длину строки
2. Проверьте, нет ли в тексте скрытых символов (пробелов, табуляций)
3. Используйте ПОИСК/НАЙТИ для динамического определения позиций
4. Оберните формулу в ЕСЛИОШИБКА для обработки исключений-->
Автоматизация с ПСТР: обработка больших массивов данных
Если нужно применить ПСТР к тысячам строк, используйте прогрессивную нумерацию или Power Query:
- 📊 Маркер заполнения: протяните формулу вниз, Excel автоматически скорректирует ссылки на ячейки.
- 🔄 Power Query: импортируйте данные → добавьте пользовательский столбец с формулой ПСТР → загрузите обратно в Excel.
- 📈 Таблицы Excel: преобразуйте диапазон в таблицу (
Ctrl+T), формулы будут копироваться автоматически.
Для извлечения данных из неструктурированного текста (например, логов) комбинируйте ПСТР с:
- 🔍
ПОИСК/НАЙТИ— для поиска маркеров. - 📏
ДЛСТР— для вычисления длины подстроки. - 🔢
ЗНАЧЕН— для преобразования текста в число.
Пример: извлечь числовое значение из строки "Температура: 25.5°C":
=ЗНАЧЕН(ПСТР(A1; ПОИСК(":"; A1)+2; ПОИСК("°"; A1)-ПОИСК(":"; A1)-2))
Как ускорить работу с ПСТР в больших файлах
1. Отключите автоматический пересчёт формул (Формулы → Параметры вычислений → Вручную).
2. Используйте вспомогательные столбцы для промежуточных вычислений (например, отдельно храните позиции разделителей).
3. Для критически важных задач перепишите логику на VBA — макросы работают быстрее на больших объёмах данных.
ПСТР в Excel Online и мобильной версии: особенности
Функция ПСТР работает одинаково во всех версиях Excel, но в Excel Online и мобильном приложении есть нюансы:
- 🌐 Excel Online:
- ✅ Поддерживает все аргументы ПСТР.
- ⚠️ Нет подсказок по формулам (как в десктопной версии).
- 🔄 Автозаполнение работает медленнее.
- 📱 Мобильное приложение (Android/iOS):
- ✅ Полная поддержка синтаксиса.
- ⚠️ Сложно вводить длинные формулы на сенсорной клавиатуре.
- 📌 Совет: используйте голосовой ввод для функций.
В мобильной версии удобнее работать с ПСТР через режим формул:
- Коснитесь ячейки → значок
fx. - Введите
ПСТРв строку поиска. - Заполните аргументы, тапая по ячейкам (не вручную!).
⚠️ Внимание: В Excel для Mac 2011 и более ранних версиях функция ПСТР может некорректно работать с юникод-символами (например, кириллицей в смешанных строках). Обновите программу или используйте ПОДСТАВИТЬ для нормализации текста.
Часто задаваемые вопросы
Как извлечь текст после последнего разделителя (например, последнюю папку в пути "C:\Users\Doc\File.txt")?
Используйте комбинацию ПСТР, ПОИСК и ДЛСТР:
=ПСТР(A1; ПОИСК("|"; ПОДСТАВИТЬ(A1; "\"; "|"; ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1; "\"; ""))))+1; ДЛСТР(A1))
Для пути с обратными слэшами (\) замените их на временный символ (например, |), найдите последний разделитель, затем вернитесь к исходной строке.
Почему ПСТР возвращает #ЗНАЧ!, если начальная позиция корректна?
Причины могут быть скрыты:
- В тексте есть невидимые символы (например,
CHAR(160)— неразрывный пробел). Используйте=КОДСИМВ(ПСТР(A1;1;1))для диагностики. - Ячейка содержит ошибку (например,
#Н/Д), а не текст. Проверьте с помощью=ЕТЕКСТ(A1). - Третий аргумент (
количество_символов) отрицательный.
Можно ли использовать ПСТР для извлечения данных из ячеек с формулами?
Да, но учитывайте два момента:
- Если ячейка содержит формулу, ПСТР увидит её результат, а не саму формулу. Например, если в
A1формула=СЕГОДНЯ(), то=ПСТР(A1;1;4)вернёт первые 4 символа текущей даты (например, "20.0"). - Если результат формулы — ошибка (например,
#ДЕЛ/0!), ПСТР вернёт эту ошибку. Оберните вЕСЛИОШИБКА.
Как применить ПСТР ко всем ячейкам столбца, если длина подстроки разная?
Используйте динамическое определение длины с помощью ПОИСК или ДЛСТР. Пример для извлечения текста до первого пробела:
=ПСТР(A1; 1; ЕСЛИ(ПОИСК(" "; A1)=0; ДЛСТР(A1); ПОИСК(" "; A1)-1))
Для обработки всего столбца:
- Введите формулу в первую ячейку.
- Дважды кликните по маркеру заполнения (маленький квадратик в правом нижнем углу ячейки).
Есть ли альтернатива ПСТР в Power Query?
В Power Query (инструмент Данные → Получить данные) аналогом ПСТР служат функции:
Text.Middle— прямой аналог ПСТР.Text.BeforeDelimiter/Text.AfterDelimiter— для извлечения текста до/после разделителя.Text.BetweenDelimiters— для текста между двумя разделителями.
Пример на языке M:
Text.Middle([Column1], 5, 3) // Извлекает 3 символа, начиная с 6-го