Microsoft Excel предлагает десятки функций для работы с текстом, но одна из самых востребованных — MID (в русской версии — ПСТР). Она позволяет «вырезать» фрагмент из строки по заданным координатам, что незаменимо при обработке больших массивов данных: парсинге логов, разделении ФИО, извлечении кодов из артикулов и многом другом. Однако многие пользователи либо не знают о её существовании, либо используют неэффективно.
В этой статье мы разберём MID «под микроскопом»: от синтаксиса и базовых примеров до продвинутых техник с вложенными функциями. Вы узнаете, как избежать типичных ошибок (например, #ЗНАЧ! при неверных аргументах), чем MID отличается от LEFT/RIGHT, и как автоматизировать извлечение данных с помощью Power Query. А для тех, кто работает с кириллицей — отдельный раздел про кодировки и «подводные камни» с многобайтовыми символами.
Что такое функция MID в Excel и зачем она нужна
Функция MID (англ. middle — «середина») возвращает заданное количество символов из текстовой строки, начиная с указанной позиции. Это инструмент для точного извлечения подстрок по числовым координатам, без привязки к разделителям (в отличие от TEXTSPLIT или Разделить текст по столбцам).
Классические сценарии применения:
- 📌 Извлечение кода продукта из артикула (например, первые 3 символа — категория, следующие 4 — модель).
- 📌 Разделение полного ФИО на отдельные столбцы (фамилия, имя, отчество) при фиксированной структуре.
- 📌 Парсинг лог-файлов, где данные записаны в формате
[Дата] [Уровень] Сообщение. - 📌 Обработка экспортных файлов из 1С или CRM, где поля «склеены» в одну ячейку.
Главное преимущество MID — предсказуемость. В отличие от функций вроде FIND (которая ищет подстроку по содержимому), здесь вы точно указываете откуда и сколько символов нужно вернуть. Это критично для автоматизации: если структура данных стабильна, формула будет работать без сбоев.
Синтаксис функции MID: разбор аргументов
Формула MID имеет три обязательных аргумента (в скобках указаны названия для русской версии Excel):
MID(text, start_num, num_chars)
ПСТР(текст; начальная_позиция; число_знаков)
Разберём каждый параметр с примерами:
| Аргумент | Описание | Пример | Типичная ошибка |
|---|---|---|---|
text(текст) |
Исходная строка или ссылка на ячейку с текстом. | MID("Привет", 2, 3) → "рив" |
Указание числа вместо текста (вернёт #ЗНАЧ!). |
start_num(начальная_позиция) |
Номер символа, с которого начинается извлечение (начиная с 1). | MID("Excel", 3, 2) → "ce" |
Значение ≤ 0 (вернёт #ЗНАЧ!). |
num_chars(число_знаков) |
Количество извлекаемых символов. | MID("2026", 1, 2) → "20" |
Отрицательное число (вернёт #ЗНАЧ!). |
Важно: MID всегда возвращает текст, даже если извлекает цифры. Чтобы преобразовать результат в число, используйте VALUE или умножьте на 1:
=VALUE(MID("123abc", 1, 3)) → 123
=MID("123abc", 1, 3)*1 → 123
Практические примеры использования MID
Рассмотрим реальные кейсы, где MID экономит часы ручной работы.
Пример 1: Разделение артикулов
Допустим, у вас есть артикулы товара в формате CAT-MDL-001, где:
- 📦
CAT— категория (первые 3 символа); - 📦
MDL— модель (символы 5-7); - 📦
001— номер (последние 3 символа).
Формулы для извлечения:
=MID(A1, 1, 3) → "CAT" (категория)
=MID(A1, 5, 3) → "MDL" (модель)
=MID(A1, 9, 3) → "001" (номер)
Пример 2: Извлечение домена из email
Если в ячейке A1 лежит адрес user@example.com, а вам нужен только домен:
=MID(A1, FIND("@", A1)+1, LEN(A1)) → "example.com"
Здесь FIND находит позицию @, а MID извлекает всё после неё.
Пример 3: Обработка дат в логах
Лог-файл содержит строки вида [2026-05-15 14:30] Ошибка подключения. Чтобы вытащить дату:
=MID(A1, 2, 10) → "2026-05-15"
Убедитесь, что структура данных стабильна|Проверьте наличие пробелов или скрытых символов|Тестируйте формулу на 2-3 примерах|Используйте LEN для динамического подсчёта длины-->
Типичные ошибки и как их избежать
Даже опытные пользователи сталкиваются с проблемами при работе с MID. Вот самые распространённые:
⚠️ Внимание: Еслиstart_numпревышает длину строки, MID вернёт пустую строку (""), а не ошибку. Это может остаться незамеченным в больших таблицах!
Ошибка #1: Неучёт многобайтовых символов
В кириллических текстах символы занимают 2 байта, поэтому MID может «резать» их неправильно. Например:
=MID("Привет", 2, 1) → "?" (вместо "р")
Решение: используйте МПСТР (для многобайтовых строк) или преобразуйте текст в Unicode.
Ошибка #2: Динамическая длина подстроки
Если количество извлекаемых символов варьируется, фиксированное num_chars не подойдёт. Например, для извлечения имени из ФИО "Иванов Петр Сидорович" нужно:
=MID(A1, FIND(" ", A1)+1, FIND(" ", A1, FIND(" ", A1)+1) - FIND(" ", A1)-1)
→ "Петр"
Ошибка #3: Пустые ячейки
Если в text пусто, MID вернёт "", но вложенные функции (например, FIND) могут выдать #ЗНАЧ!. Оберните формулу в IFERROR:
=IFERROR(MID(A1, 1, 3), "")
Почему MID возвращает #ИМЯ?
Ошибка #ИМЯ! появляется, если:
1. Опечатка в названии функции (например, MIDD вместо MID).
2. Используется русская версия Excel, но введена английская функция (нужно ПСТР).
3. Отсутствует закрывающая скобка.
Альтернативы MID: когда лучше использовать другие функции
MID не всегда оптимальна. В некоторых случаях удобнее:
| Функция | Когда использовать | Пример |
|---|---|---|
LEFT (ЛЕВСИМВ) |
Нужны первые N символов. | LEFT("Excel", 3) → "Exc" |
RIGHT (ПРАВСИМВ) |
Нужны последние N символов. | RIGHT("Excel", 2) → "el" |
| TEXTBEFORE/TEXTAFTER (Excel 365) | Извлечение по разделителю (не по позициям). | TEXTAFTER("user@example.com", "@") → "example.com" |
| FLASH FILL (Быстрое заполнение) | Для неструктурированных данных с ручным образцом. | Введите первый результат вручную → Ctrl+E. |
Комбинация MID + FIND часто заменяется на TEXTSPLIT (в новых версиях Excel), но у последней есть ограничение: она требует явного разделителя. Если структура данных жёстко фиксирована (например, всегда 5-й символ начинает код продукта), MID надёжнее.
Продвинутые техники: MID с массивами и Power Query
Для обработки тысяч строк MID можно интегрировать с другими инструментами.
1. Извлечение нескольких подстрок за один шаг
Если нужно получить несколько фрагментов из одной строки, используйте формулу массива (вводится через Ctrl+Shift+Enter в старых версиях):
{=MID(A1, {1,5,9}, {3,3,3})}
Вернёт массив из трёх значений (например, для "CAT-MDL-001" → {"CAT","MDL","001"}).
2. Автоматизация с Power Query
Для больших datasets эффективнее использовать Power Query:
- Выделите данные →
Данные → Из таблицы/диапазона. - В редакторе Power Query добавьте столбец с формулой:
= Text.Middle([Column1], 0, 3)
Где 0 — начальная позиция (в Power Query отсчёт с 0), 3 — длина.
3. MID в VBA
В макросах синтаксис аналогичен:
Sub ExtractText()
Dim str As String
str = "Example"
MsgBox Mid(str, 3, 2) ' Вернёт "am"
End Sub
MID и кириллица: особенности работы с русским текстом
При работе с кириллицей MID может вести себя неожиданно из-за кодировки Unicode. Например:
=MID("Привет", 2, 1) → "?" (вместо "р")
Проблема в том, что русские буквы занимают 2 байта, а MID оперирует байтами, а не символами. Решения:
- 🔄 Используйте МПСТР (для многобайтовых строк):
=МПСТР("Привет", 2, 1)→ "р". - 🔄 Преобразуйте текст в Unicode с помощью UNICODE + CHAR.
- 🔄 В Power Query используйте
Text.Middle— она корректно обрабатывает Unicode.
Для проверки длины строки с учётом кириллицы используйте:
=LENB("Привет") → 12 (байт)
=LEN("Привет") → 6 (символов)
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(A1;" ";" "); 2*нач_позиция-1; 2*число_знаков))
где нач_позиция и число_знаков — количество символов (не байт).-->
FAQ: Ответы на частые вопросы
Можно ли использовать MID для извлечения чисел из текста?
Да, но результат будет текстом. Чтобы преобразовать его в число, оберните MID в VALUE или умножьте на 1:
=VALUE(MID("А123Б", 2, 3)) → 123
Если в строке есть нецифровые символы (например, "1,23"), используйте SUBSTITUTE для их удаления:
=VALUE(SUBSTITUTE(MID(A1, 1, 4), ",", "."))
Как извлечь текст между двумя символами (например, скобками)?
Используйте комбинацию MID с двумя FIND:
=MID(A1; FIND("("; A1)+1; FIND(")"; A1)-FIND("("; A1)-1)
Для A1 = "Пример (текст) здесь" вернёт "текст".
Почему MID возвращает ошибку #ЗНАЧ!?
Причины и решения:
- 🔹
start_num≤ 0 → исправьте на положительное число. - 🔹
num_charsотрицательное → укажите положительное значение. - 🔹 В
textпередано не текстовое значение → оберните в TEXT:
=MID(TEXT(123); 1; 2) → "12"
Как применить MID ко всему столбцу без протягивания формулы?
Способы:
- Выделите диапазон → введите формулу → нажмите
Ctrl+Enter. - Используйте Power Query (описано выше).
- В Excel 365 используйте динамические массивы:
=MID(A1:A100; 2; 3)
Формула автоматически заполнит весь диапазон.
Есть ли аналог MID в Google Sheets?
Да, в Google Таблицах функция называется MID (или СРЗНАЧ в русской версии) и имеет тот же синтаксис:
=MID("Google Sheets"; 8; 5) → "Sheets"
Отличия:
- 🔹 Поддерживает кириллицу без дополнительных функций.
- 🔹 Можно использовать в APPS SCRIPT для автоматизации.