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

Работа с текстовыми данными в 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))

Как она работает:

  1. ПСТР(A1;СТРОКА(ДВССЫЛ("1:10"));1) — извлекает каждый символ строки по очереди (до 10 символов).
  2. СИМВОЛКОД(...) — преобразует символ в его код по таблице ASCII (цифры имеют коды от 48 до 57).
  3. СУММПРОИЗВ — суммирует все символы, которые попадают в диапазон кодов цифр.

Пример: для строки "Абонент 123, тариф 45.99" формула вернёт 7 (цифры: 1, 2, 3, 4, 5, 9, 9).

⚠️ Внимание: Формула массива! После ввода нажмите Ctrl+Shift+Enter (в новых версиях Excel это не требуется).
📊 Какой метод подсчёта чисел вам нужен?
Подсчёт всех цифр в строке
Выделение отдельных чисел
Подсчёт количества чисел (не цифр)
Автоматизация через VBA

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

Как использовать:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. В ячейке используйте формулу =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:

  1. Выделите данные и перейдите на вкладку Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте пользовательский столбец с формулой:
    = List.Count(List.Transform(List.RemoveNulls(Text.Split([ВашСтолбец]; {" "})), each if Value.Is(Value.FromText(_), type number) then 1 else null))
  3. Нажмите Закрыть и загрузить.

Для регулярных выражений в 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