Как разделить числа от текста в Excel: полное руководство с примерами

Когда в ячейке 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. Перейдите на вкладку ДанныеТекст по столбцам.
  3. Выберите С разделителями → укажите символ-разделитель (например, пробел).
  4. На шаге "Формат данных столбца" выберите Текстовый для столбца с числами (чтобы избежать обрезки ведущих нулей).

Ограничения метода:

  • 🚫 Не работает, если разделителей несколько или они непостоянны (например, "Товар 1, 2 шт.").
  • 🚫 Не разделяет данные, если числа и текст слиты (например, "Товар123").
  • 🚫 Преобразует числа в текст — для вычислений потребуется ЗНАЧЕН().

3. Регулярные выражения через Power Query (для сложных шаблонов)

Для ячеек с непредсказуемой структурой (например, "Арт. X-500/2 (15 шт. по 300р)") используйте Power Query с регулярными выражениями. Этот метод позволяет извлечь все числа или весь текст независимо от их позиции.

Пошаговая инструкция:

  1. Выделите данные → Данные → Из таблицы/диапазонаExcel 2016+).
  2. В редакторе Power Query выберите столбец → Преобразовать → Разделить столбец → По разделителю.
  3. В качестве разделителя укажите Настраиваемый и введите регулярное выражение:
    • 🔢 Для извлечения всех чисел: ([^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:

    1. Загрузите данные в Power Query (Данные → Из таблицы/диапазона).
    2. Добавьте настраиваемый столбец с кодом:
      = Text.Select([Столбец1], {"0".."9"})

      Это извлечёт все цифры в одну строку (например, "10150").

    3. Разделите результат на отдельные числа с помощью 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):

    1. Преобразуйте диапазон в таблицу (Ctrl+T).
    2. Добавьте столбцы с формулами (например, =ЛЕВСИМВ([@Столбец1];3)).
    3. Формулы автоматически применятся к новым строкам.

    Для полной автоматизации настройте Power Query с подключением к источнику данных.

    Как разделить данные в Google Sheets?

    В Google Таблицах используйте аналогичные функции, но с синтаксисом Google:

    =REGEXEXTRACT(A1; "\d+")  ' Извлечёт первое число
    

    =REGEXREPLACE(A1; "\d+"; "") ' Уберёт все числа

    Для разделения по столбцам: Данные → Разделить текст на столбцы.