Мастер-класс по работе с текстовыми данными в таблицах

Иван Корнев·11.04.2026·4 мин

Чтобы извлечь данные из строки или столбца таблицы, используйте встроенные текстовые функции (ПСТР, НАЙТИ, SPLIT) для разовых задач в Excel и Google Таблицах, либо регулярные выражения и методы строк в Python/SQL для автоматизации больших объемов. Выбор инструмента зависит от сложности формата данных: фиксированная длина требует функций позиции, а вариативные структуры — регулярных выражений или разбиения по разделителям.

Краткий ответ: Для простых задач в Excel используйте =ПСТР() или =ТЕКСТПОСЛЕ(). В Google Таблицах идеален =REGEXEXTRACT(). Для обработки тысяч строк лучше написать скрипт на Python (библиотека Pandas) или использовать SQL-запрос с SUBSTRING.

Принципы выбора метода обработки

Эффективность извлечения данных напрямую зависит от структуры исходной информации. Перед началом работы проанализируйте формат ячейки:

  1. Фиксированная позиция: Данные всегда находятся на одних и тех же символах (например, код страны всегда первые 2 символа).
  2. Разделители: Значения разделены запятыми, точками с запятой, дефисами или пробелами.
  3. Сложные паттерны: Данные имеют переменную структуру (например, извлечение номера заказа из лога «Заказ №123 оформлен»).

Совет по производительности: Если таблица содержит более 10 000 строк, избегайте сложных цепочек формул в Excel — это замедлит файл. В таких случаях выгрузите данные и обработайте их скриптом на Python или запросом в базе данных.

Извлечение данных из одной строки (ячейки)

Когда целевая информация находится внутри текста одной ячейки, применяются функции манипуляции строками.

Работа с позициями символов

Используется, когда известна точная длина или позиция искомого фрагмента.

  • Excel / Google Таблицы: Функция ПСТР (или MID в англ. версии).
    • Синтаксис: =ПСТР(текст; начальная_позиция; количество_символов)
    • Пример: Извлечь 3 символа, начиная с 5-го: =ПСТР(A2; 5; 3)
  • SQL: Функция SUBSTRING.
    • Пример: SELECT SUBSTRING(column_name FROM 5 FOR 3) FROM table;
  • Python: Срез строки (slicing).
    • Пример: result = text[4:7] (индексация начинается с 0).

Разбиение по разделителям

Актуально для списков, тегов или составных значений (Имя;Фамилия).

  • Excel 365: Функция ТЕКСТРАЗД (TEXTSPLIT).
    • Пример: =ИНДЕКС(ТЕКСТРАЗД(A2; ","), 2) — вернет второй элемент после запятой.
  • Google Таблицы: Функция SPLIT в связке с INDEX.
    • Пример: =INDEX(SPLIT(A2; ","), 1, 2)
  • Python (Pandas): Метод str.split.
    • Пример: df['col'].str.split(',', expand=True)[1]

Осторожно с пробелами: При разбиении по разделителям часто остаются лишние пробелы. Всегда оборачивайте результат в функцию СЖПРОБЕЛЫ (Excel) или TRIM (SQL/Python), чтобы избежать ошибок при дальнейшей обработке.

Использование регулярных выражений

Незаменимы, когда структура строки сложная и не поддается простому разбиению.

  • Google Таблицы: Функция REGEXEXTRACT.
    • Пример: Извлечь цифры из текста «Артикул: 4589»: =REGEXEXTRACT(A2; "\d+")
  • Excel: Функция REGEX.EXTRACT (доступна в новых версиях) или надстройки.
  • Python: Модуль re.
    • Пример: re.search(r'\d+', text).group()

Обработка целых столбцов таблиц

При работе со столбцами задача масштабируется: нужно применить логику извлечения ко всем строкам одновременно.

Массивы формул

Вместо протягивания формулы вниз используйте массивные вычисления.

  • Google Таблицы: Оборачивайте логику в ARRAYFORMULA.
    • Пример: =ARRAYFORMULA(IF(B2:B=""; ""; MID(B2:B; 2; 5))) — автоматически применит извлечение ко всему столбцу B.
  • Excel: Динамические массивы работают автоматически при использовании функций вроде ТЕКСТРАЗД, возвращая результат в соседние ячейки («проливание» данных).

Агрегация и фильтрация в SQL

Если данные хранятся в базе, извлечение происходит на уровне запроса.

-- Извлечь первые 10 символов описания только для активной категории
SELECT SUBSTRING(description, 1, 10) AS short_desc
FROM products
WHERE category = 'Electronics';

Для объединения извлеченных частей обратно в строку используйте STRING_AGG (PostgreSQL/SQL Server) или GROUP_CONCAT (MySQL).

Векторизация в Python (Pandas)

Библиотека Pandas позволяет обрабатывать миллионы строк за секунды благодаря векторизации.

import pandas as pd

# Предположим, в колонке 'info' хранится текст "id:123;date:2024"
# Извлекаем только ID с помощью регулярного выражения для всего столбца
df['order_id'] = df['info'].str.extract(r'id:(\d+)')

# Разбиваем сложный столбец на несколько новых
df[['city', 'street']] = df['address'].str.split(', ', expand=True)

Сравнение инструментов для разных задач

ЗадачаЛучший инструментПочему
Быстрый разбор 10–50 строкExcel / Google ТаблицыНе требует программирования, визуальный контроль.
Сложный паттерн (логи, смешанный текст)Google Таблицы (REGEX) или PythonМощные движки регулярных выражений.
Обработка >100 000 строкPython (Pandas) или SQLВысокая скорость, низкое потребление памяти.
Автоматизация отчетовPythonВозможность сохранить скрипт и запускать по расписанию.

Частые ошибки при парсинге

  1. Игнорирование пустых значений: Формулы могут выдавать ошибки #ЗНАЧ! или NaN, если в ячейке пусто. Всегда добавляйте проверки (например, ЕСЛИ(ЕПУСТО(...))).
  2. Неучет региональных настроек: В русском Excel разделитель аргументов — точка с запятой (;), в английском — запятая (,). Это частая причина поломки формул при копировании.
  3. «Магические числа» в коде: Использование жестких номеров позиций (например, брать символы с 5 по 10) опасно, если формат данных чуть изменится. Лучше искать по маркеру (разделителю).
  4. Кодировка: При экспорте из базы в CSV и последующей обработке в скриптах могут возникать проблемы с кириллицей. Используйте кодировку UTF-8.

FAQ

Как извлечь текст между двумя скобками? В Google Таблицах используйте: =REGEXEXTRACT(A1; "\((.*?)\)"). В Excel newer versions: =REGEX.EXTRACT(A1; "\((.*?)\)").

Можно ли извлечь данные из нескольких несмежных столбцов в одну ячейку? Да. В Excel используйте СЦЕПИТЬ или оператор &: =A2 & " " & C2. В Python: df['new'] = df['col1'] + " " + df['col3'].

Что делать, если разделитель встречается в самом тексте? Используйте ограничение на количество разбиений (аргумент limit в функциях split) или более строгие регулярные выражения, которые учитывают контекст (например, разделитель только если он окружен пробелами).