Подсчёт количества цифр в числах — задача, с которой сталкиваются бухгалтеры при проверке корректности идентификаторов, аналитики при обработке больших массивов данных, и даже маркетологи при сегментации клиентских баз по номерам телефонов. В Microsoft Excel нет встроенной функции вроде КОЛИЧЕСТВО_ЦИФР(), но решить эту задачу можно минимум пятью разными способами — от элементарных формул до автоматизации через VBA.
Чаще всего пользователи ищут решение для двух сценариев: подсчёт всех цифр в числе (включая нули в начале, если они отображаются как текст) и подсчёт только значащих цифр (игнорируя ведущие нули и форматирование). Например, в номере договора 0012345 может потребоваться учитывать все 7 символов или только 5 значащих цифр. В этой статье разберём оба варианта с учётом нюансов форматирования ячеек.
Многие ошибочно полагают, что для этой задачи обязательно нужен Visual Basic for Applications или сложные массивы. На практике же 80% случаев покрываются стандартными функциями ДЛСТР() и ЛЕН() в комбинации с ЗАМЕНИТЬ(). А для обработки тысяч строк достаточно одного клика — если правильно настроить Power Query.
1. Базовый метод: функция ДЛСТР для текстовых чисел
Самый простой способ работает, если ваши числа хранятся как текст (например, артикулы "001945" или телефонные номера "89123456789"). В этом случае достаточно применить функцию ДЛСТР (или её английский аналог LEN):
```excel
=ДЛСТР(A1)
```
Функция вернёт количество всех символов в ячейке, включая ведущие нули, пробелы и даже невидимые знаки (например, символы табуляции). Это идеально подходит для проверки корректности ввода данных, когда важна точная длина строки.
Пример: Если в ячейке A1 записан текст "007", формула вернёт 3, а не 2 (как было бы при автоматическом преобразовании в число).
⚠️ Внимание: Если ячейка отформатирована как "Числовой формат", но содержит ведущие нули (например,00123), Excel автоматически обрежет их при вводе. Чтобы сохранить нули, предварительно измените формат ячейки наТекстовый(Главная → Формат → Формат ячеек → Текстовый).
- ✅ Работает для любых символов, не только цифр
- ✅ Не требует дополнительных функций
- ❌ Не подходит для чисел без ведущих нулей (вернёт ошибку или некорректный результат)
- ❌ Учитывает пробелы и скрытые символы
2. Подсчёт цифр в числовых значениях (без ведущих нулей)
Когда числа вводятся без ведущих нулей (например, 12345), функция ДЛСТР вернёт ошибку #ЗНАЧ!, потому что Excel воспринимает их как числовые значения, а не текст. В этом случае используйте комбинацию функций:
```excel
=ДЛСТР(ТЕКСТ(A1;"0"))
```
Здесь ТЕКСТ(A1;"0") преобразует число в текстовый формат без десятичных знаков, а ДЛСТР подсчитывает символы. Например, для числа 123 результат будет 3, а для 100500 — 6.
Нюанс: Если в ячейке содержится дробное число (например, 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. Нажмите Преимущество метода: Вы можете добавить дополнительные преобразования (например, удаление пробелов или замену символов) в том же запросе, не изменяя исходные данные.
В реальных данных часто встречаются нюансы, которые ломают стандартные решения:
- Разделители тысяч (например, - Локальные форматы чисел (в немецком Excel разделитель — точка, а дробная часть отделяется запятой). - Скрытые символы (неразрывные пробелы, символы валют). #### Решение для разделителей тысяч:
Используйте функцию ```excel =ДЛСТР(ПОДСТАВИТЬ(ТЕКСТ(A1;"0");" ";"")) ``` #### Решение для локальных форматов:
Если вы работаете с файлом на другом языке, укажите локаль в функции ```excel =ДЛСТР(ТЕКСТ(A1;"0";"de-DE")) ' Немецкий формат ``` #### Учёт символов валют:
Для чисел с денежными знаками (например, ```excel =ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ТЕКСТ(A1;"0");"$";"");" ";"")) ``` Даже с правильными формулами вы можете столкнуться с ошибками. Рассмотрим типичные проблемы и способы их устранения:
Если ни один из методов не сработал, проверьте скрытые символы в данных. Например, неразрывный пробел ( ```excel =ПОДСТАВИТЬ(A1;СИМВОЛ(160);"") ``` Да, но стандартные формулы Excel не поддерживают обработку массивов в старых версиях. Варианты решения: Формула автоматически заполнит соседние ячейки.Умную таблицу (Главная → Форматировать как таблицу).Данные → Получение данных → Из таблицы/диапазона.Закрыть и загрузить. Теперь при обновлении исходных данных результат будет пересчитываться автоматически.6. Продвинутые сценарии: учёт форматирования и локализации
1 000 000 вместо 1000000).ПОДСТАВИТЬ, чтобы удалить пробелы перед подсчётом:ТЕКСТ:$1 234) используйте:⚠️ Внимание: Функция ТЕКСТ с третьим параметром (локалью) работает только в Excel 2016 и новее. В старых версиях для обработки локальных форматов потребуется VBA или ручная замена символов.
7. Ошибки и их решение: почему формула не работает?
Ошибка
Причина
Решение
#ЗНАЧ!Ячейка содержит текст, а формула ожидает число (или наоборот)
Проверьте формат ячейки (
Главная → Формат → Формат ячеек). При необходимости используйте ЗНАЧЕН() для преобразования текста в число.
#ИМЯ?Опечатка в названии функции или использование англоязычной функции в русскоязычном Excel
Замените
LEN на ДЛСТР, SUBSTITUTE на ПОДСТАВИТЬ и т.д.
Некорректный результат (например, 7 вместо 5)
Формула учитывает знаки препинания (точку, запятую, минус)
Добавьте в формулу замену ненужных символов (см. раздел 3).
Формула работает медленно
Слишком много вложенных функций или обработка большого диапазона
Замените формулы на Power Query или VBA. Также можно использовать
Вычисления → Ручное для ускорения работы.
Ведущие нули пропадают
Ячейка отформатирована как "Числовой" или "Общий"
Измените формат на "Текстовый" или добавьте апостроф перед числом (
'00123).Char(160)) визуально неотличим от обычного, но ломает многие формулы. Чтобы его удалить:
FAQ: Частые вопросы по подсчёту цифр в Excel
Можно ли подсчитать цифры в диапазоне сразу (например, в A1:A100)?
=ДЛСТР(ТЕКСТ(A1:A100;"0"))
Как посчитать количество уникальных цифр в числе (например, в 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);"-";""))