Почему стандартные инструменты Excel не всегда справляются с разделением данных
Вы когда-нибудь сталкивались с ситуацией, когда в одной ячейке Excel смешаны текст и цифры — например, Товар123, Артикул 4567 или 20кг яблок? Вручную разносить такие данные по разным столбцам — утомительно, особенно если строк тысячи. К сожалению, стандартный инструмент Текст по столбцам часто даёт сбой: он не распознаёт переменное количество символов, игнорирует пробелы как разделители или портит форматирование чисел (превращая 00123 в 123).
В этой статье мы разберём 5 надёжных способов отделить цифры от текста в Excel — от простых формул до автоматизации через Power Query и VBA. Вы узнаете, как сохранить ведущие нули, обработать данные с нестандартными разделителями (тире, скобки, запятые) и избежать ошибок при работе с большими массивами. Все методы протестированы на Excel 2010–2023 и Office 365, включая веб-версию.
Прежде чем переходить к инструкциям, ответьте на вопрос: какой тип данных вам нужно разделить?
Способ 1: Формулы для разделения текста и чисел (без макросов)
Если вам нужно однократно разделить данные и не хочется возиться с настройками, формулы — самый быстрый вариант. Они работают даже в защищённых файлах и не требуют прав на редактирование макросов. Ниже приведены универсальные формулы для разных сценариев.
1. Цифры в конце текста (например, Товар123)
Используйте комбинацию функций ЛЕВСИМВ, ПСТР и ДЛСТР:
- 🔹 Для извлечения текста:
=ЛЕВСИМВ(A1;НАЙТИ(МИН(ЕСЛИОШИБКА(НАЙТИ(СТРОКА(0;9);A1);""));A1)-1) - 🔹 Для извлечения чисел:
=ПСТР(A1;НАЙТИ(МИН(ЕСЛИОШИБКА(НАЙТИ(СТРОКА(0;9);A1);""));A1);99)
2. Цифры в начале текста (например, 123Товар)
Здесь поможет функция ПРАВСИМВ:
- 🔹 Для извлечения чисел:
=ЛЕВСИМВ(A1;МАКС(ЕСЛИОШИБКА(НАЙТИ(СТРОКА(0;9);A1)&{0;1;2;3;4;5;6;7;8;9};0))) - 🔹 Для извлечения текста:
=ПРАВСИМВ(A1;ДЛСТР(A1)-МАКС(ЕСЛИОШИБКА(НАЙТИ(СТРОКА(0;9);A1)&{0;1;2;3;4;5;6;7;8;9};0))))
3. Текст и цифры с разделителем (пробел, тире, запятая)
Для данных вида Артикул-4567 или 20 кг используйте:
- 🔹 Разделение по пробелу:
=ЛЕВСИМВ(A1;НАЙТИ(" ";A1)-1) // текст=ПРАВСИМВ(A1;ДЛСТР(A1)-НАЙТИ(" ";A1)) // цифры
- 🔹 Разделение по тире/запятой: замените
" "на"-"или",".
Исправлены опечатки в ячейках (лишние пробелы, символы)
Формат ячеек с результатом — "Общий" или "Текст"
Для чисел с ведущими нулями выбран формат "Текст"
Формулы скопированы без лишних пробелов-->
Способ 2: Инструмент "Текст по столбцам" — когда он работает
Встроенный инструмент Текст по столбцам (Данные → Текст по столбцам) подходит для структурированных данных с чёткими разделителями. Например, если у вас в ячейке Яблоки, 5 кг, 200 руб, его можно разделить по запятым. Однако для смешанных данных (например, Товар123) он бесполезен.
Пошаговая инструкция:
- Выделите столбец с данными.
- Перейдите в
Данные → Текст по столбцам. - Выберите Формат данных:
- 📌 С разделителями — если есть запятые, точки с запятой, пробелы.
- 📌 Фиксированная ширина — если текст и цифры всегда на одних и тех же позициях.
Что делать, если "Текст по столбцам" не разделяет данные правильно?
Проблема часто в невидимых символах (табуляция, неразрывный пробел). Попробуйте:
1. Замените все пробелы на стандартные: =ПОДСТАВИТЬ(A1;СИМВОЛ(160);" ").
2. Используйте Power Query (см. Способ 4).
3. Примените формулы из Способа 1 для "грязных" данных.
| Исходные данные | Разделитель | Результат (столбец 1) | Результат (столбец 2) | Применяемый метод |
|---|---|---|---|---|
Артикул 4567 |
Пробел | Артикул |
4567 |
Текст по столбцам |
Товар123 |
Нет | Товар |
123 |
Формулы (Способ 1) |
20кг_яблок |
Нижнее подчёркивание | 20кг |
яблок |
Текст по столбцам |
A-12/B-34 |
Сложный | A-12 |
B-34 |
Power Query |
⚠️ Внимание: Инструмент Текст по столбцам удаляет ведущие нули в числовых значениях. Чтобы сохранить их, перед разделением отформатируйте столбец как "Текст" или используйте формулы.
Способ 3: Функция ПОИСКПОЗ для сложных шаблонов
Если ваши данные следуют определённому шаблону (например, Р-12345, где Р- — префикс, а 12345 — номер), функция ПОИСКПОЗ поможет извлечь цифры независимо от их позиции. Этот метод полезен для обработки серийных номеров, артикулов или кодов.
Пример 1: Извлечение чисел после префикса
Допустим, у вас в ячейке A1 значение PRD-00456, и нужно вытащить 00456:
=ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСКПОЗ(1;--(КОДСИМВ(ЛЕВСИМВ(A1;СТРОКА(1;10)))>47);0))
Формула ищет первую цифру в строке и возвращает всё, что идёт после неё.
Пример 2: Извлечение текста до первого числа
Для обратной задачи (получить PRD- из PRD-00456):
=ЛЕВСИМВ(A1;ПОИСКПОЗ(1;--(КОДСИМВ(ЛЕВСИМВ(A1;СТРОКА(1;10)))>47);0)-1)
Эти формулы работают даже если количество цифр или символов префикса варьируется (например, PRD-456 vs PRODUCT-0012345).
Способ 4: Power Query — автоматическое разделение для больших файлов
Если у вас тысячи строк и нужно разделить данные регулярно, Power Query (доступен в Excel 2016+ и Office 365) сэкономит часы работы. Этот инструмент позволяет создавать многоступенчатые правила обработки, которые обновляются при изменении исходных данных.
Пошаговая инструкция:
- Выделите ваш диапазон и перейдите в
Данные → Получить данные → Из таблицы/диапазона. - В открывшемся редакторе Power Query выберите столбец с данными.
- Перейдите на вкладку
Преобразоватьи выберите:- 🔧 Разделить столбец → По разделителю — если есть чёткий разделитель (пробел, запятая).
- 🔧 Разделить столбец → По количеству символов — если цифры всегда на одних и тех же позициях.
- 🔧 Извлечь → Текст до/после разделителя — для гибкого извлечения.
A12B34) используйте настраиваемый столбец с формулой на языке M:
= Text.Select([Column1],{"0".."9"}) // извлекает только цифры
= Text.Remove([Column1],{"0".."9"}) // извлекает только текст
Закрыть и загрузить, чтобы вернуть данные в Excel.Power Query сохраняет все шаги преобразования, поэтому при обновлении исходных данных достаточно кликнуть Обновить все на вкладке Данные.
⚠️ Внимание: При работе с Power Query не изменяйте исходный диапазон после загрузки данных. Добавление/удаление строк может сломать связь. Вместо этого обновите запрос через Данные → Обновить все.
Способ 5: VBA-макрос для автоматизации (для опытных пользователей)
Если вам нужно разделять данные ежедневно или обрабатывать файлы по шаблону, макрос на VBA ускорит процесс в 10 раз. Ниже приведён универсальный код, который разделяет текст и цифры в выделенном диапазоне, сохраняя ведущие нули.
Код макроса:
Sub SplitTextAndNumbers()
Dim rng As Range, cell As Range
Dim i As Integer, j As Integer, k As Integer
Dim str As String, num As String
Set rng = Selection
Application.ScreenUpdating = False
For Each cell In rng
str = "" : num = ""
For i = 1 To Len(cell.Value)
If IsNumeric(Mid(cell.Value, i, 1)) Then
num = num & Mid(cell.Value, i, 1)
Else
str = str & Mid(cell.Value, i, 1)
End If
Next i
cell.Offset(0, 1).Value = str
cell.Offset(0, 2).Value = num
Next cell
Application.ScreenUpdating = True
MsgBox "Готово! Текст и цифры разделены.", vbInformation
End Sub
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите столбец с данными в Excel.
- Запустите макрос (
F5или черезРазработчик → Макросы). - 🚫 Потеря ведущих нулей: всегда форматируйте столбец с результатом как "Текст" до применения формул или инструмента
Текст по столбцам. - 🚫 Ошибка #ЗНАЧ! в формулах: проверьте, нет ли в данных пустых ячеек или символов, которые формула не ожидает (например, буквы
Овместо цифры0). - 🚫 Неправильное разделение по пробелам: используйте
=ПОДСТАВИТЬ(A1;СИМВОЛ(160);" "), чтобы заменить неразрывные пробелы на обычные. - 🚫 Макрос не работает: убедитесь, что в настройках Excel включена поддержка макросов (
Файл → Параметры → Центр управления безопасностью → Параметры центра... → Включить все макросы). - 🚫 Power Query не обновляет данные: проверьте, что исходный диапазон не был переименован или удалён. Обновите связь через
Данные → Связи. - 🔹 Формулы: используйте
=REGEXEXTRACT(A1; "[^\d]+")для текста и=REGEXEXTRACT(A1; "\d+")для чисел. - 🔹 Инструмент
Данные → Разделить текст на столбцы(аналогТекст по столбцамв Excel). - 🔹 Apps Script (аналог VBA) для автоматизации.
Макрос создаст два новых столбца справа от выделенного: в первом будет текст, во втором — цифры. Для обработки данных с разделителями (например, Товар - 123) модифицируйте строку с условием If IsNumeric(...).
Как модифицировать макрос для данных с пробелами?
Замените блок проверки на:
If Mid(cell.Value, i, 1) = " " Then
' Разделитель найден - остаток строки в num
num = Mid(cell.Value, i + 1)
Exit For
Else
str = str & Mid(cell.Value, i, 1)
End If
Это разделит Товар 123 на Товар и 123.
Типичные ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при разделении текста и чисел. Вот 5 самых распространённых ошибок и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Цифры превращаются в даты (например, 1-12 → 1 дек) |
Excel автоматически преобразует числа в формат даты. | Отформатируйте столбец как "Текст" перед разделением. |
| Формулы возвращают #ЧИСЛО! | В данных есть непечатаемые символы или ошибки. | Очистите данные функцией =ЧИСТ(A1). |
| Текст и цифры не разделяются | Нет чёткого разделителя или шаблона. | Используйте Power Query с настраиваемыми правилами. |
Макрос выдаёт ошибку Run-time error '13' |
В данных есть пустые ячейки или несовместимые типы. | Добавьте проверку If cell.Value <> "" Then в начало цикла. |
FAQ: Ответы на частые вопросы
Можно ли разделить текст и цифры в Google Таблицах?
Да, в Google Sheets работают аналогичные методы:
Отличие от Excel: в Google Sheets нет Power Query, но есть функция SPLIT для разделителей.
Как разделить данные, если цифры и текст чередуются (например, A1B2C3)?
Для таких случаев подойдёт:
- Формулы: используйте
=СЦЕПИТЬ(ЕСЛИ(ЕЧИСЛО(ПСТР(A1;СТРОКА(1:10);1));"";ПСТР(A1;СТРОКА(1:10);1)))для текста и аналогичную для чисел с условиемЕЧИСЛО. - Power Query: примените настраиваемый столбец с кодом на M:
= Text.Select([Column1],{"A".."Z"}) // текст= Text.Select([Column1],{"0".."9"}) // цифры
Почему после разделения цифры отображаются как ######?
Это означает, что ширина столбца недостаточна для отображения числа. Растяните столбец или измените формат ячейки на "Текст". Также проверьте, не превышает ли число 15 знаков (ограничение Excel для точного отображения).
Как сохранить ведущие нули при разделение через "Текст по столбцам"?
Перед использованием инструмента:
- Выделите исходный столбец.
- Нажмите
Ctrl + 1(или правая кнопка →Формат ячеек). - Выберите формат "Текст".
- Примените
Текст по столбцами на последнем шаге снова выберите формат "Текст" для нового столбца.
Можно ли разделить данные в защищённом файле Excel?
Да, но с ограничениями:
- 🔹 Формулы будут работать, если ячейки не заблокированы.
- 🔹
Текст по столбцамтребует прав на редактирование структуры. - 🔹 Макросы не запустятся, если файл открыт в режиме "Только чтение".
- 🔹 Power Query работает, если разрешены внешние связи.
Если файл защищён паролем, попросите владельца временно снять защиту или скопируйте данные в новый файл.