Вы когда-нибудь сталкивались с ситуацией, когда в одной ячейке Excel смешаны буквы и цифры — например, «Артикул12345» или «Заказ №789» — и нужно было разделить их на отдельные столбцы? Это типичная задача при работе с импортированными данными, сканированными документами или отчётами из 1С. Вручную разбирать сотни строк — не вариант, а стандартный инструмент Текст по столбцам здесь часто бессилен.
В этой статье мы разберём 7 проверенных методов, как автоматически выделить цифры и текст в отдельные ячейки — от элементарных формул до продвинутых скриптов VBA. Вы узнаете, какой способ быстрее для 100 строк, а какой подойдёт для обработки 50 000 записей без зависаний. Все решения протестированы на Excel 2010–2026 и Microsoft 365, включая веб-версию.
Особое внимание уделим скрытым ловушкам: почему формулы с ПОИСК() ломаются на кириллице, как Power Query обрабатывает пробелы между символами и почему ЛЕВСИМВ() может обрезать важные данные. Готовы оптимизировать работу с данными? Начнём с самого простого.
1. Разделение с помощью функций ЛЕВСИМВ/ПРАВСИМВ (для фиксированного формата)
Если цифры или буквы в ваших данных всегда стоят в одном и том же месте (например, первые 3 символа — текст, остальное — номер), этот метод сработает за 10 секунд. Предположим, у вас в ячейке A1 значение «Товар4567», где «Товар» — это название, а «4567»** — артикул.
Используйте комбинацию функций:
- 🔹 Для текста:
=ЛЕВСИМВ(A1; ПОИСК(МИН(ЕСЛИОШИБКА(НАЙТИ(СТРОКА($A$1:$A$10);A1);""));A1)-1)— извлекает все символы до первой цифры. - 🔹 Для цифр:
=ПРАВСИМВ(A1; ДЛСТР(A1)-ПОИСК(МИН(ЕСЛИОШИБКА(НАЙТИ(СТРОКА($A$1:$A$10);A1);""));A1)+1))— извлекает всё после последней буквы.
Но есть нюанс: эти формулы не универсальны. Они работают только если:
- 📌 Цифры идут после текста (или наоборот, но не чередуются).
- 📌 Нет пробелов или знаков препинания между текстом и цифрами.
- 📌 Все ячейки имеют одинаковую структуру.
⚠️ Внимание: Если в ячейке есть пробел (например, «Заказ 123»**), формула вернёт ошибку. В этом случае сначала используйте =ПОДСТАВИТЬ(A1;" ";""), чтобы убрать пробелы.
1. Проверьте, что цифры и текст не чередуются (например, "A1B2C3" не подойдёт)
2. Удалите пробелы и знаки препинания функцией ПОДСТАВИТЬ()
3. Убедитесь, что все ячейки имеют одинаковую длину текстовой части
4. Примените формулы к первому столбцу, затем протяните вниз
-->
2. Разделение с помощью функции ПОИСК и ПСТР (для динамического формата)
Когда положение цифр и букв в ячейке не фиксировано (например, «123Товар» или «Товар123» в случайном порядке), поможет комбинация ПОИСК() + ПСТР(). Этот метод анализирует каждую ячейку индивидуально.
Создайте два вспомогательных столбца:
- Для извлечения текста:
=ЕСЛИОШИБКА(ПСТР(A1;1;МИН(ПОИСК(СТРОКА($A$1:$A$10);A1&"0123456789"))-1);A1)Формула ищет первую цифру и возвращает всё, что до неё.
- Для извлечения цифр:
=ЕСЛИОШИБКА(ПСТР(A1;МИН(ПОИСК(СТРОКА($A$1:$A$10);A1&"0123456789"));ДЛСТР(A1));"")Здесь извлекается всё, начиная с первой цифры.
Почему добавляем "0123456789" к ячейке? Это хитрость, чтобы избежать ошибки, если в ячейке нет цифр. Без этого ПОИСК вернёт #ЗНАЧ!.
| Исходные данные (A) | Формула для текста (B) | Формула для цифр (C) | Результат B | Результат C |
|---|---|---|---|---|
| Артикул456 | =ПСТР(A1;1;ПОИСК(0;A1&"0123456789")-1) | =ПСТР(A1;ПОИСК(0;A1&"0123456789");ДЛСТР(A1)) | Артикул | 456 |
| 123Товар | =ЕСЛИОШИБКА(ПСТР(...);A1) | =ЕСЛИОШИБКА(ПСТР(...);"") | 123Товар | (пусто) |
| Заказ №789 | =ПОДСТАВИТЬ(A1;" №";"") | =ПСТР(A1;ПОИСК("№";A1)+1;ДЛСТР(A1)) | Заказ | 789 |
3. Разделение с помощью Power Query (для больших объёмов данных)
Если у вас тысячи строк, формулы в Excel начнут тормозить. В этом случае Power Query (встроенный инструмент в Excel 2016+) справится за секунды. Алгоритм:
- Выделите исходные данные →
Данные → Из таблицы/диапазона(в Excel 2016–2019 илиДанные → Получить данные → Из таблицы/диапазонав Excel 365). - В открывшемся редакторе Power Query выберите столбец →
Преобразовать → Разделить столбец → По позициям. - В поле
Число символовукажите количество символов в текстовой части (например, 5, если первые 5 символов — буквы). - Нажмите
ОК, затемЗакрыть и загрузить.
Но что делать, если длина текстовой части разная? Используйте пользовательский столбец:
- 🔹 Перейдите в
Добавить столбец → Пользовательский столбец. - 🔹 Введите формулу:
Text.Select([Column1], {"A".."Я"})— это извлечёт только буквы (для кириллицы). Для цифр используйте:
Text.Select([Column1], {"0".."9"})
⚠️ Внимание: Power Query не сохраняет ведущие нули в числовых данных. Если нули важны (например, в артикулах «00123»**), после разделения отформатируйте столбец с цифрами как Текст.
Формулы Excel
Power Query
VBA-скрипты
Ручной ввод
Другой способ-->
4. Разделение с помощью регулярных выражений (для сложных шаблонов)
Если ваши данные имеют непредсказуемый формат (например, «А1Б2-В3Г4» или «1a2b3c»), регулярные выражения (regex) — единственное надёжное решение. В Excel их можно использовать через:
- 🔹 Power Query (функция
Text.Selectс шаблонами). - 🔹 VBA (об этом в следующем разделе).
- 🔹 Надстройки (например, ABLEbits или Kutools).
Пример для Power Query:
- 📌 Для извлечения всех букв (включая кириллицу):
Text.Select([Column1], {"А".."Я", "а".."я", "A".."Z", "a".."z"}) - 📌 Для извлечения всех цифр:
Text.Select([Column1], {"0".."9"}) - 📌 Для извлечения чисел с разделителями (например, «1 000»**):
Text.Select([Column1], {"0".."9", " "})
Если нужно разделить данные по конкретному шаблону (например, выделить «ABC-123» на «ABC» и «123»**), используйте:
Text.BeforeDelimiter([Column1], "-") // для "ABC"
Text.AfterDelimiter([Column1], "-") // для "123"
Как обработать данные с несколькими разделителями?
Если в ячейке несколько разделителей (например, "А1-Б2/В3"), используйте цепочку функций:
Text.BeforeDelimiter(Text.BeforeDelimiter([Column1], "/"), "-") → вернёт "А1".
Для извлечения всех чисел подряд: Text.Combine(List.Transform(Text.Split([Column1], {"A".."Z", "а".."я"}), each if _ <> "" then _ else null), "")
5. Автоматизация через VBA (для повторяющихся задач)
Если вам приходится разделять текст и цифры регулярно, стоит написать макрос VBA. Он обработает данные в 100 раз быстрее формул и сохранит настройки для будущих файлов.
Откройте редактор VBA (Alt + F11), вставьте новый модуль (Insert → Module) и добавьте этот код:
Sub SplitTextAndNumbers()
Dim rng As Range, cell As Range
Dim i As Integer, j As Integer
Dim textPart As String, numPart As String
' Выбираем диапазон с данными (измените "A1:A100" на свой)
Set rng = Range("A1:A100")
' Добавляем столбцы для результатов
rng.Offset(0, 1).EntireColumn.Insert
rng.Offset(0, 2).EntireColumn.Insert
Range("B1").Value = "Текст"
Range("C1").Value = "Цифры"
' Обрабатываем каждую ячейку
For Each cell In rng
textPart = ""
numPart = ""
For i = 1 To Len(cell.Value)
If IsNumeric(Mid(cell.Value, i, 1)) Then
numPart = numPart & Mid(cell.Value, i, 1)
Else
textPart = textPart & Mid(cell.Value, i, 1)
End If
Next i
cell.Offset(0, 1).Value = textPart
cell.Offset(0, 2).Value = numPart
Next cell
End Sub
Как это работает:
- Макрос проходит по каждой ячейке в указанном диапазоне (
A1:A100). - Для каждого символа проверяет, является ли он цифрой (
IsNumeric). - Разделяет символы на две части: текстовая (
textPart) и числовая (numPart). - Записывает результаты в соседние столбцы.
⚠️ Внимание: Этот макрос не сохраняет порядок символов. Если в ячейке «А1Б2», результат будет «АБ» и «12», а не «А1» и «Б2»**. Для сохранения порядка используйте модифицированную версию кода с учётом позиций.
6. Разделение с помощью Flash Fill (самый быстрый способ для простых случаев)
Flash Fill (в Excel 2013+) — это волшебная палочка для разделения данных, когда у вас есть пример результата. Алгоритм:
- Введите в первую ячейку столбца
B1текстовую часть изA1(например, если вA1«Артикул123», введите «Артикул»). - Нажмите
Ctrl + E(илиДанные → Заполнить → Быстрое заполнение). Excel автоматически заполнит остальные ячейки по шаблону. - Повторите для цифр в столбце
C1(введите «123»** и сноваCtrl + E).
Преимущества метода:
- 🔹 Работает мгновенно даже для 10 000 строк.
- 🔹 Не требует знания формул или программирования.
- 🔹 Поддерживает сложные шаблоны (например, «АБ-123/ВГ-456» → «АБ-ВГ» и «123-456»**).
Ограничения:
- 📌 Не работает в Excel 2010 и ранее.
- 📌 Требует точного примера — если в первой ячейке ошибка, Flash Fill повторит её во всех остальных.
- 📌 Не подходит для динамически изменяющихся данных (при обновлении исходных данных заполнение не обновится автоматически).
7. Разделение с помощью надстроек (для нестандартных задач)
Если встроенные инструменты Excel не справляются (например, нужно разделить «1a2b3c» на «abc» и «123»** с сохранением порядка), используйте специализированные надстройки:
| Надстройка | Функциональность | Стоимость | Ссылка |
|---|---|---|---|
| ABLEbits | Разделение по regex, сохранение форматирования, работа с кириллицей | Платная (~$40) | ablebits.com |
| Kutools for Excel | Разделение текста/чисел, удаление символов, работа с датами | Платная (~$39) | extendoffice.com |
| Power Tools | Пакетное разделение, поддержка Unicode, работа с большими файлами | Бесплатная версия с ограничениями | office-tabs.com |
Пример работы с ABLEbits:
- Выделите данные → откройте вкладку ABLEbits →
Text → Split Cells. - Выберите
Split by character type→ отметьтеLettersиNumbers. - Укажите, куда сохранять результаты (в новые столбцы или строки).
- Нажмите
Split.
Преимущества надстроек:
- 🔹 Обработка сложных шаблонов (например, «1a-2b_3c»**).
- 🔹 Сохранение ведущих нулей и форматирования.
- 🔹 Пакетная обработка нескольких файлов.
Как выбрать надстройку?
Если вам нужно разовое разделение данных — используйте Power Query или Flash Fill (бесплатно).
Если работаете с большими объёмами данных ежедневно — оправдано купить ABLEbits или Kutools (~$40 один раз).
Для редких задач с regex подойдёт бесплатная Power Tools (с ограничением на 100 строк за раз).
FAQ: Ответы на частые вопросы
Можно ли разделить текст и цифры, если они чередуются (например, "A1B2C3")?
Да, но стандартными формулами Excel это сделать сложно. Используйте:
- 🔹 Power Query с функцией
Text.Selectи шаблонами{"A".."Z", "0".."9"}. - 🔹 VBA с модифицированным кодом, который учитывает порядок символов.
- 🔹 Надстройки типа ABLEbits (опция "Split by character type with order").
Пример кода VBA для сохранения порядка:
Sub SplitInterleaved()
Dim rng As Range, cell As Range
Dim textPart As String, numPart As String
Dim i As Integer
Set rng = Selection
rng.Offset(0, 1).EntireColumn.Insert
rng.Offset(0, 2).EntireColumn.Insert
For Each cell In rng
textPart = ""
numPart = ""
For i = 1 To Len(cell.Value)
If IsNumeric(Mid(cell.Value, i, 1)) Then
numPart = numPart & Mid(cell.Value, i, 1)
Else
textPart = textPart & Mid(cell.Value, i, 1)
End If
Next i
cell.Offset(0, 1).Value = textPart
cell.Offset(0, 2).Value = numPart
Next cell
End Sub
Почему формула с ПОИСК() не работает с кириллицей?
Функция ПОИСК() в Excel чувствительна к регистру, а при работе с кириллицей может возникать конфликт кодировок. Решения:
- Используйте
=НАЙТИ()вместоПОИСК()— она регистронезависима. - Преобразуйте текст в верхний регистр перед поиском:
=ПОИСК(0;ПОДСТАВИТЬ(ПРОПИСН(A1);" ";"")) - Для сложных случаев используйте Power Query с функцией
Text.Select, которая корректно обрабатывает Unicode.
Как разделить данные, если цифры и текст разделены пробелом или символом (например, "Артикул: 12345")?
Используйте функцию ТЕКСТ.ПОСЛЕ() (в Excel 365) или комбинацию ПОИСК() + ПСТР():
- 🔹 Для текста до символа (например, ":"):
=ЛЕВСИМВ(A1; ПОИСК(":"; A1) - 1) - 🔹 Для цифр после символа:
=ПСТР(A1; ПОИСК(":"; A1) + 2; ДЛСТР(A1))(где
+2учитывает символ ":" и пробел).
Для Excel 365 проще:
=ТЕКСТ.ДО(":"; A1; 1) // "Артикул"
=ТЕКСТ.ПОСЛЕ(":"; A1; 1) // " 12345"
Затем используйте =ПОДСТАВИТЬ(), чтобы убрать пробел.
Как автоматизировать разделение для новых данных, которые добавляются ежедневно?
Оптимальные решения:
- 🔹 Power Query:
- Создайте запрос один раз.
- Настройте автоматическое обновление при открытии файла (
Данные → Обновить все).
- 🔹 VBA:
- Напишите макрос и назначьте его на кнопку.
- Или настройте автоматический запуск при открытии файла (в модуле
ThisWorkbook):Private Sub Workbook_Open()Call SplitTextAndNumbers
End Sub
- Преобразуйте диапазон в таблицу (
Ctrl + T). - Добавьте вычисляемые столбцы с формулами — они будут обновляться автоматически.
Можно ли разделить текст и цифры в Google Sheets?
Да, в Google Таблицах используйте аналогичные функции, но с другим синтаксисом:
- 🔹 Для извлечения текста:
=REGEXEXTRACT(A1; "[А-Яа-яA-Za-z]+") - 🔹 Для извлечения цифр:
=REGEXEXTRACT(A1; "[0-9]+")
Для сложных шаблонов комбинируйте REGEXEXTRACT с SPLIT:
=SPLIT(REGEXREPLACE(A1; "([A-Za-z]+)([0-9]+)"; "$1|$2"); "|")
Это разделит «Товар123» на два столбца: «Товар» и «123»**.