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

Вы когда-нибудь сталкивались с ситуацией, когда в Excel нужно просуммировать только те ячейки, которые выделены определённым цветом? Стандартные функции СУММ() или СУММЕСЛИ() здесь бессильны — они не умеют анализировать цвет фона. А вручную перебирать сотни строк? Это неэффективно и чревато ошибками.

На самом деле, задача решаема — и мы рассмотрим 5 проверенных способов, включая формулы для новичков, надстройки для тех, кто не хочет копаться в коде, и VBA-скрипты для продвинутых пользователей. Важно: методы работают в Excel 2010–2023 (включая Microsoft 365), но некоторые требуют включения макросов. Готовы разобраться?

Почему стандартные функции Excel не видят цвет ячеек

Перед тем как перейти к решениям, стоит понять, почему СУММЕСЛИ() или СУММПРОИЗВ() не могут отфильтровать ячейки по цвету. Дело в том, что цвет фона — это свойство оформления, а не данных. Excel хранит цвета в отдельном слое форматирования, который:

  • 🔹 Не доступен для анализа стандартными формулами (они работают только с значениями и текстом).
  • 🔹 Не индексируется как часть данных (в отличие от условного форматирования, где цвет зависит от правила).
  • 🔹 Может быть назначен вручную или через Условное форматирование, но в обоих случаях формулы его "не видят".

Есть исключение: если цвет ячейки задаётся через Условное форматирование на основе формулы (например, =A1>100), то можно обойтись без VBA. Но в 90% случаев пользователи красят ячейки вручную — и тут уже не обойтись без дополнительных инструментов.

⚠️ Внимание: Если вы используете Google Таблицы, то там задача решается проще — через функцию =SUMIFS() с параметром цвета (доступно с 2022 года). Но в Excel такого функционала нет, поэтому читаем дальше.

Способ 1: Функция GET.CELL (для опытных пользователей)

Это полускрытая функция Excel, которая позволяет получить информацию о формате ячейки, включая цвет фона. Она не документирована в справочнике, но работает во всех версиях. Минус: требует предварительной настройки имени.

Алгоритм действий:

  1. Выделите диапазон, где нужно посчитать цветные ячейки (например, A1:A100).
  2. Перейдите на вкладку Формулы → Диспетчер имен → Создать.
  3. В поле Имя введите ЦветЯчейки, а в поле Формула:
    =GET.CELL(38,!A1)

    Здесь 38 — код свойства цвета фона, а !A1 — относительная ссылка на первую ячейку диапазона.

  4. Нажмите OK и закройте диспетчер имён.
  5. Теперь в любой ячейке введите формулу:
    =СУММПРОИЗВ(--(ЦветЯчейки=3);A1:A100)

    где 3 — это код красного цвета (см. таблицу ниже), а A1:A100 — диапазон для суммирования.

Коды популярных цветов в Excel:

ЦветКодПример оттенка
Красный3#FF0000
Зелёный4#00FF00
Синий5#0000FF
Жёлтый6#FFFF00
Белый (нет заливки)0#FFFFFF
⚠️ Внимание: Функция GET.CELL возвращает код цвета только для ячеек, окрашенных вручную. Если цвет назначен через Условное форматирование, она вернёт 0 (нет заливки), даже если ячейка визуально цветная.
📊 Какой способ вам кажется самым удобным?
Формулы с GET.CELL
Надстройки (например, Ablebits)
VBA-скрипты
Фильтр по цвету вручную

Способ 2: Надстройка Ablebits для суммирования по цвету

Если вы не хотите возиться с формулами или VBA, можно воспользоваться платной надстройкой Ablebits Ultimate Suite. Она добавляет в Excel функцию =SUMBYCOLOR(), которая работает интуитивно:

  • 📌 Устанавливается за 2 минуты (есть бесплатная пробная версия).
  • 📌 Поддерживает суммирование по цвету шрифта и фона.
  • 📌 Работает с ячейками, окрашенными вручную и через условное форматирование.

Пример использования:

=SUMBYCOLOR(A1:A100; "red")

Где "red" можно заменить на:

  • "#FF0000" (HEX-код цвета),
  • "RGB(255,0,0)" (RGB-значение),
  • или просто указать ячейку с нужным цветом: =SUMBYCOLOR(A1:A100; B2) (где B2 — ячейка красного цвета).

Преимущество метода: не требует знания VBA и работает в Excel Online (если надстройка установлена в десктопной версии). Недостаток: платное решение (от $39 за лицензию).

Способ 3: VBA-скрипт для суммирования по цвету

Если вы готовы использовать макросы, то VBA — самый гибкий способ. Ниже приведён скрипт, который суммирует все ячейки выделенного диапазона с заданным цветом фона.

Как установить:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль: Insert → Module.
  3. Скопируйте туда этот код:
    Function SumByColor(rng As Range, colorCell As Range) As Double
    

    Dim cl As Range

    Dim sum As Double

    sum = 0

    For Each cl In rng

    If cl.Interior.Color = colorCell.Interior.Color Then

    sum = sum + cl.Value

    End If

    Next cl

    SumByColor = sum

    End Function

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

Теперь в любой ячейке можно использовать функцию:

=SumByColor(A1:A100; B2)

Где A1:A100 — диапазон для суммирования, а B2 — ячейка с нужным цветом фона.

Плюсы метода:

  • 🔧 Работает с любыми цветами, включая пользовательские.
  • 🔧 Можно модифицировать скрипт для суммирования по цвету шрифта (замените Interior.Color на Font.Color).
⚠️ Внимание: Если цвет ячейки задан через Условное форматирование, VBA вернёт цвет по умолчанию (обычно белый). Чтобы это обойти, нужно анализировать правила условного форматирования — это сложнее, и мы рассмотрим такой случай в следующем разделе.

Убедиться, что макросы разрешены (Файл → Параметры → Центр управления безопасностью)|Сохранить файл как .xlsm (иначе макросы не сохранятся)|Проверить, что цвет ячеек назначен вручную, а не через условное форматирование|Сделать резервную копию файла на случай ошибок-->

Способ 4: Суммирование ячеек с цветом из условного форматирования

Если цвет ячеек назначен через Условное форматирование, то предыдущие методы не сработают — нужно анализировать правила, по которым ячейка окрашивается. Например, если у вас правило "Закрасить красным все ячейки со значением > 100", то можно обойтись без VBA.

Решение: Используйте формулу, которая проверяет условие условного форматирования, а не сам цвет. Например:

=СУММЕСЛИ(A1:A100; ">100")

Но что делать, если правило условного форматирования сложное (например, "Закрасить зелёным ячейки, где значение между 50 и 100, ИЛИ где текст содержит 'Да'")? Здесь поможет комбинация функций:

=СУММПРОИЗВ(A1:A100; --((A1:A100>=50)*(A1:A100<=100) + ЕСЛИОШИБКА(НАЙТИ("Да";A1:A100);0)))

Если же правило условного форматирования использует формулу (например, =ИЛИ(B1="Да"; C1>100)), то можно:

  1. Скопировать эту формулу в отдельный столбец (например, D1).
  2. Использовать СУММПРОИЗВ с проверкой результата:
    =СУММПРОИЗВ(A1:A100; --(D1:D100=ИСТИНА))

Критичный нюанс: если условное форматирование применяется ко всему столбцу (например, A:A), то Excel может тормозить при пересчёте формул. В этом случае ограничьте диапазон до реально заполненных данных (например, A1:A1000).

Способ 5: Фильтр по цвету + ручное суммирование (без формул)

Если вам нужно одноразово посчитать сумму цветных ячеек и не хочется возиться с формулами, можно воспользоваться встроенным фильтром по цвету:

  1. Выделите диапазон с данными (включая заголовки).
  2. Нажмите Данные → Фильтр (или Ctrl+Shift+L).
  3. Откройте выпадающий список в столбце, который нужно отфильтровать.
  4. Выберите Фильтр по цвету → [нужный цвет].
  5. Скопируйте отфильтрованные ячейки в новый столбец и используйте СУММ().

Плюсы: не требует знания формул или VBA. Минусы: придётся повторять процесс при каждом изменении данных.

Этот метод удобен для разовых задач, но не подходит для динамических таблиц, где цвета часто меняются.

Как ускорить процесс при большом объёме данных?

Используйте комбинацию Ctrl + ; (вставка текущей даты) и Ctrl + Shift + L (включение фильтра) для быстрого применения фильтра. Если данных много (более 10 000 строк), предварительно преобразуйте диапазон в Таблицу Excel (Ctrl + T) — фильтрация будет работать быстрее.

Сравнение методов: какой выбрать?

Чтобы помочь вам определиться, мы собрали сравнительную таблицу всех способов:

Метод Сложность Работает с условным форматированием? Требует VBA? Подходит для динамических данных?
GET.CELL Средняя ❌ Нет ❌ Нет ✅ Да
Ablebits Лёгкая ✅ Да ❌ Нет ✅ Да
VBA Сложная ❌ Нет (без модификаций) ✅ Да ✅ Да
Формулы по условию Средняя ✅ Да (если известно правило) ❌ Нет ✅ Да
Фильтр по цвету Лёгкая ✅ Да ❌ Нет ❌ Нет (одноразово)

Рекомендации по выбору:

  • 🔹 Если цвета назначены вручную и вам нужно постоянное решение → используйте GET.CELL или VBA.
  • 🔹 Если цвета задаются через условное форматирование → пишите формулу по условию или используйте Ablebits.
  • 🔹 Если нужна разовая операция → фильтр по цвету.

FAQ: Частые вопросы по суммированию цветных ячеек

Можно ли посчитать сумму ячеек по цвету шрифта, а не фона?

Да, для этого модифицируйте VBA-скрипт из Способа 3, заменив Interior.Color на Font.Color. Например:

Function SumByFontColor(rng As Range, colorCell As Range) As Double

Dim cl As Range

Dim sum As Double

sum = 0

For Each cl In rng

If cl.Font.Color = colorCell.Font.Color Then

sum = sum + cl.Value

End If

Next cl

SumByFontColor = sum

End Function

Используйте её так же: =SumByFontColor(A1:A100; B2), где B2 — ячейка с нужным цветом шрифта.

Почему функция GET.CELL возвращает 0 для цветных ячеек?

Это происходит в двух случаях:

  1. Цвет ячейки назначен через Условное форматирование (а не вручную).
  2. Вы используете Excel Online или мобильную версию, где GET.CELL не поддерживается.

Решение: проверьте, как назначен цвет (вручную или через правило), и используйте соответствующий метод из статьи.

Как посчитать количество цветных ячеек, а не их сумму?

Замените в формулах СУММ() на СЧЁТ() или СЧЁТЕСЛИ(). Например, для VBA:

Function CountByColor(rng As Range, colorCell As Range) As Long

Dim cl As Range

Dim count As Long

count = 0

For Each cl In rng

If cl.Interior.Color = colorCell.Interior.Color Then

count = count + 1

End If

Next cl

CountByColor = count

End Function

Используйте: =CountByColor(A1:A100; B2).

Можно ли использовать эти методы в Google Таблицах?

В Google Таблицах есть встроенная функция =SUMIFS() с поддержкой цвета (с 2022 года). Пример:

=SUMIFS(A1:A100; A1:A100; ">0"; A1:A100; "background-color: red")

Также можно использовать Apps Script (аналог VBA) для более сложных задач.

Почему после копирования данных в другой файл цвета исчезли?

Это происходит, если:

  • 🔸 Цвета были назначены через Условное форматирование, а в новом файле нет таких же правил.
  • 🔸 Вы копировали только значения (через Специальная вставка → Значения), а не форматирование.

Решение: скопируйте ячейки через Специальная вставка → Форматы или перенесите правила условного форматирования в новый файл.