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

Почему стандартный подсчёт символов в Excel не работает с цифрами

На первый взгляд, задача подсчёта цифр в диапазоне кажется тривиальной: достаточно использовать функцию ДЛСТР или её английский аналог LEN. Но здесь кроется подвох. Эти функции возвращают общее количество символов в ячейке, включая буквы, пробелы, знаки препинания и даже невидимые символы вроде табуляции. Если ваша ячейка содержит текст "Привет123!", ДЛСТР вернёт 9, хотя цифр там всего 3.

Более того, Excel не различает цифры как символы (например, "5" в тексте) и числа как числовые значения (5 в ячейке с форматом "Числовой"). Для программы это принципиально разные сущности: число 123 в ячейке с форматом Общий хранится как числовое значение, а текст "123" — как строка из трёх символов. Этот нюанс часто становится причиной ошибок при подсчёте.

Дополнительную сложность добавляют:

  • 🔢 Отрицательные числа (знак "минус" тоже символ!)
  • 💰 Денежные форматы (разделители тысяч и символ валюты)
  • 📊 Научная нотация (например, 1,23E+05 вместо 123000)
  • 📝 Ведущие нули (в текстовом формате сохраняются, в числовом — обрезаются)
⚠️ Внимание: Если вы работаете с данными, импортированными из CSV или баз данных, проверьте формат ячеек. Часто числа импортируются как текст с невидимыми символами (например, NBSP), что искажает результаты подсчёта.

Способ 1: Функция ДЛСТР + ПОДСТАВИТЬ для текстового диапазона

Самый простой метод работает, если все данные в диапазоне хранятся в текстовом формате. Комбинация функций ДЛСТР и ПОДСТАВИТЬ позволяет удалить все нецифровые символы, а затем посчитать длину оставшейся строки:

=ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"0";"");"1";"");"2";"");"3";"");"4";"");"5";"");"6";"");"7";"");"8";"");"9";"")

Эта формула последовательно удаляет все цифры от 0 до 9, а затем измеряет длину строки до и после удаления. Разница между исходной длиной (ДЛСТР(A1)) и длиной строки без цифр даст искомое количество:

=ДЛСТР(A1) - ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(...)))

Для удобства можно создать пользовательскую функцию (см. раздел про VBA) или использовать массивную формулу, которая обработает весь диапазон за один раз:

=СУММПРОИЗВ(--(НЕОШИБКА(ПОИСК(СТРОКА($A$1:$A$10);"0123456789"))))
Исходные данные (A1:A3) Формула Результат
"Привет123!" =ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(...)) 3
"Тест: 45.67 руб." =ДЛСТР(A2)-ДЛСТР(ПОДСТАВИТЬ(...)) 4
"100%" =ДЛСТР(A3)-ДЛСТР(ПОДСТАВИТЬ(...)) 3

Способ 2: Подсчёт цифр в числовых ячейках (без текста)

Если ваш диапазон содержит только числа (без текста), задача упрощается. Здесь поможет комбинация функций ЦЕЛОЕ, ЛОГ10 и обработка отрицательных значений:

=ЕСЛИ(A1<0; ДЛСТР(ТЕКСТ(ABS(A1);"0")); ДЛСТР(ТЕКСТ(A1;"0")))

Разберём по шагам:

  1. ABS(A1) — убирает знак "минус" для отрицательных чисел.
  2. ТЕКСТ(..., "0") — преобразует число в текст без десятичных разрядов.
  3. ДЛСТР — считает количество символов в полученной строке.

Для чисел с десятичными разрядами используйте формат "0.000..." (количество нулей = количество знаков после запятой):

=ДЛСТР(ПОДСТАВИТЬ(ТЕКСТ(A1;"0.00");",";"")) - 1
⚠️ Внимание: Эта формула не учитывает научную нотацию (например, 1E+10 будет обработано как 4 символа, хотя фактически число содержит 11 цифр). Для таких случаев требуется VBA или предварительное преобразование формата.
📊 Какой формат данных вы чаще анализируете в Excel?
Только числа
Текст с цифрами
Смешанные данные
Денежные значения

Способ 3: Массивные формулы для смешанных данных

Когда диапазон содержит и числа, и текст, пригодится массивная формула на основе СУММПРОИЗВ и ПОИСКПОЗ. Она проверяет каждый символ в ячейке на принадлежность к цифрам (0-9):

=СУММПРОИЗВ(ДЛСТР(A1:A10)-ДЛСТР(ПОДСТАВИТЬ(A1:A10;СТРОКА($1:$9);"")))

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

  • 🔹 СТРОКА($1:$9) создаёт вертикальный массив чисел от 1 до 9 (и 0, если расширить до $0:$9).
  • 🔹 ПОДСТАВИТЬ удаляет из каждой ячейки все цифры, соответствующие текущему числу из массива.
  • 🔹 ДЛСТР вычисляет разницу между исходной длиной и длиной после удаления.
  • 🔹 СУММПРОИЗВ суммирует результаты по всему диапазону.

Для Excel 365 и 2021 доступна более лаконичная версия с LET:

=LET(

цифры; СТРОКА(0:9);

данные; A1:A10;

СУММ(ДЛСТР(данные) - ДЛСТР(ПОДСТАВИТЬ(данные; цифры; "")))

)

Почему формула не работает с русскими буквами?

Массивная формула ищет только символы из диапазона 0-9. Русские буквы (или латиницу) она игнорирует, так как они не входят в список заменяемых символов. Если нужно исключить и буквы, добавьте в ПОДСТАВИТЬ дополнительные диапазоны, например, СИМВОЛ(1040:1103) для кириллицы.

Способ 4: Пользовательская функция VBA для гибкого подсчёта

Если вам нужно регулярно считать цифры в больших диапазонах, создайте собственную функцию VBA. Она позволит:

  • 📌 Игнорировать знаки препинания и пробелы.
  • 📌 Учитывать ведущие нули.
  • 📌 Обрабатывать научную нотацию.
  • 📌 Работать с диапазонами любой размерности.

Откройте редактор VBA (Alt+F11), вставьте новый модуль и добавьте код:

Function CountDigits(rng As Range) As Long

Dim cell As Range

Dim char As String

Dim digitCount As Long

digitCount = 0

For Each cell In rng

For i = 1 To Len(cell.Value)

char = Mid(cell.Value, i, 1)

If char >= "0" And char <= "9" Then

digitCount = digitCount + 1

End If

Next i

Next cell

CountDigits = digitCount

End Function

Теперь в Excel можно использовать =CountDigits(A1:A100). Функция вернёт общее количество цифр во всём диапазоне.

🔹 Включить поддержку макросов в Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов

🔹 Сохранить файл как .xlsm (с поддержкой макросов)

🔹 Проверить диапазон на наличие объединённых ячеек (они могут вызвать ошибку)

🔹 Убедиться, что в данных нет символов с кодом > 255 (они обрабатываются иначе)

-->

Способ 5: Power Query для обработки больших данных

Для диапазонов с десятками тысяч строк оптимально использовать Power Query (вкладка Данные → Получение данных). Алгоритм:

  1. Загрузите диапазон в Power Query (Из таблицы/диапазона).
  2. Добавьте пользовательский столбец с формулой:
    = Text.Select([Column1], {"0".."9"})
  3. Добавьте ещё один столбец с = Text.Length([Custom]).
  4. Удалите вспомогательные столбцы, оставив только подсчёт.
  5. Загрузите результат обратно в Excel.

Преимущества метода:

  • ⚡ Обрабатывает миллионы строк без тормозов.
  • 🔄 Позволяет обновлять данные одним кликом.
  • 📊 Интегрируется с другими преобразованиями (фильтрация, сортировка).
⚠️ Внимание: Power Query преобразует все данные в текстовый формат. Если вам нужно сохранить исходные числовые значения, дублируйте столбец до начала преобразований.

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

Даже опытные пользователи Excel сталкиваются с проблемами при подсчёте цифр. Вот самые распространённые:

Ошибка Причина Решение
Формула возвращает #ЗНАЧ! В диапазоне есть объединённые ячейки или ошибки (#ДЕЛ/0!, #Н/Д). Используйте ЕСЛИОШИБКА или разъедините ячейки.
Неправильный подсчёт для денежных форматов Символ валюты (₽, $, €) и разделители тысяч считаются как символы. Преобразуйте данные в текст с ТЕКСТ и укажите формат без символов.
ВBA-функция не видит ведущие нули Числа с ведущими нулями хранятся как текст, но Excel их обрезает. Предварительно отформатируйте ячейки как Текстовый.
Массивная формула не обновляется Забыли ввести как массивую (Ctrl+Shift+Enter). Перевведите формулу с правильной комбинацией клавиш.

Ещё одна частая проблема — невидимые символы, например, NBSP (неразрывный пробел) или CR/LF (переносы строк). Чтобы их обнаружить, используйте функцию КОДСИМВ для проверки ASCII-кодов символов:

=КОДСИМВ(ЛЕВСИМВ(A1))

Если код возвращает 160 вместо 32 (обычный пробел), значит в данных есть NBSP. Удалите его через ПОДСТАВИТЬ(A1;СИМВОЛ(160);"").

FAQ: Ответы на частые вопросы

Можно ли посчитать цифры в диапазоне без VBA?

Да, используйте массивую формулу на основе СУММПРОИЗВ и ДЛСТР (см. Способ 3). Для Excel 365 подойдёт также функция LET с СТРОКА.

Почему формула считает пробелы как цифры?

Пробелы не являются цифрами, но если вы используете ДЛСТР без предварительной очистки данных, они включаются в общую длину строки. Чтобы исключить пробелы, добавьте в формулу ПОДСТАВИТЬ(A1;" "; "").

Как посчитать цифры в ячейках с дробными числами?

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

Работает ли этот метод в Google Sheets?

Да, все приведённые формулы (кроме VBA) совместимы с Google Sheets. Для массивов используйте ARRAYFORMULA вместо Ctrl+Shift+Enter.

Как посчитать только уникальные цифры в диапазоне?

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