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

Подсчёт количества цифр в числах — задача, с которой сталкиваются бухгалтеры при проверке корректности идентификаторов, аналитики при обработке больших массивов данных, и даже маркетологи при сегментации клиентских баз по номерам телефонов. В Microsoft Excel нет встроенной функции вроде КОЛИЧЕСТВО_ЦИФР(), но решить эту задачу можно минимум пятью разными способами — от элементарных формул до автоматизации через VBA.

Чаще всего пользователи ищут решение для двух сценариев: подсчёт всех цифр в числе (включая нули в начале, если они отображаются как текст) и подсчёт только значащих цифр (игнорируя ведущие нули и форматирование). Например, в номере договора 0012345 может потребоваться учитывать все 7 символов или только 5 значащих цифр. В этой статье разберём оба варианта с учётом нюансов форматирования ячеек.

Многие ошибочно полагают, что для этой задачи обязательно нужен Visual Basic for Applications или сложные массивы. На практике же 80% случаев покрываются стандартными функциями ДЛСТР() и ЛЕН() в комбинации с ЗАМЕНИТЬ(). А для обработки тысяч строк достаточно одного клика — если правильно настроить Power Query.

📊 Как часто вам нужно считать цифры в числах Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

1. Базовый метод: функция ДЛСТР для текстовых чисел

Самый простой способ работает, если ваши числа хранятся как текст (например, артикулы "001945" или телефонные номера "89123456789"). В этом случае достаточно применить функцию ДЛСТР (или её английский аналог LEN):

```excel

=ДЛСТР(A1)

```

Функция вернёт количество всех символов в ячейке, включая ведущие нули, пробелы и даже невидимые знаки (например, символы табуляции). Это идеально подходит для проверки корректности ввода данных, когда важна точная длина строки.

Пример: Если в ячейке A1 записан текст "007", формула вернёт 3, а не 2 (как было бы при автоматическом преобразовании в число).

⚠️ Внимание: Если ячейка отформатирована как "Числовой формат", но содержит ведущие нули (например, 00123), Excel автоматически обрежет их при вводе. Чтобы сохранить нули, предварительно измените формат ячейки на Текстовый (Главная → Формат → Формат ячеек → Текстовый).
  • ✅ Работает для любых символов, не только цифр
  • ✅ Не требует дополнительных функций
  • ❌ Не подходит для чисел без ведущих нулей (вернёт ошибку или некорректный результат)
  • ❌ Учитывает пробелы и скрытые символы

2. Подсчёт цифр в числовых значениях (без ведущих нулей)

Когда числа вводятся без ведущих нулей (например, 12345), функция ДЛСТР вернёт ошибку #ЗНАЧ!, потому что Excel воспринимает их как числовые значения, а не текст. В этом случае используйте комбинацию функций:

```excel

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

```

Здесь ТЕКСТ(A1;"0") преобразует число в текстовый формат без десятичных знаков, а ДЛСТР подсчитывает символы. Например, для числа 123 результат будет 3, а для 1005006.

Нюанс: Если в ячейке содержится дробное число (например, 123.45), формула выше вернёт 5 (цифры до и после точки). Чтобы учитывать только целые разряды, используйте:

```excel

=ДЛСТР(ЦЕЛОЕ(A1))

```

  • ✅ Работает для чисел любого размера
  • ✅ Игнорирует десятичные разряды (если использовать ЦЕЛОЕ)
  • ❌ Не учитывает ведущие нули (даже если они были в исходных данных)
  • ❌ Требует корректировку для отрицательных чисел (см. следующий раздел)
Исходное значение в A1 Формула Результат Пояснение
12345 (число) =ДЛСТР(ТЕКСТ(A1;"0")) 5 5 значащих цифр
0012345 (текст) =ДЛСТР(A1) 7 7 символов, включая нули
-123.45 (число) =ДЛСТР(ТЕКСТ(A1;"0")) 7 Учитывает знак "-" и точку
1E+10 (научное число) =ДЛСТР(ТЕКСТ(A1;"0")) 6 Преобразуется в 10000000000 (11 цифр, но формула даёт 6 из-за формата)
Почему формула возвращает неверное количество цифр для научной нотации?

Excel хранит очень большие или очень маленькие числа в экспоненциальном формате (например, 1E+10 вместо 10000000000). Чтобы получить точный подсчёт, сначала преобразуйте число в текст с нужным количеством знаков: =ДЛСТР(ТЕКСТ(A1;"0;;")) (убирает экспоненту).

3. Учёт отрицательных чисел и десятичных разрядов

Если в ваших данных встречаются отрицательные числа или дроби, базовые формулы дадут некорректный результат. Например, для -123.45 формула =ДЛСТР(ТЕКСТ(A1;"0")) вернёт 7 (учитывая знак "-" и точку), хотя цифр всего 5.

Чтобы подсчитать только цифры, используйте эту модификацию:

```excel

=ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ТЕКСТ(A1;"0");"-";"");",";""))

```

Здесь:

1. ТЕКСТ(A1;"0") преобразует число в текст.

2. ПОДСТАВИТЬ(..., "-", "") удаляет знак минус.

3. ПОДСТАВИТЬ(..., ",", "") удаляет разделитель дробной части (в русскоязычной версии Excel это запятая).

4. ДЛСТР подсчитывает оставшиеся символы (только цифры).

Для англоязычной версии Excel (где разделитель — точка) замените запятую на точку в последней функции:

```excel

=LEN(SUBSTITUTE(SUBSTITUTE(TEXT(A1;"0");"-";"");".";""))

```

⚠️ Внимание: Если в ячейке содержится текст с буквами (например, "А123Б45"), формула вернёт количество всех символов, а не только цифр. Для таких случаев потребуется регулярное выражение (см. раздел про Power Query).

1. Убедитесь, что ячейка содержит число, а не текст

2. Замените в формуле запятую на точку, если используете англоязычный Excel

3. Для научной нотации добавьте параметр формата: ТЕКСТ(A1;"0;;")

4. Проверьте результат на тестовых данных: -123.45 → 5, 1000 → 4-->

4. Подсчёт цифр в смешанных данных (текст + числа)

Когда в ячейке перемешаны буквы, символы и цифры (например, "Договор №123-АБ45"), предыдущие методы не сработают. Здесь поможет регулярное выражение через Power Query или пользовательская функция на VBA.

#### Способ 1: Power Query (без кода)

1. Выделите диапазон данных и перейдите на вкладку Данные → Получение данных → Из таблицы/диапазона.

2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:

```powerquery

= Text.Select([ВашСтолбец], {"0".."9"})

```

3. Затем добавьте ещё один столбец для подсчёта длины:

```powerquery

= Text.Length([ПользовательскийСтолбец.1])

```

4. Удалите вспомогательный столбец и загрузите данные обратно в Excel.

Этот метод извлекает все цифры из строки и подсчитывает их количество. Например, для "А1Б2В3" результат будет 3.

#### Способ 2: VBA-функция (для опытных пользователей)

Если Power Query недоступен, создайте пользовательскую функцию:

1. Нажмите Alt + F11, чтобы открыть редактор VBA.

2. Вставьте новый модуль (Insert → Module) и добавьте код:

```vba

Function COUNT_DIGITS(rng As Range) As Long

Dim str As String

Dim i As Integer

str = rng.Value

For i = 1 To Len(str)

If IsNumeric(Mid(str, i, 1)) Then

COUNT_DIGITS = COUNT_DIGITS + 1

End If

Next i

End Function

```

3. Теперь в Excel можно использовать =COUNT_DIGITS(A1).

  • ✅ Обрабатывает любые символы (буквы, знаки, пробелы)
  • ✅ Подходит для больших массивов данных
  • ❌ Требует навыки работы с Power Query или VBA
  • ❌ Медленнее стандартных формул при большом объёме данных

5. Автоматизация для больших таблиц: Power Query + Excel Tables

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

#### Пошаговая инструкция:

1. Преобразуйте ваш диапазон в Умную таблицу (Главная → Форматировать как таблицу).

2. Перейдите на вкладку Данные → Получение данных → Из таблицы/диапазона.

3. В редакторе Power Query:

- Добавьте пользовательский столбец с формулой:

```powerquery

= try Text.Length(Text.Select([ВашСтолбец], {"0".."9"})) otherwise 0

```

- Переименуйте столбец (например, в "Количество цифр").

4. Нажмите Закрыть и загрузить. Теперь при обновлении исходных данных результат будет пересчитываться автоматически.

Преимущество метода: Вы можете добавить дополнительные преобразования (например, удаление пробелов или замену символов) в том же запросе, не изменяя исходные данные.

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

В реальных данных часто встречаются нюансы, которые ломают стандартные решения:

- Разделители тысяч (например, 1 000 000 вместо 1000000).

- Локальные форматы чисел (в немецком Excel разделитель — точка, а дробная часть отделяется запятой).

- Скрытые символы (неразрывные пробелы, символы валют).

#### Решение для разделителей тысяч:

Используйте функцию ПОДСТАВИТЬ, чтобы удалить пробелы перед подсчётом:

```excel

=ДЛСТР(ПОДСТАВИТЬ(ТЕКСТ(A1;"0");" ";""))

```

#### Решение для локальных форматов:

Если вы работаете с файлом на другом языке, укажите локаль в функции ТЕКСТ:

```excel

=ДЛСТР(ТЕКСТ(A1;"0";"de-DE")) ' Немецкий формат

```

#### Учёт символов валют:

Для чисел с денежными знаками (например, $1 234) используйте:

```excel

=ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ТЕКСТ(A1;"0");"$";"");" ";""))

```

⚠️ Внимание: Функция ТЕКСТ с третьим параметром (локалью) работает только в Excel 2016 и новее. В старых версиях для обработки локальных форматов потребуется VBA или ручная замена символов.

7. Ошибки и их решение: почему формула не работает?

Даже с правильными формулами вы можете столкнуться с ошибками. Рассмотрим типичные проблемы и способы их устранения:

Ошибка Причина Решение
#ЗНАЧ! Ячейка содержит текст, а формула ожидает число (или наоборот) Проверьте формат ячейки (Главная → Формат → Формат ячеек). При необходимости используйте ЗНАЧЕН() для преобразования текста в число.
#ИМЯ? Опечатка в названии функции или использование англоязычной функции в русскоязычном Excel Замените LEN на ДЛСТР, SUBSTITUTE на ПОДСТАВИТЬ и т.д.
Некорректный результат (например, 7 вместо 5) Формула учитывает знаки препинания (точку, запятую, минус) Добавьте в формулу замену ненужных символов (см. раздел 3).
Формула работает медленно Слишком много вложенных функций или обработка большого диапазона Замените формулы на Power Query или VBA. Также можно использовать Вычисления → Ручное для ускорения работы.
Ведущие нули пропадают Ячейка отформатирована как "Числовой" или "Общий" Измените формат на "Текстовый" или добавьте апостроф перед числом ('00123).

Если ни один из методов не сработал, проверьте скрытые символы в данных. Например, неразрывный пробел (Char(160)) визуально неотличим от обычного, но ломает многие формулы. Чтобы его удалить:

```excel

=ПОДСТАВИТЬ(A1;СИМВОЛ(160);"")

```

FAQ: Частые вопросы по подсчёту цифр в Excel

Можно ли подсчитать цифры в диапазоне сразу (например, в A1:A100)?

Да, но стандартные формулы Excel не поддерживают обработку массивов в старых версиях. Варианты решения:

  1. Используйте Power Query (см. раздел 5).
  2. В Excel 365 или Excel 2021 применяйте динамические массивы:
    =ДЛСТР(ТЕКСТ(A1:A100;"0"))

    Формула автоматически заполнит соседние ячейки.

  3. Создайте столбец с формулой и протяните её на весь диапазон.
Как посчитать количество уникальных цифр в числе (например, в 11234 уникальных цифр 4: 1, 2, 3, 4)?

Для этого потребуется комбинация функций или VBA. Пример формулы для числа в ячейке A1:

=СУММПРОИЗВ(--(ЧАСТОТА(ПСТР(ТЕКСТ(A1;"0");СТРОКА(ДВССЫЛ("1:"&ДЛСТР(ТЕКСТ(A1;"0"))));1);ПСТР(ТЕКСТ(A1;"0");СТРОКА(ДВССЫЛ("1:"&ДЛСТР(ТЕКСТ(A1;"0"))));1))>0))

В Excel 365 можно использовать более простую версию с UNIQUE и TEXTJOIN.

Почему функция ДЛСТР возвращает 0 для пустой ячейки?

Это ожидаемое поведение: ДЛСТР для пустой ячейки всегда возвращает 0. Если вам нужно игнорировать пустые ячейки, добавьте проверку:

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

Или используйте:

=ЕСЛИОШИБКА(ДЛСТР(ТЕКСТ(A1;"0"));0)
Как посчитать цифры в номере телефона с разделителями (например, 8 (912) 345-67-89)?

Используйте функцию ПОДСТАВИТЬ для удаления всех нецифровых символов:

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

Для телефона 8 (912) 345-67-89 результат будет 11.

Можно ли использовать эту технику в Google Sheets?

Да, все описанные методы работают и в Google Таблицах, но с поправками:

  • Функция ДЛСТР называется LEN.
  • Функция ПОДСТАВИТЬSUBSTITUTE.
  • Для Power Query используйте Apps Script.
  • В Google Таблицах нет функции ТЕКСТ с локалью, но можно использовать TO_TEXT или REGEXREPLACE.

Пример формулы для подсчёта цифр в числе:

=LEN(SUBSTITUTE(TO_TEXT(A1);"-";""))