Почему подсчёт цифр в Excel — не такая простая задача, как кажется
На первый взгляд, подсчитать количество цифр в столбце Microsoft Excel — тривиальная задача. Однако многие пользователи сталкиваются с неожиданными сложностями: программа не различает числа и текстовые представления чисел, игнорирует ведущие нули, а стандартная функция ДЛСТР() работает только с текстовыми строками. Например, если в ячейке записано число 12345, то ДЛСТР(A1) вернёт 5 символов, но если это число отформатировано как текст "0012345" — результат уже будет 7.
Ещё одна ловушка — отрицательные числа и дробные значения. Скажем, для ячейки с -123,45 нужно ли учитывать знак «минус» и разделитель? А как быть с научной нотацией (1,23E+05)? Без чёткого понимания требований даже опытные пользователи получают неверные результаты. В этой статье мы разберём 5 надёжных методов, которые покрывают 90% практических сценариев — от базовых формул до автоматизации через VBA.
Метод 1: Подсчёт цифр в числовых значениях (без учёта форматирования)
Если ваш столбец содержит числа в стандартном формате (без ведущих нулей и текстовых преобразований), самый простой способ — использовать комбинацию функций ДЛСТР() и ПОДСТАВИТЬ(). Эта формула удаляет все нецифровые символы, а затем считает длину оставшейся строки:
=ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ТЕКСТ(A1);"-";"");",";"");" ";"");".";""))
Разберём по шагам:
- 🔹
ТЕКСТ(A1)— преобразует число в текстовый формат, чтобы избежать ошибок с датами или временем. - 🔹
ПОДСТАВИТЬ(..., "-", "")— удаляет знак «минус» (если число отрицательное). - 🔹
ПОДСТАВИТЬ(..., ",", "")иПОДСТАВИТЬ(..., ".", "")— убирают разделители тысяч и десятичную точку. - 🔹
ДЛСТР()— считает количество оставшихся символов (только цифры).
⚠️ Внимание: Эта формула не учитывает ведущие нули в текстовых ячейках (например, "00123" вернёт 3, а не 5). Для таких случаев используйте Метод 2.
Ячейки содержат только числа (не текст)|Нет ведущих нулей|Отрицательные числа нужно учитывать без знака "минус"|Дробные значения должны считаться без точки/запятой-->
Метод 2: Учёт ведущих нулей и текстовых чисел
Когда данные хранятся как текст (например, артикулы "00012345" или телефонные номера "8(800)555-35-35"), стандартные функции Excel их «не видят». Здесь поможет формула с регулярными выражениями через ПОИСКПОЗ и ПСТР, но проще использовать Power Query или VBA. Однако для быстрого решения подойдёт такой вариант:
=СУММПРОИЗВ(--(НЕОШ(ПОИСКПОЗ({0;1;2;3;4;5;6;7;8;9};A1&"0123456789";1)))))
Как это работает:
- Функция
ПОИСКПОЗищет каждую цифру от 0 до 9 в ячейкеA1. - Если цифра найдена,
НЕОШвозвращаетИСТИНА, иначе — ошибку. --(НЕОШ(...))преобразует результат в 1 (если цифра есть) или 0 (если нет).СУММПРОИЗВсуммирует все единицы, давая общее количество цифр.
💡 Пример: Для ячейки "Товар #007" формула вернёт 3 (цифры 0, 0, 7).
Как числа (без ведущих нулей)|Как текст (с ведущими нулями)|Смешанно (и числа, и текст)|Не знаю, как определить-->
Метод 3: Power Query для массовой обработки данных
Если вам нужно обработать тысячи строк или регулярно обновлять отчёты, ручные формулы станут тормозить производительность. В этом случае Power Query (доступен в Excel 2016+) — оптимальное решение. Алгоритм действий:
- Выделите столбец с данными → вкладка
Данные→Из таблицы/диапазона. - В открывшемся редакторе Power Query выделите столбец →
Преобразовать→Заменить значения. - Удалите все нецифровые символы (замените на пустую строку):
- 🔹 Заменить
-на""(минус). - 🔹 Заменить
,и.на""(разделители). - 🔹 Заменить
(,),на""(скобки и пробелы).
- 🔹 Заменить
Добавление столбца → Настраиваемый столбец с формулой = Text.Length([Column1]).⚠️ Внимание: После импорта данных обратно в Excel новый столбец с количеством цифр будет статичным. Чтобы обновить результаты, кликните правой кнопкой по таблице → Обновить.
| Исходные данные | Формула Excel | Power Query | Результат |
|---|---|---|---|
12345 |
=ДЛСТР(А1) |
Text.Length("12345") |
5 |
-123,45 |
=ДЛСТР(ПОДСТАВИТЬ(А1;"-";""))-1 |
Text.Length("12345") |
5 |
"007" |
=3 (ручной подсчёт) |
Text.Length("007") |
3 |
"ABC123" |
=СУММПРОИЗВ(--НЕОШ(ПОИСКПОЗ({0;1;2;3;4;5;6;7;8;9};A1))) |
Text.Length("123") |
3 |
Метод 4: VBA для сложных сценариев (включая научную нотацию)
Если ваши данные содержат научную нотацию (например, 1,23E+05), формулы и Power Query дадут сбой. Здесь поможет макрос на VBA, который обрабатывает любые форматы:
Function CountDigits(rng As Range) As Long
Dim str As String
Dim i As Integer, digitCount As Long
str = CStr(rng.Value)
digitCount = 0
For i = 1 To Len(str)
If Mid(str, i, 1) >= "0" And Mid(str, i, 1) <= "9" Then
digitCount = digitCount + 1
End If
Next i
CountDigits = digitCount
End Function
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код выше в модуль (меню
Insert → Module). - В Excel введите в ячейке
=CountDigits(A1).
🔹 Преимущества: Работает с любыми форматами, включая 1.23E+05 (вернёт 5 цифр: 1, 2, 3, 0, 5).
🔹 Недостатки: Требует разрешения на выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Включить все макросы).
Метод 5: Подсчёт уникальных цифр в столбце
Иногда требуется не общее количество цифр, а количество уникальных цифр в каждой ячейке. Например, для номера 112233 уникальных цифр всего 3 (1, 2, 3). Решение:
=СУММ(--(ЧАСТОТА(ПСТР(ПОДСТАВИТЬ(A1;",";"");СТРОКА(ДВССЫЛ("1:10"));1)+0;ПСТР(ПОДСТАВИТЬ(A1;",";"");СТРОКА(ДВССЫЛ("1:10"));1)+0)>0))
Альтернатива через Power Query:
- Добавьте столбец с формулой
= Text.ToList([Column1])(преобразует строку в список символов). - Разверните список в новые строки (
Преобразовать → Развернуть в новые строки). - Отфильтруйте только цифры (
0-9). - Сгруппируйте по исходному значению и посчитайте уникальные цифры (
Группировка → Количество уникальных значений). - 🚫 Игнорирование формата ячеек: Число
123и текст"123"обрабатываются по-разному. Всегда проверяйте формат черезФормат ячеек(Ctrl + 1). - 🚫 Пустые ячейки: Формулы могут возвращать ошибку на пустых ячейках. Используйте
ЕСЛИ(A1="";0;формула)для защиты. - 🚫 Локальные настройки: В русских версиях Excel разделителем дробной части служит запятая (
,), а в английских — точка (.). Учитывайте это в формулах. - 🚫 Скрытые символы: Непечатаемые символы (например,
CHAR(160)— неразрывный пробел) могут искажать результат. ИспользуйтеПЕЧСИМВ(A1)для их удаления. - Ячейка содержит ошибку (например,
#ДЕЛ/0!). - Формула массива введена без
Ctrl+Shift+Enter(в Excel до 2019). - Используются несовместимые типы данных (например, текст вместо числа в
ЧАСТОТА).
⚠️ Внимание: Формула массива требует ввода через Ctrl + Shift + Enter в старых версиях Excel (до 2019). В Excel 365 она работает как обычная формула.
Почему ЧАСТОТА не работает с текстовыми числами?
Функция ЧАСТОТА ожидает числовые массивы, а текстовые символы (например, "0") она воспринимает как 0. Поэтому перед использованием ЧАСТОТА нужно преобразовать каждый символ в число с помощью +0 или ЗНАЧЕН.
Типичные ошибки и как их избежать
Даже опытные пользователи допускают ошибки при подсчёте цифр. Вот самые распространённые:
📌 Проверенный лайфхак: Чтобы увидеть все скрытые символы, включите Главная → Редактирование → Заменить и в поле Найти введите ~ (тильда). Это отобразит все непечатаемые знаки.
FAQ: Ответы на частые вопросы
Можно ли посчитать цифры в диапазоне, а не в отдельной ячейке?
Да, используйте функцию СУММПРОИЗВ с массивом. Например, для диапазона A1:A10:
=СУММПРОИЗВ(ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1:A10;"-";"");",";"");".";"")))
В Excel 365 можно использовать СУММ(КАРТА(A1:A10;ЛЯМБДА(x;ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(x;"-";"");",";""))))).
Как посчитать цифры в датах (например, "01.01.2023")?
Даты в Excel хранятся как числа (количество дней с 1900 года). Чтобы посчитать цифры в текстовом представлении даты, используйте:
=ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ТЕКСТ(A1;"дд.мм.гггг");".";"");" ";""))
Для даты 01.01.2023 результат будет 8 (цифры: 0,1,0,1,2,0,2,3).
Почему моя формула возвращает #ЗНАЧ!?
Ошибка #ЗНАЧ! возникает, если:
Решение: проверьте исходные данные на ошибки и используйте ЕСЛИОШИБКА для обработки.
Как посчитать цифры в ячейке, игнорируя буквы и символы?
Используйте формулу из Метода 2 или этот упрощённый вариант:
=СУММ(--(НЕОШ(ЗНАЧЕН(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)))))
Она пытается преобразовать каждый символ в число и суммирует успешные попытки.
Можно ли автоматизировать подсчёт цифр при изменении данных?
Да, есть три способа:
- Формулы: Обновляются автоматически при изменении исходных данных.
- Power Query: Требует ручного обновления (клик правой кнопкой по таблице →
Обновить). - VBA: Можно добавить обработчик события
Worksheet_Change, чтобы макрос срабатывал при редактировании ячеек.