Функция ПСТР в Excel: полное руководство по извлечению текста

Функция ПСТР (или MID в английской версии Excel) возвращает заданное количество символов из середины текстовой строки, начиная с указанной позиции. Если вы видите в ячейке формулу вида =ПСТР(A1;3;5) и не понимаете, что она делает — эта статья разберёт её пошагово. Чаще всего ПСТР применяют для извлечения фрагментов из длинных строк (например, номеров документов, ФИО или кодов), когда нужные данные "зажаты" между другими символами.

В отличие от функций ЛЕВСИМВ (извлекает символы слева) и ПРАВСИМВ (справа), ПСТР работает с произвольной частью строки. Это делает её незаменимой при разборе неструктурированных данных — например, когда нужно вытащить домен из email или серию паспорта из строки "Серия 1234 № 567890". Без ПСТР такие задачи пришлось бы решать вручную или через сложные комбинации функций.

Основная ошибка новичков — путать порядок аргументов или использовать неправильную кодировку текста (особенно в старых версиях Excel). Если формула возвращает #ЗНАЧ! или некорректный результат, проблема чаще всего кроется в неверно указанном номере начального символа или длине извлекаемого фрагмента. Далее разберём синтаксис, практические примеры и лайфхаки для работы с ПСТР.

Синтаксис функции ПСТР: разбор аргументов

Формула ПСТР в Excel имеет три обязательных аргумента:

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

1. Текст — строка или ссылка на ячейку, из которой извлекается подстрока. Может быть как статичным текстом в кавычках (например, "Пример"), так и динамической ссылкой (A1).

2. Начальная_позиция — номер символа, с которого начинается извлечение. Важно: отсчёт ведётся с единицы, а не с нуля! Например, для строки "Excel" позиция 1 — это "E", а позиция 3 — "c".

3. Число_символов — количество знаков, которые нужно вернуть. Если указать значение больше, чем осталось символов от начальной позиции до конца строки, Excel вернёт все оставшиеся символы без ошибки.

⚠️ Внимание: Если начальная_позиция превышает длину строки, функция вернёт пустую ячейку. Если же число_символов равно нулю или отрицательно — результат тоже будет пустым.
Аргумент Пример значения Результат для строки "Мастер-класс"
текст A1 (где A1 = "Мастер-класс")
начальная_позиция 8 Начинает с символа "к" (8-я позиция)
число_символов 5 Вернёт "класс"
Итоговая формула =ПСТР(A1;8;5) "класс"

Практические примеры использования ПСТР

Рассмотрим реальные задачи, где ПСТР экономит часы ручной работы. Все примеры адаптированы для русскоязычной версии Excel.

Пример 1. Извлечение домена из email

Допустим, в ячейке B2 содержится адрес ivanov@company.ru. Чтобы получить "company", используем:

=ПСТР(B2; ПОИСК("@";B2)+1; ПОИСК(".";B2;ПОИСК("@";B2))-ПОИСК("@";B2)-1)

Формула ищет позицию "@", затем находит следующую точку и извлекает текст между ними.

Пример 2. Разделение ФИО на части

Если в ячейке A1 записано "Иванов Иван Иванович", чтобы получить отчество (третье слово), комбинируем ПСТР с функциями ПОИСК и ДЛСТР:

=ПСТР(A1; ПОИСК("~"; ПОДСТАВИТЬ(A1; " "; "~"; 2))+1; 99)

Здесь ПОДСТАВИТЬ заменяет второй пробел на символ "~", а ПОИСК находит его позицию.

  • 📌 Для извлечения серии паспорта: =ПСТР(A1;ПОИСК("Серия";A1)+6;4) (если формат "Серия 1234 №...").
  • 🔢 Для кода товара: =ПСТР(A1;5;3) (если код всегда начинается с 5-го символа и имеет длину 3).
  • 📅 Для года в дате: =ПСТР(A1;7;4) (если формат "01.01.2023").

Типичные ошибки и как их исправить

Даже опытные пользователи сталкиваются с ошибками при работе с ПСТР. Вот самые распространённые случаи и их решения:

  1. #ЗНАЧ! — возникает, если начальная_позиция или число_символов не являются числом. Проверьте, чтобы аргументы не содержали текст или ошибки в формулах.
  2. Пустая ячейка — значит, начальная_позиция больше длины строки. Используйте ДЛСТР, чтобы проверить длину: =ЕСЛИ(начальная_позиция>ДЛСТР(текст);"";ПСТР(...)).
  3. Неправильный результат — часто связан с неверным отсчётом позиций. Помните: первый символ имеет номер 1, а не 0! Для проверки используйте =СИМВОЛ(КОДСИМВ(ПСТР(A1;1;1))).
⚠️ Внимание: В англоязычных версиях Excel функция называется MID, а разделителем аргументов служит запятая (,), а не точка с запятой (;). Если формула не работает после копирования из интернета, замените разделители!
Ошибка Причина Решение
#ИМЯ? Опечатка в названии функции Проверьте регистр: должно быть ПСТР, а не пстр или PSTR.
#ССЫЛКА! Некорректная ссылка на ячейку Убедитесь, что ячейка существует и не удалена.
Результат с лишними пробелами Исходная строка содержит пробелы Оберните результат в СЖПРОБЕЛЫ: =СЖПРОБЕЛЫ(ПСТР(...)).
📊 Как часто вы используете функцию ПСТР в Excel?
Каждый день
Несколько раз в неделю
Редко, по необходимости
Никогда не пользовался

Альтернативы ПСТР: когда лучше использовать другие функции

ПСТР не всегда оптимальна. В некоторых случаях удобнее другие текстовые функции:

  • 🔍 ЛЕВСИМВ/ПРАВСИМВ: Если нужны символы с начала или конца строки (например, первые 3 буквы или последние 2 цифры).
  • 🔄 ПОДСТАВИТЬ: Для замены фрагментов текста, а не извлечения.
  • 📍 НАЙТИ/ПОИСК: Если нужно найти позицию подстроки перед извлечением (часто используются вместе с ПСТР).
  • 🛠️ ТЕКСТПОСЛЕ/ТЕКСТДО: В Excel 365 и 2021 появились новые функции для извлечения текста после/до разделителя (упрощают задачи, где раньше нужна была ПСТР).

Например, чтобы извлечь всё после "@" в email, в новых версиях Excel достаточно:

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

Вместо громоздкой конструкции с ПСТР и ПОИСК.

Как работают ТЕКСТПОСЛЕ и ТЕКСТДО?

Эти функции появились в Excel 365 и упрощают извлечение подстрок по разделителю. ТЕКСТПОСЛЕ(текст; разделитель; [номер_вхождения]) возвращает текст после указанного разделителя, а ТЕКСТДО — до него. Например, =ТЕКСТДО("Иванов_Иван_Иванович"; "_"; 2) вернёт "Иванов_Иван".

ПСТР в VBA: как применять функцию в макросах

В Visual Basic for Applications (VBA) функция ПСТР доступна через метод Mid. Синтаксис аналогичен, но с другими разделителями:

Mid(String, Start As Long, [Length As Long])

Примеры использования:

  • 📝 Извлечение подстроки: Dim result As String: result = Mid("Excel VBA", 7, 3) (вернёт "VBA").
  • 🔄 Замена фрагмента: Комбинируйте с Left/Right для модификации строк.
  • 📊 Обработка массивов: В циклах For Each можно динамически извлекать данные из ячеек.

Важное отличие от Excel: в VBA Start может быть отрицательным (отсчёт идёт с конца строки). Например, Mid("Hello", -2, 1) вернёт "l".

⚠️ Внимание: В VBA индексация символов начинается с 1, как и в Excel, но при работе с байтовыми строками (например, в файловом вводе-выводе) может потребоваться учёт кодировки. Для кириллицы используйте StrConv с параметром vbUnicode.

Оптимизация формул с ПСТР: советы для больших таблиц

Если вы применяете ПСТР к тысячам строк, производительность Excel может упасть. Вот как ускорить работу:

  1. Избегайте вложенных ПСТР: Формулы вида =ПСТР(ПСТР(A1;1;10);3;5) тормозят расчёты. Разбейте их на промежуточные столбцы.
  2. Используйте "умные таблицы": Преобразуйте диапазон в таблицу (Ctrl+T), чтобы формулы автоматически копировались при добавлении строк.
  3. Отключите автоматический пересчёт: В больших файлах переведите Excel в ручной режим (Формулы → Параметры вычислений → Вручную).
  4. Замените на Power Query: Для сложного парсинга данных импортируйте их через Данные → Получить данные и используйте инструменты трансформации.

Для критически важных задач рассмотрите переход на Power Pivot или Python (библиотека pandas), где обработка текста работает быстрее.

1. Убедиться, что начальная позиция не превышает длину строки

2. Проверить, нет ли пустых ячеек в исходных данных

3. Разбить сложные формулы на промежуточные этапы

4. Отключить автоматический пересчёт для ускорения работы

-->

ПСТР vs. регулярные выражения: что выбрать

Для простых задач (например, извлечь 3 символа с 5-й позиции) ПСТР — идеальный выбор. Но если нужно:

  • 🔎 Найти текст по шаблону (например, все email или телефоны),
  • 📝 Извлечь данные с переменной длиной (например, текст в скобках),
  • 🔄 Заменить сложные подстроки,

то лучше использовать регулярные выражения (regex). В Excel их поддерживает:

  • 📊 Power Query (встроенный инструмент трансформации данных),
  • 🛠️ VBA (через объект RegExp),
  • 🐍 Python (библиотека re в xlwings или openpyxl).

Пример на VBA с regex для извлечения всех чисел из строки:

Dim regex As Object, matches As Object

Set regex = CreateObject("VBScript.RegExp")

regex.Pattern = "\d+" ' шаблон для чисел

Set matches = regex.Execute("Заказ 123 и 456")

MsgBox matches(0) & ", " & matches(1) ' вернёт "123, 456"

FAQ: Частые вопросы о функции ПСТР

Можно ли в ПСТР использовать отрицательные числа для начальная_позиция?

Нет, в стандартной функции ПСТР Excel отрицательные значения приводят к ошибке #ЗНАЧ!. Однако в VBA метод Mid поддерживает отрицательный Start — отсчёт идёт с конца строки.

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

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

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

Для строки "Москва-Санкт-Петербург-Казань" это вернёт "Санкт-Петербург".

Почему ПСТР возвращает пустую строку, хотя в ячейке есть текст?

Вероятные причины:

  1. начальная_позиция больше длины строки (проверьте через =ДЛСТР(A1)).
  2. число_символов равно 0 или отрицательно.
  3. В ячейке невидимые символы (пробелы, переводы строк). Используйте =СЖПРОБЕЛЫ(A1) для очистки.
Как применить ПСТР ко всем ячейкам столбца без копирования формулы?

Три способа:

  1. Преобразуйте диапазон в "умную таблицу" (Ctrl+T) — формула автоматически скопируется на новые строки.
  2. Используйте Горячие клавиши: выделите ячейку с формулой, наведите курсор на правый нижний угол (появится "+") и дважды кликните.
  3. В Excel 365 используйте динамические массивы:
  4. =ПСТР(A1:A100;3;5)

    Формула автоматически заполнит весь диапазон.

Есть ли аналоги ПСТР в Google Таблицах?

Да, в Google Sheets функция называется MID (как в англоязычном Excel) и имеет тот же синтаксис:

=MID(A1; 3; 5)

Разделителем аргументов служит точка с запятой (;) или запятая (,) — зависит от региональных настроек.