Работа с неструктурированными данными в 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кг"), формула вернёт ошибку. В таких случаях комбинируйтеПОИСКсМИНдля поиска первого нецифрового символа.
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; " "; ""); "руб."; "")*1 | 1500.2 |
⚠️ Внимание: Формулы с ПОДСТАВИТЬ и списком символов могут не сработать для кириллических букв в старых версиях Excel. В таких случаях используйте Power Query (см. следующий раздел).
Удалить лишние символы (%, $, €)|Заменить неразрывные пробелы на обычные|Проверить наличие скрытых символов (TAB, LF)|Создать резервную копию файла-->
3. Способ: Power Query для сложных текстовых данных
Power Query (доступен в Excel 2016+) — мощный инструмент для обработки неструктурированных данных. Он позволяет извлекать числа из текста с помощью регулярных выражений и преобразований столбцов. Алгоритм действий:
- Выделите исходные данные →
Данные → Из таблицы/диапазона(илиGet & Transform → Из таблицы). - В редакторе Power Query выберите столбец →
Преобразовать → Извлечь → Текст после делителя(указывайте символы до числа). - Для извлечения всех чисел используйте
Добавить столбец → Пользовательскийс формулой:= Text.Select([Column1], {"0".."9"}) - Преобразуйте результат в числовой формат:
Преобразовать → Тип данных → Десятичное число.
Преимущество Power Query — возможность сохранить шаги обработки и обновлять данные одним кликом. Это незаменимо для регулярно обновляемых отчётов. Например, если вы ежемесячно получаете файлы с логами в формате "[2026-05-15 14:30] Ошибка 404", можно настроить автоматическое извлечение кодов ошибок (404) и дат.
Используйте пользовательскую функцию с регулярным выражением: Эта формула извлечёт числа типа 3.14 или 0.5, игнорируя остальной текст. Для европейского формата (запятая как разделитель) замените "." на "," в списке символов.Как извлечь числа с плавающей запятой через Power Query?
= try Number.From(Text.Select([Column1], {"0".."9", "."})) otherwise null
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
Этот макрос создаёт новый столбец справа от выделенного диапазона с извлечёнными числами. Для запуска:
- Нажмите
ALT + F11→Insert → Module. - Вставьте код выше и закройте редактор.
- Выделите диапазон с данными →
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 знаков или ячейка отформатирована как Общий формат. Решение:
- Выделите ячейки →
Формат ячеек → Числовой. - Увеличьте ширину столбца.
- Если число должно остаться текстом, используйте апостроф (
'123456789012345).
Как автоматизировать извлечение чисел для новых данных?
Настройте Power Query или запишите макрос VBA с триггером на открытие файла:
- Для Power Query: сохраните запрос и обновите его при добавлении данных (
Данные → Обновить все). - Для 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.