Как быстро отделить число от текста в Excel: от простых формул до VBA

Работа с неструктурированными данными в Microsoft Excel — одна из самых частых головных болей аналитиков и бухгалтеров. Представьте: вы получили таблицу, где в одной ячейке смешаны текст и числа — например, "Товар123", "Артикул: 45678" или "20кг яблок". Вручную разбирать сотни таких записей? Это потерянное время. К счастью, в Excel есть минимум 7 способов автоматизировать эту задачу — от элементарных функций до продвинутых макросов.

В этой статье мы разберём все актуальные методы — от текстовых функций ЛЕВСИМВ() и ПРАВСИМВ() до регулярных выражений в Power Query. Вы узнаете, как вытащить число из начала, конца или середины строки, как обработать данные с разделителями и что делать, если числа перемешаны с буквами в хаотичном порядке. А для любителей автоматизации — готовые скрипты на VBA, которые справятся с задачей за секунды.

Важно: методы работают во всех современных версиях Excel (2016–2023, Microsoft 365), но некоторые функции (например, ТЕКСТРАЗБ()) доступны только в Excel 365 и Excel 2021. Если вы используете старую версию, обратите внимание на альтернативные решения.

1. Когда числа стоят в начале или конце ячейки

Самый простой случай — когда цифры расположены строго слева или справа от текста, а между ними есть разделитель (пробел, тире, запятая). Например: "45 кг", "Артикул-12345" или "Температура: 25°C". Здесь помогут стандартные текстовые функции.

Если число находится в начале ячейки, используйте комбинацию ЛЕВСИМВ() и НАЙТИ():

=ЛЕВСИМВ(A1; НАЙТИ(" "; A1) - 1)

Эта формула ищет первый пробел в ячейке A1 и возвращает все символы слева от него. Для числа в конце подойдёт ПРАВСИМВ():

=ПРАВСИМВ(A1; ДЛСТР(A1) - НАЙТИ(" "; A1))
  • 🔢 Для чисел слева: =ЛЕВСИМВ(A1; ПОИСК("░"; ПОДСТАВИТЬ(A1; ЛЕВСИМВ(A1; СТРОКА(A:A)); ""; 1)) - 1) — если разделителя нет, но цифры идут первым блоком.
  • 📌 Для чисел справа: =ПРАВСИМВ(A1; ДЛСТР(A1) - МИН(ЕСЛИОШИБКА(НАЙТИ({0;1;2;3;4;5;6;7;8;9}; A1); "")) + 1) — универсальный вариант.
  • ⚠️ Ограничение: Формулы не работают, если в ячейке несколько чисел (например, "20кг на 5 ящиков").
⚠️ Внимание: Если в ячейке есть неразрывный пробел (вставляется через Ctrl+Shift+Пробел), функция НАЙТИ() его не увидит. Замените все пробелы на обычные через =ПОДСТАВИТЬ(A1; СИМВОЛ(160); " ").

2. Используем функцию ТЕКСТРАЗБ() для сложных случаев

В Excel 365 и Excel 2021

появилась революционная функция ТЕКСТРАЗБ() (TEXTSPLIT), которая упрощает разбор текста по разделителям. Если ваши данные имеют чёткую структуру (например, "Имя:Иван;Вес:80"), этот метод сэкономит часы работы.

Пример: разделим строку "Заказ#12345 от 01.01.2023" на номер заказа и дату:

=ТЕКСТРАЗБ(A1; {"#"; " от "}; ; ИСТИНА)

Функция вернёт массив из трёх элементов: {"Заказ"; "12345"; "01.01.2023"}. Чтобы извлечь только число, используйте:

=ЧИСЛО(ИНДЕКС(ТЕКСТРАЗБ(A1; {"#"; " от "}); ; 2))

Функция ТЕКСТРАЗБ() умеет обрабатывать несколько разделителей одновременно и игнорировать пустые ячейки (параметр ИСТИНА). Это делает её незаменимой для парсинга логов, JSON-структур или CSV-файлов с нестандартными разделителями.

Исходные данныеФормулаРезультат
"Товар:100шт;Цена:500руб"=ТЕКСТРАЗБ(A1; {":"; ";"}; ; ИСТИНА){"Товар"; "100шт"; "Цена"; "500руб"}
"ID-456_Пользователь"=ТЕКСТРАЗБ(A1; {"-"; "_"}){"ID"; "456"; "Пользователь"}
"2023/12/31_Отчёт"=ТЕКСТРАЗБ(A1; {"/"; "_"}){"2023"; "12"; "31"; "Отчёт"}
📊 Какой метод вы используете чаще для разбора текста в Excel?
Текстовые функции (ЛЕВСИМВ, ПРАВСИМВ)
Power Query
Формулы массивов (ТЕКСТРАЗБ, ФИЛЬТР)
Макросы VBA
Другой

3. Power Query: инструмент для больших данных

Если вам нужно обработать тысячи строк или данные поступают регулярно (например, из выгрузок 1С), Power Query станет вашим лучшим другом. Этот инструмент встроен в Excel с 2016 года и позволяет разбирать текст по шаблонам, использовать регулярные выражения и автоматизировать импорт.

Алгоритм действий:

  1. Выделите диапазон данных → Данные → Из таблицы/диапазонаExcel 2016–2019 или Данные → Получить данные → Из таблицы/диапазона в Excel 365).
  2. В редакторе Power Query выберите столбец → Разделить столбец → По разделителю (укажите символ, например, пробел или тире).
  3. Для извлечения чисел из хаотичного текста используйте Извлечь → Текст перед разделителем или Текст после разделителя.
  4. Примените изменения и загрузите данные обратно в Excel.

Для сложных случаев (например, "3яблока и 5груш") в Power Query есть регулярные выражения. Добавьте пользовательский столбец с формулой:

= Text.Select([Column1], {"0-9"})

Эта команда извлечёт все цифры из строки, игнорируя буквы и символы.

Убедитесь, что исходные данные в формате таблицы (Ctrl+T)

Проверьте наличие пустых ячеек — они могут сбить разбор

Замените нестандартные разделители (табуляции, неразрывные пробелы) на обычные

Сохраните резервную копию файла перед преобразованиями-->

4. Регулярные выражения через VBA

Когда стандартные функции бессильны (например, в строках вроде "Абв12гд34е56", где числа перемешаны с буквами), на помощь приходят регулярные выражения (RegExp). В Excel их можно использовать только через VBA.

Скопируйте этот код в редактор макросов (Alt+F11Insert → Module):

Function ExtractNumbers(rng As Range) As String

Dim regEx As New RegExp

Dim strInput As String

Dim strOutput As String

strInput = rng.Value

With regEx

.Pattern = "[0-9]+"

.Global = True

End With

If regEx.Test(strInput) Then

strOutput = regEx.Execute(strInput)(0)

End If

ExtractNumbers = strOutput

End Function

Теперь в Excel можно использовать формулу =ExtractNumbers(A1), и она вернёт первое число из строки. Чтобы извлечь все числа (например, для строки "1а2б3в""123"), модифицируйте функцию:

    If regEx.Test(strInput) Then

Dim matches As Object

Set matches = regEx.Execute(strInput)

Dim i As Integer

For i = 0 To matches.Count - 1

strOutput = strOutput & matches(i)

Next i

End If

⚠️ Внимание: Для работы кода необходимо подключить библиотеку Microsoft VBScript Regular Expressions. В редакторе VBA перейдите в Tools → References и отметьте галочкой Microsoft VBScript Regular Expressions 5.5.

5. Разбор данных с помощью Flash Fill

Малоизвестная, но крайне полезная функция Flash Fill (Быстрое заполнение) появилась в Excel 2013 и умеет "угадывать" шаблоны разбора. Она идеальна, когда данные имеют похожую структуру, но нет времени писать формулы.

Пример: у вас есть столбец с данными "Иванов И.И. 1985г.р.", и нужно вытащить год рождения. Делайте так:

  1. В соседнем столбце введите первый результат вручную (например, 1985).
  2. Нажмите Ctrl+E (или Данные → Быстрое заполнение).
  3. Excel автоматически заполнит остальные ячейки по шаблону.

Flash Fill распознаёт:

  • 📅 Даты в разных форматах ("01.01.2023", "1 января").
  • 🔢 Числа с префиксами/суффиксами ("№123", "100р").
  • 📌 Текстовые шаблоны ("Фамилия_И.О.""И.О.").

6. Продвинутые формулы массивов

Для пользователей Excel 365 доступны динамические массивы, которые позволяют разбирать текст без VBA. Например, чтобы извлечь все числа из строки "А1Б2В3" в отдельные ячейки:

=--ТЕКСТРАЗБ(ПОДСТАВИТЬ(A1; СИМВОЛ(ПОСЛЕДОВ(97; 1; 26)); ""); ; ; ИСТИНА)

Формула заменяет все буквы на пустоту, а затем разбивает строку по "ничему" (пустой разделитель), возвращая массив чисел.

Если нужно получить сумму всех чисел в строке (например, для "10ящиков по20кг"200):

=СУММ(--ТЕКСТРАЗБ(ПОДСТАВИТЬ(A1; СИМВОЛ(ПОСЛЕДОВ(97; 1; 26)); ""); ; ; ИСТИНА))

Для извлечения первого числа из строки с хаотичным содержимым:

=МИН(ЕСЛИОШИБКА(--ТЕКСТРАЗБ(ЛЕВСИМВ(A1; ПОСЛЕДОВ(ДЛСТР(A1))); ; ; ИСТИНА); ""))
Как работает формула с ПОСЛЕДОВ()?

Функция ПОСЛЕДОВ(ДЛСТР(A1)) генерирует массив чисел от 1 до длины строки.

ЛЕВСИМВ(A1; ПОСЛЕДОВ(...)) возвращает все возможные начала строки (от 1 символа до полной длины). ТЕКСТРАЗБ(...,,,ИСТИНА) разбивает каждое начало на символы. -- преобразует текстовые числа в числовой формат. МИН() берёт первое ненулевое значение (т.е. первое число в строке).

7. Обработка ошибок и особенные случаи

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

  • 🛑 Пустые ячейки: Оберните формулу в ЕСЛИ(A1<>""; ваша_формула; "").
  • 🔄 Отсутствие чисел: Используйте ЕСЛИОШИБКА(ваша_формула; 0).
  • 📏 Динамическая длина: Для строк без разделителей подойдёт =МАКС(ЕСЛИОШИБКА(--ПСТР(A1; СТРОКА(ДВССЫЛ("1:100")); 1); 0)) (извлекает максимальное число из отдельных символов).

Пример универсальной формулы для извлечения числа из строки любой структуры (работает в Excel 365):

=ЕСЛИОШИБКА(

--ТЕКСТСОЕДИНИТЬ(""; ИСТИНА; ФИЛЬТР(--ТЕКСТРАЗБ(A1; ; ; ИСТИНА); --ТЕКСТРАЗБ(A1; ; ; ИСТИНА) <> 0));

0

)

⚠️ Внимание: Если в ячейке есть дробные числа (например, "3.14м"), стандартные функции могут некорректно их обработать из-за точки как разделителя. Замените точку на запятую предварительно: =ПОДСТАВИТЬ(A1; "."; ",").

FAQ: Частые вопросы

Как отделить число от текста, если они перемешаны (например, "а1б2в3")?

Используйте регулярные выражения через VBA (раздел 4) или формулу массива для Excel 365:

=ТЕКСТСОЕДИНИТЬ(""; ИСТИНА; --ТЕКСТРАЗБ(ПОДСТАВИТЬ(A1; СИМВОЛ(ПОСЛЕДОВ(97; 1; 26)); ""); ; ; ИСТИНА))

Для старых версий Excel подойдёт макрос из раздела 4.

Можно ли автоматически разобрать столбец с данными типа "Иванов 100р", "Петров 200р"?

Да! В Excel 365 используйте:

=ЛЕВСИМВ(A1; НАЙТИ(" "; A1) - 1)  // для фамилии

=ПРАВСИМВ(A1; ДЛСТР(A1) - НАЙТИ(" "; A1)) // для суммы

В старых версиях применяйте ТЕКСТ.ПОСЛЕ() и ТЕКСТ.ДО() (если доступны) или Power Query.

Как извлечь число из ячейки, если оно в середине (например, "ТоварX123Y")?

Для Excel 365:

=ТЕКСТСОЕДИНИТЬ(""; ИСТИНА; --ТЕКСТРАЗБ(ПОДСТАВИТЬ(A1; {"X"; "Y"}; " "); ; ; ИСТИНА))

Для других версий:

=ПСТР(A1; ПОИСК("X"; A1) + 1; ПОИСК("Y"; A1) - ПОИСК("X"; A1) - 1)
Почему функция ТЕКСТРАЗБ() не работает в моём Excel?

Функция ТЕКСТРАЗБ() доступна только в Excel 365 и Excel 2021. Для старых версий используйте:

  • Комбинацию ЛЕВСИМВ()/ПРАВСИМВ() с НАЙТИ().
  • Power Query (раздел 3).
  • Макросы на VBA (раздел 4).
Как разделить текст и числа, если они разделены запятой, точкой или другим символом?

Используйте ТЕКСТРАЗБ() с указанием разделителя:

=ТЕКСТРАЗБ(A1; ",")  // для запятой

=ТЕКСТРАЗБ(A1; ".") // для точки

В старых версиях:

=ЛЕВСИМВ(A1; НАЙТИ(","; A1) - 1)  // текст до запятой

=ПРАВСИМВ(A1; ДЛСТР(A1) - НАЙТИ(","; A1)) // текст после запятой