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

Работа с неструктурированными данными в Microsoft Excel часто сталкивает пользователей с необходимостью извлечь числа из текстовых строк. Это актуально для обработки отчётов, где цифры перемешаны с буквами (например, "Заказ №12345 на сумму 15 000 руб."), логов систем, где временные метки смешаны с кодовыми обозначениями, или импортированных данных из PDF и CSV, где разделители потеряны. Вручную перебивать тысячи строк — нерационально, поэтому важно знать автоматизированные методы.

В этой статье разберём 5 проверенных способов выделения чисел из текста — от элементарных формул до скриптов на VBA, а также рассмотрим типичные ошибки и нюансы для разных форматов данных. Особое внимание уделим случаям, когда числа записаны с разделителями (пробелами, запятыми), содержат знаки валют или дробные части. Если вы ранее сталкивались с тем, что функция ЗНАЧЕН возвращает ошибку #ЗНАЧ! на казалось бы корректных данных — здесь найдёте решение.

Прежде чем приступать к практике, убедитесь, что ваши данные подготовлены: удалены лишние символы (например, %, ), а текстовые строки не содержат неразрывных пробелов (их можно заменить через CTRL+H). Это сэкономит время на отладку формул позже.

1. Способ: Формулы для простых случаев (числа в начале/конце строки)

Если числа в ваших данных расположены строго в начале или конце текстовой строки, достаточно стандартных функций ЛЕВСИМВ, ПРАВСИМВ и ПОИСК. Этот метод подходит для шаблонных записей типа "Инвойс 4567" или "Счёт_2023_12500руб".

Пример формулы для числа в начале строки:

=ЛЕВСИМВ(A1; ПОИСК(" "; A1) - 1)

Здесь ПОИСК(" "; A1) находит позицию первого пробела, а ЛЕВСИМВ извлекает все символы до него. Для чисел в конце строки используйте:

=ПРАВСИМВ(A1; ДЛСТР(A1) - ПОИСК(" "; A1))
  • Плюсы: не требует дополнительных надстроек, работает во всех версиях Excel.
  • Минусы: ломается, если в строке несколько пробелов или числа не на краю.
  • 🔹 Нюанс: для чисел с запятыми (например, "1,5 кг") замените ПОИСК(" ") на ПОИСК(",").
⚠️ Внимание: Если в строке нет пробела (например, "Вес15кг"), формула вернёт ошибку. В таких случаях комбинируйте ПОИСК с МИН для поиска первого нецифрового символа.
📊 Какой способ извлечения чисел вы используете чаще?
Формулы
Power Query
VBA
Ручной ввод
Другой

2. Способ: Универсальная формула для чисел в любом месте строки

Для извлечения всех чисел из строки независимо от их позиции подходит массивная формула на основе ТЕКСТПОСЛЕ, ПОДСТАВИТЬ и регулярных выражений (в новых версиях Excel). В Excel 365 и Excel 2021 используйте:

=--ТЕКСТДОБЫТЬ(ПОДСТАВИТЬ(A1; {"а";"б";...;"я";" ";"-";"(";")"}; ""); "0123456789")

Эта формула заменяет все нецифровые символы на пустоту, а затем преобразует результат в число. Для старых версий Excel потребуется альтернативный подход с ПОИСК в цикле.

Если числа в строке разделены пробелами (например, "Артикул 100-200-300"), используйте комбинацию ТЕКСТРАЗД и ЗНАЧЕН:

=ЗНАЧЕН(ТЕКСТРАЗД(ПОДСТАВИТЬ(A1; "-"; " "); " "; 1))
Исходный текстФормулаРезультат
"Температура: 25.5°C"=--ПОДСТАВИТЬ(A1; "Температура: "; "")25.5
"ID-45-AB-789"=ЗНАЧЕН(ПОДСТАВИТЬ(A1; "-"; ""))45789
"Стоимость: 1 500,20 руб."=ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1; " "; ""); "руб."; "")*11500.2
⚠️ Внимание: Формулы с ПОДСТАВИТЬ и списком символов могут не сработать для кириллических букв в старых версиях Excel. В таких случаях используйте Power Query (см. следующий раздел).

Удалить лишние символы (%, $, €)|Заменить неразрывные пробелы на обычные|Проверить наличие скрытых символов (TAB, LF)|Создать резервную копию файла-->

3. Способ: Power Query для сложных текстовых данных

Power Query (доступен в Excel 2016+) — мощный инструмент для обработки неструктурированных данных. Он позволяет извлекать числа из текста с помощью регулярных выражений и преобразований столбцов. Алгоритм действий:

  1. Выделите исходные данные → Данные → Из таблицы/диапазона (или Get & Transform → Из таблицы).
  2. В редакторе Power Query выберите столбец → Преобразовать → Извлечь → Текст после делителя (указывайте символы до числа).
  3. Для извлечения всех чисел используйте Добавить столбец → Пользовательский с формулой:
    = Text.Select([Column1], {"0".."9"})
  4. Преобразуйте результат в числовой формат: Преобразовать → Тип данных → Десятичное число.

Преимущество Power Query — возможность сохранить шаги обработки и обновлять данные одним кликом. Это незаменимо для регулярно обновляемых отчётов. Например, если вы ежемесячно получаете файлы с логами в формате "[2026-05-15 14:30] Ошибка 404", можно настроить автоматическое извлечение кодов ошибок (404) и дат.

Как извлечь числа с плавающей запятой через Power Query?

Используйте пользовательскую функцию с регулярным выражением:

= try Number.From(Text.Select([Column1], {"0".."9", "."})) otherwise null

Эта формула извлечёт числа типа 3.14 или 0.5, игнорируя остальной текст. Для европейского формата (запятая как разделитель) замените "." на "," в списке символов.

4. Способ: VBA для автоматизации и сложных шаблонов

Если вам нужно обработать тысячи строк с нестандартными шаблонами (например, "Клиент: Иванов; Сумма: 15000.50; Дата: 01.05.2026"), напишите макрос на VBA. Ниже приведён код для извлечения всех чисел из выделенного диапазона:

Sub ExtractNumbers()

Dim rng As Range, cell As Range

Dim output() As String, num As String

Dim i As Long, j As Long, k As Long

Set rng = Selection

ReDim output(1 To rng.Rows.Count, 1 To 1)

For i = 1 To rng.Rows.Count

num = ""

For j = 1 To Len(rng.Cells(i, 1).Value)

If IsNumeric(Mid(rng.Cells(i, 1).Value, j, 1)) Or Mid(rng.Cells(i, 1).Value, j, 1) = "." Or Mid(rng.Cells(i, 1).Value, j, 1) = "," Then

num = num & Mid(rng.Cells(i, 1).Value, j, 1)

End If

Next j

output(i, 1) = num

Next i

rng.Offset(0, 1).Resize(UBound(output, 1), 1).Value = output

End Sub

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

  1. Нажмите ALT + F11Insert → Module.
  2. Вставьте код выше и закройте редактор.
  3. Выделите диапазон с данными → View → Macros → ExtractNumbers → Run.
⚠️ Внимание: Макрос извлекает все подряд идущие цифры и разделители. Если в строке несколько чисел (например, "2 яблока и 3 груши"), они сольются в одно значение (2.3). Для раздельного извлечения модифицируйте код с использованием Split.
If (IsNumeric(Mid(...)) Or Mid(...) = "." Or Mid(...) = ",") And Not (Mid(...) = "$" Or Mid(...) = "€") Then
-->

5. Способ: Регулярные выражения (для опытных пользователей)

Регулярные выражения (RegEx) — самый гибкий метод для извлечения чисел из текста, но требует установки надстройки или использования Power Query. Например, чтобы извлечь все целые числа из строки, используйте шаблон:

\d+

А для чисел с плавающей запятой:

\d+[\.,]?\d*

В Excel без надстроек RegEx доступен только через VBA. Пример функции:

Function ExtractNumbersRegex(input As String) As String

Dim regex As Object

Set regex = CreateObject("VBScript.RegExp")

With regex

.Pattern = "\d+[\.,]?\d*"

.Global = True

End With

If regex.Test(input) Then

ExtractNumbersRegex = regex.Execute(input)(0)

Else

ExtractNumbersRegex = "Нет чисел"

End If

End Function

После добавления этой функции в модуль VBA используйте её в ячейках как обычную формулу: =ExtractNumbersRegex(A1).

- Только положительные числа: \d+\.?\d*

- Числа с знаком: [+-]?\d+\.?\d*

- Числа в диапазоне 100–999: \b[1-9]\d{2}\b-->

Типичные ошибки и как их избежать

Даже опытные пользователи сталкиваются с проблемами при извлечении чисел. Рассмотрим TOP-5 ошибок и их решения:

  • 🔢 Ошибка #ЗНАЧ! в функции ЗНАЧЕН: возникает, если в строке остались нецифровые символы (например, "10 кг" → удалите " кг" через ПОДСТАВИТЬ).
  • 📏 Неправильное положение чисел: если формула ЛЕВСИМВ возвращает пустоту, проверьте, действительно ли число стоит в начале строки (используйте ПРОСМОТР для визуального контроля).
  • 🌍 Проблемы с региональными настройками: в европейском формате дробная часть отделяется запятой, а в американском — точкой. Используйте =ПОДСТАВИТЬ(A1; ","; ".") перед преобразованием в число.
  • 🔍 Скрытые символы: неразрывные пробелы (CHAR(160)) или символы табуляции ломают формулы. Удаляйте их через =ПЕЧСИМВ(ПОДСТАВИТЬ(A1; CHAR(160); " ")).
  • 🔄 Циклические ссылки: при использовании Power Query убедитесь, что выходной диапазон не пересекается с исходными данными.

Критическая ошибка: если после извлечения числа отображаются как даты (например, 1-5 превращается в 01 мая), предварительно отформатируйте ячейки как Текстовый формат или используйте апостроф перед числом ('1-5).

FAQ: Частые вопросы по извлечению чисел

Как извлечь число из строки, если оно окружено буквами (например, "abc123def")?

Используйте формулу массива (вводится через CTRL+SHIFT+ENTER в старых версиях Excel):

=МИН(ЕСЛИОШИБКА(НАЙТИ(СТРОКА($A$1:$A$10); A1); ""))

Или в Excel 365:

=ТЕКСТПОСЛЕ(ПОДСТАВИТЬ(A1; {"a";"b";..."z"}; ""); "0123456789")*1
Можно ли извлечь числа из ячеек с несколькими значениями (например, "5 яблок и 3 груши")?

Да, с помощью Power Query или VBA. В Power Query используйте функцию Text.Split с разделителем " и ", затем извлекайте числа из каждого фрагмента. В VBA модифицируйте макрос из Раздела 4, добавив обработку через Split.

Почему после извлечения числа отображаются в экспоненциальном формате (например, 1.23E+05)?

Это происходит, если число превышает 15 знаков или ячейка отформатирована как Общий формат. Решение:

  1. Выделите ячейки → Формат ячеек → Числовой.
  2. Увеличьте ширину столбца.
  3. Если число должно остаться текстом, используйте апостроф ('123456789012345).
Как автоматизировать извлечение чисел для новых данных?

Настройте Power Query или запишите макрос VBA с триггером на открытие файла:

  1. Для Power Query: сохраните запрос и обновите его при добавлении данных (Данные → Обновить все).
  2. Для VBA: добавьте код в событие Workbook_Open:
    Private Sub Workbook_Open()
    

    Call ExtractNumbers ' вызов вашего макроса

    End Sub

Есть ли разница между извлечением чисел в Excel и Google Sheets?

Да, в Google Sheets используйте функцию REGEXEXTRACT:

=REGEXEXTRACT(A1; "\d+[\.,]?\d*")

Для извлечения всех чисел из строки:

=ARRAYFORMULA(IFERROR(SPLIT(REGEXREPLACE(A1; "[^\d.,]"; " "); " ")))

В Excel аналогичного встроенного функционала нет — требуется VBA или Power Query.