Работа с текстовыми данными в Microsoft Excel часто требует нестандартных решений — особенно когда нужно извлечь или проанализировать числа, «спрятанные» внутри строк. Представьте: у вас есть ячейка с текстом вида "Заказ №145 от 03.05, сумма 2500 руб.", и вам нужно узнать, сколько чисел содержится в этой строке или вытащить их для дальнейших расчётов. Вручную пересчитывать сотни таких записей — неэффективно, а стандартные функции вроде СЧЁТ здесь бессильны.
В этой статье мы разберём 5 проверенных методов, как посчитать числа в строке в Excel — от элементарных формул для новичков до гибких решений на VBA для автоматизации. Вы узнаете, как:
- 🔢 Использовать комбинацию функций
ДЛСТР,ПОДСТАВИТЬиСУММПРОИЗВдля подсчёта всех цифр в строке; - 📊 Выделять отдельные числа из текста с помощью
ПСТРиНАЙТИ; - 🤖 Автоматизировать процесс с макросами, если данных слишком много;
- 🔍 Учитывать нюансы: отрицательные числа, дроби, числа с разделителями.
Все методы протестированы на Excel 2019–2023 и Microsoft 365, но большинство из них работает и в старых версиях (начиная с Excel 2010). Приступим!
1. Подсчёт всех цифр в строке (включая многозначные числа)
Если вам нужно узнать общее количество цифр в текстовой строке (не важно, являются ли они частью одного числа или нескольких), используйте эту формулу:
=СУММПРОИЗВ(--(СИМВОЛКОД(ПСТР(A1;СТРОКА(ДВССЫЛ("1:10"));1))>=48);--(СИМВОЛКОД(ПСТР(A1;СТРОКА(ДВССЫЛ("1:10"));1))<=57))
Как она работает:
ПСТР(A1;СТРОКА(ДВССЫЛ("1:10"));1)— извлекает каждый символ строки по очереди (до 10 символов).СИМВОЛКОД(...)— преобразует символ в его код по таблице ASCII (цифры имеют коды от 48 до 57).СУММПРОИЗВ— суммирует все символы, которые попадают в диапазон кодов цифр.
Пример: для строки "Абонент 123, тариф 45.99" формула вернёт 7 (цифры: 1, 2, 3, 4, 5, 9, 9).
⚠️ Внимание: Формула массива! После ввода нажмите Ctrl+Shift+Enter (в новых версиях Excel это не требуется).
2. Подсчёт количества чисел в строке (не цифр!)
Задача усложняется, если нужно посчитать сколько отдельных чисел содержится в строке. Например, в тексте "Температура: -5°C, влажность 60%" два числа: -5 и 60. Для этого потребуется формула с регулярными выражениями (доступна в Excel 365 и Excel 2021):
=ДЛСТР(ПОДСТАВИТЬ(A1;" ";";"))-ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;" ";";");РЕГВЫРАЖ.ЗАМЕНИТ(A1;"-?\d+(\.\d+)?";""));";";""))
Разберём по шагам:
- 🔹
РЕГВЫРАЖ.ЗАМЕНИТ(A1;"-?\d+(\.\d+)?";"")— удаляет все числа (включая отрицательные и дроби) из строки. - 🔹
ПОДСТАВИТЬзаменяет пробелы на точку с запятой, чтобы избежать ошибок при подсчёте. - 🔹 Разница длины исходной строки и строки без чисел даёт количество чисел.
Для старых версий Excel используйте пользовательскую функцию на VBA (см. раздел 5).
| Исходная строка | Формула | Результат |
|---|---|---|
"Код 123, цена 45.99 руб." | =ДЛСТР(ПОДСТАВИТЬ(...)) | 2 |
"Температура: -10°C" | =ДЛСТР(ПОДСТАВИТЬ(...)) | 1 |
"Нет чисел здесь" | =ДЛСТР(ПОДСТАВИТЬ(...)) | 0 |
3. Извлечение чисел из строки в отдельные ячейки
Если вам нужно не просто посчитать числа, а вытащить их в отдельные столбцы, используйте комбинацию функций ПСТР, НАЙТИ и ПОИСКПОЗ. Например, для строки "Артикул A45-678, вес 1.5 кг":
=ЕСЛИОШИБКА(--ПСТР(A1;МИН(ЕСЛИОШИБКА(НАЙТИ({0;1;2;3;4;5;6;7;8;9};A1);""));ДЛСТР(A1));0);0)
Для извлечения первого числа:
=--ПСТР(A1;ПОИСКПОЗ(ИСТИНА;--(СИМВОЛКОД(ПСТР(A1;СТРОКА(ДВССЫЛ("1:100"));1))>=48);0);СЧЁТЕСЛИ(СИМВОЛКОД(ПСТР(A1;ПОИСКПОЗ(ИСТИНА;--(СИМВОЛКОД(ПСТР(A1;СТРОКА(ДВССЫЛ("1:100"));1))>=48);0))+СТРОКА(ДВССЫЛ("0:99"));1))<=57;ДВССЫЛ("1:100")))
⚠️ Внимание: Эти формулы требуют нажатия Ctrl+Shift+Enter в Excel 2019 и старше. В Excel 365 они работают как динамические массивы.
Проверьте, что в строке нет лишних пробелов|Убедитесь, что числа отделены от текста символами (пробел, запятая, тире)|Скопируйте формулу как формулу массива (Ctrl+Shift+Enter)|Проверьте результат на тестовых данных-->
4. Учёт нюансов: отрицательные числа, дроби, разделители
Стандартные формулы могут некорректно обрабатывать:
- 🔸 Отрицательные числа (например,
-15воспринимается как два числа:-и15). - 🔸 Дроби (в строке
"3.14 м"функция может посчитать3,1и4как три отдельных числа). - 🔸 Разделители тысяч (например,
"1 000 руб."может быть воспринято как1и000).
Решение для дробей и отрицательных чисел:
=ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"-";""))-ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"-";"");РЕГВЫРАЖ.ЗАМЕНИТ(A1;"-?\d+(\.\d+)?";"");""))
Для разделителей тысяч предварительно замените пробелы или запятые на пустую строку:
=ПОДСТАВИТЬ(A1;" ":"")
Как обработать числа с валютами?
Если числа в строке содержат символы валют (например, "$100"), используйте формулу:
=--ПОДСТАВИТЬ(РЕГВЫРАЖ.ИЗВЛЕЧЬ(A1;"-?\d+(\.\d+)?");",";".")
Это удалит символ "$" и преобразует число в числовой формат.
5. Автоматизация с помощью VBA (для больших данных)
Если вам нужно обработать тысячи строк, макрос на VBA сэкономит часы работы. Вот пример функции, которая возвращает количество чисел в строке:
Function CountNumbersInString(rng As Range) As Long
Dim str As String, i As Long, numCount As Long
Dim inNumber As Boolean
str = rng.Value
inNumber = False
numCount = 0
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 1)) Or Mid(str, i, 1) = "-" Or Mid(str, i, 1) = "." Then
If Not inNumber Then
numCount = numCount + 1
inNumber = True
End If
Else
inNumber = False
End If
Next i
CountNumbersInString = numCount
End Function
Как использовать:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в модуль (
Insert → Module). - В ячейке используйте формулу
=CountNumbersInString(A1).
Для извлечения чисел в отдельный столбец модифицируйте функцию:
Function ExtractNumbers(rng As Range) As String
Dim str As String, result As String, i As Long
str = rng.Value
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 1)) Or Mid(str, i, 1) = "-" Or Mid(str, i, 1) = "." Then
result = result & Mid(str, i, 1)
Else
result = result & " "
End If
Next i
ExtractNumbers = Application.WorksheetFunction.Trim(result)
End Function
⚠️ Внимание: Перед запуском макросов сохраните файл с расширением .xlsm и включите поддержку макросов в настройках безопасности Excel.
6. Альтернативные инструменты: Power Query и регулярные выражения
Для сложных задач (например, обработки многоуровневых строк с вложенными числами) используйте Power Query:
- Выделите данные и перейдите на вкладку
Данные → Из таблицы/диапазона. - В редакторе Power Query добавьте пользовательский столбец с формулой:
= List.Count(List.Transform(List.RemoveNulls(Text.Split([ВашСтолбец]; {" "})), each if Value.Is(Value.FromText(_), type number) then 1 else null)) - Нажмите
Закрыть и загрузить.
Для регулярных выражений в Excel 365:
=РЕГВЫРАЖ.ИЗВЛЕЧЬ(A1;"-?\d+(\.\d+)?";1) ' Первое число
=РЕГВЫРАЖ.ИЗВЛЕЧЬ(A1;"-?\d+(\.\d+)?";2) ' Второе число
FAQ: Частые вопросы по подсчёту чисел в строках
Можно ли посчитать числа в строке без VBA?
Да! В Excel 365 и Excel 2021 используйте функции РЕГВЫРАЖ. В старых версиях комбинируйте ПОДСТАВИТЬ, ДЛСТР и СУММПРОИЗВ (см. раздел 2).
Как игнорировать числа с буквами (например, "A1")?
Используйте формулу с проверкой соседних символов:
=ЕСЛИ(И(НЕ(ИЛИ(СИМВОЛКОД(ЛЕВСИМВ(A1))>=48;СИМВОЛКОД(ЛЕВСИМВ(A1))<=57));НЕ(ИЛИ(СИМВОЛКОД(ПРАВСИМВ(A1))>=48;СИМВОЛКОД(ПРАВСИМВ(A1))<=57)));"Чистое число";"С буквой")
Почему формула считает "1.5" как два числа?
Точка воспринимается как разделитель. Замените её на запятую предварительно:
=ПОДСТАВИТЬ(A1;". ";",")
Или используйте РЕГВЫРАЖ.ЗАМЕНИТ для дробных чисел.
Как посчитать числа в строке с учётом разделителей тысяч (пробелов)?
Удалите пробелы перед подсчётом:
=CountNumbersInString(ПОДСТАВИТЬ(A1;" ":""))
Или используйте VBA-функцию с модификацией для игнорирования пробелов.
Можно ли извлечь числа из строки в Google Таблицах?
Да, используйте аналогичные функции:
=ARRAYFORMULA(IFERROR(REGEXEXTRACT(A1;"-?\d+(\.\d+)?")))
Для подсчёта количества чисел:
=COUNTA(SPLIT(REGEXREPLACE(A1;"[^\d.-]";" ");" "))-1