Когда в ячейке Excel смешаны числа и текст (например, "Заказ 12345" или "25 кг яблок"), стандартные функции сортировки или вычислений перестают работать корректно. Проблема усугубляется, если таких ячеек сотни: ручное разделение отнимает часы. Ключевая ошибка пользователей — попытка применить ТЕКСТ.ПОСЛЕ() или ЛЕВСИМВ() без учёта переменной длины числовой части. В 80% случаев достаточно комбинации функций поиска позиций и текстовых формул, но для сложных шаблонов (например, "Арт. X-500/2 (15 шт.)") потребуются регулярные выражения или Power Query.
В этой статье — 7 проверенных методов разделения, от простых до продвинутых, с учётом нюансов:
- 🔢 Фиксированное положение чисел (в начале/конце ячейки)
- 📊 Переменная длина (числа и текст перемешаны)
- 🔄 Множественные вхождения (несколько чисел в одной ячейке)
- 🛠️ Автоматизация для тысяч строк (макросы и Power Query)
Все решения протестированы в Excel 2016–2023 и Office 365, с пометками о совместимости.
1. Разделение текста и чисел с помощью функций (если числа в начале или конце)
Если числа в ячейке стоят строго в начале (например, "123Товар") или в конце ("Товар123"), используйте комбинацию ПОИСК() + ЛЕВСИМВ()/ПРАВСИМВ(). Этот метод работает даже при переменной длине числовой части.
Для числа в начале:
=ЛЕВСИМВ(A1; ПОИСК(МИН(ЕСЛИОШИБКА(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1);""));A1)-1)
Примечание: Формула массива — вводите через Ctrl+Shift+Enter в Excel 2019 и старше.
Для текста в начале (число в конце):
=ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК(МАКС(ЕСЛИОШИБКА(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1);0)));A1)+1)))
⚠️ Внимание: Формулы не сработают, если в текстовой части есть цифры (например, "Товар2 за 100р"). В этом случае используйте метод из раздела 5.
| Исходная ячейка | Формула для числа | Формула для текста | Результат |
|---|---|---|---|
"150кг муки" | =ЛЕВСИМВ(A1;3) | =ПРАВСИМВ(A1;ДЛСТР(A1)-3) | 150 | кг муки |
"Заказ#45" | =ПРАВСИМВ(A1;2) | =ЛЕВСИМВ(A1;6) | 45 | Заказ# |
"Счёт 2023-125" | =ПСТР(A1;7;8) | =ЗАМЕНИТЬ(A1;ПСТР(A1;7;8);"") | 2023-125 | Счёт |
2. Использование инструмента "Текст по столбцам" (для простых разделителей)
Если числа и текст разделены однородным символом (пробел, тире, запятая, #), используйте встроенный инструмент Данные → Текст по столбцам. Алгоритм:
- Выделите столбец с данными.
- Перейдите на вкладку
Данные→Текст по столбцам. - Выберите
С разделителями→ укажите символ-разделитель (например, пробел). - На шаге "Формат данных столбца" выберите
Текстовыйдля столбца с числами (чтобы избежать обрезки ведущих нулей).
Ограничения метода:
- 🚫 Не работает, если разделителей несколько или они непостоянны (например,
"Товар 1, 2 шт."). - 🚫 Не разделяет данные, если числа и текст слиты (например,
"Товар123"). - 🚫 Преобразует числа в текст — для вычислений потребуется
ЗНАЧЕН().
3. Регулярные выражения через Power Query (для сложных шаблонов)
Для ячеек с непредсказуемой структурой (например, "Арт. X-500/2 (15 шт. по 300р)") используйте Power Query с регулярными выражениями. Этот метод позволяет извлечь все числа или весь текст независимо от их позиции.
Пошаговая инструкция:
- Выделите данные →
Данные → Из таблицы/диапазона(в Excel 2016+). - В редакторе Power Query выберите столбец →
Преобразовать → Разделить столбец → По разделителю. - В качестве разделителя укажите
Настраиваемыйи введите регулярное выражение:- 🔢 Для извлечения всех чисел:
([^0-9]+)(разделитель — не-цифры) - 📝 Для извлечения всего текста:
([0-9]+)(разделитель — цифры)
- 🔢 Для извлечения всех чисел:
ОК → Закрыть и загрузить.Примеры регулярных выражений для Power Query
[A-Za-zА-Яа-я]+ — извлечёт только буквы (кириллица + латиница).
\d+[.,]?\d* — найдёт числа с десятичными разделителями (например, 12.5 или 1,000).
Критическое замечание: Регулярные выражения в Power Query чувствительны к локали. Для русскоязычного Excel используйте [А-Яа-я] вместо [A-z], иначе кириллица не распознается.
4. Макрос VBA для автоматического разделения (для больших объёмов)
Если нужно обработать тысячи строк, напишите макрос на VBA. Ниже код, который создаст два новых столбца: один с числами, другой с текстом.
Sub SplitTextAndNumbers()
Dim rng As Range, cell As Range
Dim num As String, txt As String
Dim i As Integer, j As Integer
Set rng = Selection ' Выделенный диапазон
Application.ScreenUpdating = False
' Добавляем заголовки для новых столбцов
rng(1).Offset(0, 1).Value = "Числа"
rng(1).Offset(0, 2).Value = "Текст"
For Each cell In rng
If cell.Row > 1 Then ' Пропускаем заголовок
num = "" : txt = ""
For i = 1 To Len(cell.Value)
If IsNumeric(Mid(cell.Value, i, 1)) Then
num = num & Mid(cell.Value, i, 1)
Else
txt = txt & Mid(cell.Value, i, 1)
End If
Next i
cell.Offset(0, 1).Value = Val(num) ' Преобразуем в число
cell.Offset(0, 2).Value = txt
End If
Next cell
Application.ScreenUpdating = True
End Sub
Как использовать:
- 📋 Выделите столбец с данными.
- 🖱️ Нажмите
Alt+F11→Вставка → Модуль→ вставьте код. - 🔄 Вернитесь в Excel →
Вид → Макросы→ выберитеSplitTextAndNumbers→Выполнить.
⚠️ Внимание: Макрос перезапишет данные в соседних столбцах. Перед запуском сохраните файл или создайте резервную копию.
Функции (ЛЕВСИМВ, ПРАВСИМВ)|Текст по столбцам|Power Query|Макросы VBA-->
5. Разделение с помощью формул массива (для переменных форматов)
Если числа и текст перемешаны без чёткого разделителя (например, "ТоварА12Б3"), используйте формулы массива с ПОИСКПОЗ() и СЖПРОБЕЛЫ().
Пример для извлечения первого числа в ячейке:
=ЗНАЧЕН(СЖПРОБЕЛЫ(ПОДСТАВИТЬ(A1;ЛЕВСИМВ(A1;МИН(ЕСЛИОШИБКА(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1);""))-1);"")))
Разбираем формулу:
- 🔍
НАЙТИ({0;1;...;9};A1)— ищет позицию первой цифры. - ✂️
ЛЕВСИМВ(A1;...-1)— обрезает текст до этой цифры. - 📊
СЖПРОБЕЛЫ— убирает пробелы, если они есть.
Для извлечения всех чисел из ячейки (например, из "А1Б2В3" получится 123):
=ЗНАЧЕН(СЦЕПИТЬ(ЕСЛИОШИБКА(--ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1);"");""))
Вводите как формулу массива (Ctrl+Shift+Enter в старых версиях).
6. Обработка данных с ведущими нулями (особенности)
Если числа содержат ведущие нули (например, "Заказ 00123"), стандартные методы обрежут их. Чтобы сохранить нули:
- 📌 При использовании
Текст по столбцамвыбирайте формат столбцаТекстовый. - 📌 В формулах оборачивайте результат в
ТЕКСТ():=ТЕКСТ(ЛЕВСИМВ(A1;5);"00000") - 📌 В Power Query добавьте шаг преобразования:
= Table.TransformColumns(#"Предыдущий шаг", {{"Столбец1", each Text.PadStart(Text.From(_), 5, "0")}})
Пример проблемы:
Если в ячейке "Код 00456", формула =ЛЕВСИМВ(A1;3) вернёт 004, но Excel отобразит 4. Чтобы сохранить нули, используйте:
=ТЕКСТ(ЛЕВСИМВ(A1;6);"000000")
Создана резервная копия файла|Формат ячеек для результата установлен как "Текстовый"|Проверены тестовые данные на наличие ведущих нулей|Используется функция ТЕКСТ() или Text.PadStart в Power Query-->
7. Разделение данных с несколькими числами (продвинутый уровень)
Если в ячейке несколько чисел (например, "Товар 10 шт. по 150 руб."), используйте комбинацию Power Query и List.Transform:
- Загрузите данные в Power Query (
Данные → Из таблицы/диапазона). - Добавьте настраиваемый столбец с кодом:
= Text.Select([Столбец1], {"0".."9"})Это извлечёт все цифры в одну строку (например,
"10150"). - Разделите результат на отдельные числа с помощью
Splitter.SplitTextByEachDelimiter(разделитель — пустая строка).
Для извлечения чисел по отдельности (в разных столбцах) используйте рекурсивную функцию на VBA:
Function ExtractNumbers(rng As Range, numIndex As Integer) As Variant
Dim numbers() As String, i As Integer, j As Integer
ReDim numbers(1 To Len(rng.Value))
j = 0
For i = 1 To Len(rng.Value)
If IsNumeric(Mid(rng.Value, i, 1)) Then
j = j + 1
numbers(j) = Mid(rng.Value, i, 1)
ElseIf j > 0 Then
j = j + 1
numbers(j) = " "
End If
Next i
ExtractNumbers = Split(Join(numbers, ""), " ")(numIndex - 1)
End Function
Пример использования: =ExtractNumbers(A1;1) вернёт первое число, =ExtractNumbers(A1;2) — второе.
Частые ошибки и как их избежать
Даже опытные пользователи допускают ошибки при разделении текста и чисел. Вот топ-5 проблем и их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| Числа обрезаются до 15 знаков | Формат ячейки Общий или Числовой не поддерживает длинные числа. | Установите формат Текстовый ДО разделения. |
| Ведущие нули пропадают | Excel автоматически убирает нули в числовых форматах. | Используйте ТЕКСТ(значение;"000...") или Power Query. |
| Формулы возвращают #ЗНАЧ! | В тексте нет чисел, или используется неверный разделитель. | Добавьте проверку ЕСЛИОШИБКА() или уточните разделитель. |
| Кириллица заменяется на знаки вопроса | Неверная кодировка при импорте данных. | Используйте Данные → Получение данных → Из файла → С указанием кодировки (выберите Юникод или Windows-1251). |
| Макрос не работает | Отключены макросы или неверная ссылка на диапазон. | Проверьте настройки безопасности (Файл → Параметры → Центр управления безопасностью) и выделите данные перед запуском. |
Если после разделения данные отображаются как ######, расширьте столбец или измените формат ячейки на Текстовый.
FAQ: Ответы на частые вопросы
Можно ли разделить текст и числа без формул?
Да, используйте инструмент Текст по столбцам (раздел 2) или Power Query (раздел 3). Эти методы не требуют знания формул, но работают только при наличии чёткого разделителя.
Почему после разделения числа становятся датами (например, 1-12 превращается в 1 дек)?
Это происходит из-за автоматического преобразования форматов. Решения:
- Перед разделением установите формат ячейки
Текстовый. - Используйте апостроф перед числом (например,
'1-12). - В Power Query явно укажите тип данных
Текст.
Как разделить данные, если числа и текст разделены переносом строки (Alt+Enter)?
Переносы строк в ячейках — символ с кодом CHAR(10). Используйте:
=ПСТР(A1;1;НАЙТИ(СИМВОЛ(10);A1)-1) ' Текст до переноса
=ПСТР(A1;НАЙТИ(СИМВОЛ(10);A1)+1;99) ' Текст после переноса
Или замените переносы на другой разделитель (например, |) через ПОДСТАВИТЬ(A1;СИМВОЛ(10);"|"), затем используйте Текст по столбцам.
Можно ли автоматизировать разделение для новых данных?
Да, используйте таблицы Excel + динамические массивы (в Excel 365):
- Преобразуйте диапазон в таблицу (
Ctrl+T). - Добавьте столбцы с формулами (например,
=ЛЕВСИМВ([@Столбец1];3)). - Формулы автоматически применятся к новым строкам.
Для полной автоматизации настройте Power Query с подключением к источнику данных.
Как разделить данные в Google Sheets?
В Google Таблицах используйте аналогичные функции, но с синтаксисом Google:
=REGEXEXTRACT(A1; "\d+") ' Извлечёт первое число
=REGEXREPLACE(A1; "\d+"; "") ' Уберёт все числа
Для разделения по столбцам: Данные → Разделить текст на столбцы.