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

Если вам нужно сложить не значения в ячейках, а именно цифры внутри числа (например, для числа 1234 получить 10 как 1+2+3+4), стандартная функция СУММ() не подойдёт. В Excel нет встроенной команды для такой операции, но задачу можно решить минимум пятью способами: от элементарных формул с разбором числа по символам до автоматизации через VBA. Далее разберём каждый метод с примерами, нюансами и типичными ошибками.

Важно отличать эту задачу от суммирования значений ячеек (где работает СУММ) или подсчёта количества цифр (для этого есть ДЛСТР + замена нецифровых символов). Здесь речь именно о сложении цифр внутри одного числа, текстовой строки или диапазона. Например, для ячейки с текстом "А1Б2В3" сумма цифр составит 6, а для даты 15.07.202619 (1+5+0+7+2+0+2+4).

1. Базовый метод: формула с разбором числа по разрядам

Самый надёжный способ для чисел без текста — разложить число на разряды с помощью функций ЦЕЛОЕ(), ОСТАТ() и СТЕПЕНЬ(). Подходит для чисел до 15 знаков (ограничение Excel). Формула для ячейки A1:

=ОСТАТ(A1;10) + ОСТАТ(ЦЕЛОЕ(A1/10);10) + ОСТАТ(ЦЕЛОЕ(A1/100);10) + ОСТАТ(ЦЕЛОЕ(A1/1000);10) + ...

Минус метода — нужно вручную добавлять слагаемые для каждого разряда. Для 5-значного числа формула будет такой:

=ОСТАТ(A1;10) + ОСТАТ(ЦЕЛОЕ(A1/10);10) + ОСТАТ(ЦЕЛОЕ(A1/100);10) + ОСТАТ(ЦЕЛОЕ(A1/1000);10) + ОСТАТ(ЦЕЛОЕ(A1/10000);10)
  • ✅ Работает для чисел с десятичными разрядами (игнорирует дробную часть).
  • ✅ Не требует дополнительных столбцов.
  • ❌ Трудоёмко для чисел с большим количеством знаков.
  • ❌ Не подходит для текста с цифрами (например, "Абв123").
⚠️ Внимание: Если в ячейке текст (например, "123г"), формула вернёт ошибку #ЗНАЧ!. Для смешанных данных используйте методы из раздела 3.

2. Универсальный способ: функция ПОИСК + ПСТР

Для подсчёта цифр в любом формате (числа, текст, даты) подходит комбинация функций ПОИСК(), ПСТР() и КОДСИМВ(). Логика: проходим по каждому символу строки, проверяем, является ли он цифрой (коды символов цифр от 48 до 57), и суммируем.

Формула для ячейки A1 (массивная, вводится через Ctrl+Shift+Enter в старых версиях Excel):

=СУММ(

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

--(КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))<=57)

* (КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))-48)

)

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

  1. ДЛСТР(A1) — определяет длину строки.
  2. ПСТР извлекает каждый символ по порядку.
  3. КОДСИМВ проверяет, является ли символ цифрой.
  4. --() преобразует ИСТИНА/ЛОЖЬ в 1/0.
  5. СУММ складывает все найденные цифры.
Исходное значениеФормулаРезультат
12345=СУММ(...) (см. выше)15
"А1Б2В3"=СУММ(...)6
15.07.2026=СУММ(...)19
"Тест: 100%"=СУММ(...)1

3. Альтернатива: функция СУММПРОИЗВ + ПОДСТА

Более компактный вариант для текста с цифрами — использование СУММПРОИЗВ с регулярным выражением через ПОДСТА. Подходит для Excel 2013 и новее:

=СУММПРОИЗВ(

--МНОЖ.ЕСЛИ(

--НЕ(ЕОШ(ПОДСТА(СТРОКА(ДВССЫЛ("1:9"));A1;СТРОКА(ДВССЫЛ("1:9")))))

; СТРОКА(ДВССЫЛ("1:9")))

)

Разбор:

  • ПОДСТА ищет вхождение каждой цифры (19) в тексте.
  • МНОЖ.ЕСЛИ умножает найденную цифру на её значение.
  • СУММПРОИЗВ суммирует результаты.
  • ❌ Не работает с 0 (нужно добавлять отдельное условие).
⚠️ Внимание: В Excel 2010 и старше МНОЖ.ЕСЛИ недоступна. Используйте метод из раздела 2 или VBA.
📊 Какой метод вы используете чаще?
Формулы с разрядами
ПОИСК + ПСТР
СУММПРОИЗВ + ПОДСТА
VBA-макрос

4. Подсчёт цифр в диапазоне ячеек

Чтобы посчитать сумму всех цифр во всём диапазоне (например, A1:A10), оберните любую из формул выше в СУММ:

=СУММ(

СУММПРОИЗВ(--НЕ(ЕОШ(ПОДСТА(СТРОКА(ДВССЫЛ("1:9"));A1:A10;СТРОКА(ДВССЫЛ("1:9")))))) * СТРОКА(ДВССЫЛ("1:9"))

)

Для диапазона с числами и текстом лучше создать вспомогательный столбец:

  1. В столбце B примените формулу из раздела 2 для каждой ячейки A1, A2 и т.д.
  2. Внизу столбца B используйте =СУММ(B1:B10).
ДиапазонФормулаРезультат
A1:A3 с значениями 123, "А4Б5", 678=СУММ(формула для A1:A3)28 (6+9+13)
B2:B5 с датами 10.05.2023, 11.06.2023=СУММ(формула для B2:B5)24

Проверьте, нет ли в ячейках ошибок (#ДЕЛ/0!, #ЗНАЧ!)|Убедитесь, что текстовые данные не содержат неразрывных пробелов (используйте =ПЕЧСИМВ())|Для больших диапазонов (>1000 строк) используйте Power Query или VBA|Сохраните резервную копию файла перед массовыми вычислениями-->

5. Автоматизация через VBA-макрос

Для обработки больших объёмов данных или регулярного использования напишите VBA-функцию. Откройте редактор (Alt+F11), вставьте новый модуль и добавьте код:

Function SumDigits(rng As Range) As Long

Dim cell As Range

Dim char As String

Dim i As Integer

Dim sum As Long

For Each cell In rng

For i = 1 To Len(cell.Value)

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

If IsNumeric(char) Then

sum = sum + Val(char)

End If

Next i

Next cell

SumDigits = sum

End Function

Теперь в Excel можно использовать =SumDigits(A1) для одной ячейки или =SumDigits(A1:A10) для диапазона. Преимущества:

  • ✅ Работает с любыми символами (текст, даты, спецсимволы).
  • ✅ Обрабатывает диапазоны за один вызов.
  • ✅ Быстрее формул для больших данных (>10 000 строк).
  • ❌ Требует разрешения на выполнение макросов.
⚠️ Внимание: Если макрос возвращает #VALUE!, проверьте настройки безопасности Excel: Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов (выберите "Включить все макросы").
Как ускорить макрос для 100 000+ строк

Добавьте в начало кода строку Application.ScreenUpdating = False и в конец — Application.ScreenUpdating = True. Это отключит обновление экрана во время выполнения. Также замените For Each на обработку массива:

Dim arr As Variant

arr = rng.Value

For i = 1 To UBound(arr, 1)

For j = 1 To Len(arr(i, 1))

' ... обработка ...

Next j

Next i

6. Типичные ошибки и как их исправить

Даже с правильными формулами результат может быть неверным. Рассмотрим распространённые проблемы:

ОшибкаПричинаРешение
#ЗНАЧ!В ячейке текст без цифр или пустая ячейка.Добавьте проверку ЕСЛИ(A1="";0;формула).
#ЧИСЛО!Слишком длинная строка (>32767 символов).Разбейте данные на части или используйте VBA.
Неправильная суммаФормула не учитывает 0.Добавьте в СУММПРОИЗВ условие для 0:
Медленная работаСлишком много вложенных функций.Переведите данные в Значения (Копировать → Специальная вставка).

Особое внимание уделите региональным настройкам:

  • 📌 В русскоязычной версии Excel разделитель аргументов функции — ;, в англоязычной — ,.
  • 📌 Функции ПОДСТА и ПОИСК чувствительны к регистру в некоторых версиях.
  • 📌 Даты хранятся как числа — для их обработки сначала преобразуйте в текст (=ТЕКСТ(A1;"дд.мм.гггг")).

7. Продвинутые сценарии: сумма цифр с условиями

Иногда нужно суммировать цифры только при выполнении условий. Например:

  • 🔢 Суммировать цифры только в ячейках, где число > 1000.
  • 🔢 Учитывать только нечётные цифры.
  • 🔢 Игнорировать цифры после определённого символа (например, "123-456" → суммировать только 1+2+3).

Пример формулы для суммы цифр в ячейках, где значение > 1000:

=СУММЕСЛИ(

A1:A10; ">1000";

--(ДЛСТР(A1:A10)-ДЛСТР(ПОДСТА(A1:A10;"0";""))) * --ЛЕВБ(A1:A10;1) + ...

' ... продолжение формулы разбора цифр

)

Для нечётных цифр модифицируйте универсальную формулу (раздел 2), добавив проверку:

=СУММ(

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

--(КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))<=57);

--(НЕЧЁТ(КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))-48))

* (КОДСИМВ(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))-48)

)

FAQ: Частые вопросы

Можно ли посчитать сумму цифр в Google Таблицах?

Да, все приведённые формулы работают и в Google Sheets, за исключением ДВССЫЛ (замените на INDIRECT) и VBA (используйте Apps Script). Например, универсальная формула для Google Sheets:

=SUM(

ARRAYFORMULA(

IF(CODE(MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1))>=48;

IF(CODE(MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1))<=57;

CODE(MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1))-48;0);0)

)

)

Почему формула возвращает 0 для ячейки с числом?

Вероятные причины:

  1. Ячейка отформатирована как текст. Проверьте формат (Числовой или Общий).
  2. Число хранится как дата (например, 15.07.2026 — это число 45487 в формате даты). Преобразуйте в текст (=ТЕКСТ(A1;"ддммгггг")).
  3. Формула не учитывает ноль. Добавьте условие для 0 (код символа 48).
Как посчитать сумму цифр в столбце с телефонными номерами?

Используйте универсальную формулу (раздел 2) или VBA. Для телефонов в формате +7 (123) 456-78-90 предварительно удалите нецифровые символы:

=СУММ(

--(КОДСИМВ(ПСТР(ПОДСТА(ПОДСТА(ПОДСТА(ПОДСТА(A1;"(";"");")";"");"-";"");" ";"");

СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1))>=48);

--(...)<=57)

* (...)-48

)

Есть ли готовая надстройка для этой задачи?

Да, в Excel App Store доступны бесплатные надстройки:

  • Kutools for Excel (функция Sum Numbers in Cells).
  • Ablebits (инструмент Sum digits).
  • Power Query (встроенный в Excel 2016+) — импортируйте данные как таблицу и добавьте пользовательский столбец с формулой.

Для установки: Вставка → Надстройки → Просмотреть надстройки.

Как посчитать сумму цифр в диапазоне с учётом цвета ячейки?

Стандартными формулами это невозможно. Используйте VBA:

Function SumDigitsByColor(rng As Range, color As Range) As Long

Dim cell As Range, char As String, i As Integer

Dim sum As Long, targetColor As Long

targetColor = color.Interior.Color

For Each cell In rng

If cell.Interior.Color = targetColor Then

For i = 1 To Len(cell.Value)

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

If IsNumeric(char) Then sum = sum + Val(char)

Next i

End If

Next cell

SumDigitsByColor = sum

End Function

Вызов: =SumDigitsByColor(A1:A10;B1), где B1 — ячейка с нужным цветом фона.