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

Вы когда-нибудь пытались просуммировать в Microsoft Excel только те ячейки, которые выделены определённым цветом? На первый взгляд задача кажется простой: выбрал цвет — получил сумму. Но стандартных функций для этого в Excel нет. Приходится использовать обходные пути: от ручного подсчёта до написания макросов на VBA.

В этой статье мы разберём 5 рабочих методов, как складывать числа по цвету фона или текста — от элементарных формул для новичков до автоматизированных решений для опытных пользователей. Вы узнаете, какие подводные камни встречаются при работе с цветами в Excel, как обойти ограничения программы и даже как создать динамические отчёты, где суммы будут обновляться автоматически при изменении цветовой маркировки.

Важно: все примеры протестированы в Excel 2019 и Office 365, но majority методов работают и в более старых версиях (начиная с Excel 2010). Для макросов потребуется включить поддержку VBA (инструкция приведена ниже).

📊 Какой метод суммирования по цветам вам интереснее?
Формулы без VBA
VBA-макросы
Power Query
Условное форматирование
Другой

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

На первый взгляд странно, что в Excel — программе с сотнями функций — нет простого способа просуммировать ячейки по цвету. Причина кроется в архитектуре программы:

  • 🔢 Цвет — это форматирование, а не данные. Excel оперирует значениями ячеек (числами, текстом), а цвет фона или шрифта считается атрибутом отображения, который не хранится как часть данных. Поэтому стандартные функции вроде СУММ() его просто "не видят".
  • 🔄 Динамическое изменение цветов. Если бы Excel автоматически отслеживал цвета, это замедлило бы работу с большими таблицами. Представьте: при каждом изменении фона программа должна была бы пересчитывать все зависимые формулы.
  • 📊 Альтернативные инструменты. Microsoft предлагает другие способы группировки данных: условное форматирование, сводные таблицы или фильтры. С их помощью можно добиться похожих результатов без привязки к цветам.

Тем не менее, есть обходные пути. Самые надёжные из них мы и рассмотрим далее. Но сначала — важное предупреждение:

⚠️ Внимание: Если вы используете условное форматирование (например, правило "выделить ячейки больше 100 зелёным"), то цвет ячейки не фиксируется — он зависит от значения. В этом случае суммирование по цвету бессмысленно: при изменении данных цвет (а значит, и сумма) будет меняться автоматически. Методы из этой статьи работают только с ручным или фиксированным закрашиванием ячеек.

Метод 1: Фильтрация по цвету (без формул)

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

Как это сделать:

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

Преимущества метода:

  • ✅ Не требует знания формул или VBA.
  • ✅ Работает во всех версиях Excel.
  • ✅ Позволяет быстро проверить сумму "на глаз".

Недостатки:

  • Ручная операция — при изменении данных придётся повторять фильтрацию.
  • ❌ Не подходит для автоматических отчётов.
  • ❌ Можно фильтровать только по одному цвету за раз.

Метод 2: Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (для опытных пользователей)

Excel имеет скрытую функцию ПОЛУЧИТЬ.ЯЧЕЙКУ() (GET.CELL в английской версии), которая может возвращать информацию о форматировании ячейки, включая цвет фона. Однако использовать её напрямую нельзя — требуется обходной путь через имена диапазонов.

Инструкция:

  1. Выделите ячейку, где будет результат (например, B10).
  2. Перейдите на вкладку ФормулыДиспетчер имёнСоздать.
  3. В поле Имя введите ЦветФона.
  4. В поле Диапазон введите формулу:
    =ПОЛУЧИТЬ.ЯЧЕЙКУ(38;!A1)

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

  5. Нажмите OK.
  6. Теперь в любой ячейке можно использовать формулу:
    =ЕСЛИ(ЦветФона=3; A1; 0)

    где 3 — код красного цвета (список кодов см. ниже), а A1 — проверяемая ячейка.

  7. Растяните формулу на нужный диапазон и просуммируйте результаты функцией СУММ().

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

ЦветКодПример отображения
Красный3
Зелёный4
Синий5
Жёлтый6
Белый (нет заливки)0

Важно: функция ПОЛУЧИТЬ.ЯЧЕЙКУ работает только в английской версии Excel как GET.CELL. В русской версии её нужно вводить на английском или использовать надстройку для перевода функций.

⚠️ Внимание: Этот метод не будет работать, если книга сохранена в формате .xlsx (без макросов). Сохраните файл как .xlsm (с поддержкой макросов), даже если вы не используете VBA.

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

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

Шаги для создания макроса:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите InsertModule.
  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. Закройте редактор VBA.
  5. Теперь в любой ячейке можно использовать формулу:
    =SumByColor(A1:A10; D1)

    где A1:A10 — диапазон для суммирования, а D1 — ячейка с образцом цвета.

Преимущества метода:

  • 🔹 Работает с любыми цветами, включая пользовательские.
  • 🔹 Динамический пересчёт — сумма обновляется при изменении данных или цветов.
  • 🔹 Можно суммировать по цвету шрифта (замените Interior.Color на Font.Color).

Как добавить поддержку цвета шрифта:

Модификация макроса для цвета текста

Чтобы суммировать по цвету шрифта, замените строку If cl.Interior.Color = colorCell.Interior.Color Then на If cl.Font.Color = colorCell.Font.Color Then. Также можно создать отдельную функцию SumByFontColor с аналогичной логикой.

Если макрос не работает:

  • 🛑 Убедитесь, что в Настройках ExcelПараметрыНадстройки включена поддержка VBA.
  • 🛑 Сохраните файл в формате .xlsm (с поддержкой макросов).
  • 🛑 Включите макросы при открытии файла (если Excel блокирует их выполнение).

Включить вкладку "Разработчик" в ленте Excel|Сохранить файл как .xlsm|Разрешить выполнение макросов в настройках безопасности|Проверить, что цвет образца совпадает с цветами в таблице-->

Метод 4: Power Query для суммирования по цветам

Если вы работаете с Excel 2016 или новее (или Office 365), можно использовать Power Query — инструмент для преобразования и анализа данных. Он позволяет добавить столбец с кодом цвета и затем сгруппировать данные по нему.

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

  1. Выделите ваш диапазон данных и перейдите на вкладку ДанныеИз таблицы/диапазона (или Get DataFrom Table/Range).
  2. В открывшемся окне Power Query выберите столбец, где нужно определить цвет.
  3. Перейдите на вкладку Добавить столбецПользовательский столбец.
  4. Введите название столбца (например, ColorCode) и формулу:
    = Value.NativeQuery([ВашСтолбец], "SELECT Value.ColorToInt(CellFillColor())")

    (замените ВашСтолбец на имя вашего столбца).

  5. Нажмите OK. В новом столбце появятся числовые коды цветов.
  6. Теперь сгруппируйте данные по этому столбцу: ПреобразоватьГруппировка → укажите столбец ColorCode и операцию Sum для числового столбца.
  7. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

Ограничения метода:

  • ⚠️ Работает только в Excel 2016+ и Office 365.
  • ⚠️ Коды цветов в Power Query могут отличаться от кодов в VBA.
  • ⚠️ При изменении цветов в исходной таблице придётся обновлять запрос вручную (ДанныеОбновить все).

Совет: чтобы не путаться в кодах цветов, создайте в таблице легенду — столбец с образцами цветов и их кодами. Например:

ЦветКод в Power QueryПример
Красный255
Зелёный5287936
Синий16711680

Метод 5: Условное форматирование + вспомогательный столбец

Если вы используете условное форматирование для раскраски ячеек (например, по правилу "если значение > 100, закрасить зелёным"), то суммирование по цвету можно заменить суммированием по условию, которое этот цвет определяет.

Алгоритм:

  1. Добавьте вспомогательный столбец рядом с данными.
  2. Введите формулу, которая проверяет условие раскраски. Например, если ячейка закрашивается зелёным при значении > 100:
    =ЕСЛИ(A1>100; 1; 0)
  3. Растяните формулу на весь столбец.
  4. Теперь используйте функцию СУММПРОИЗВ() для суммирования:
    =СУММПРОИЗВ(A1:A10; B1:B10)

    где A1:A10 — диапазон с данными, а B1:B10 — вспомогательный столбец с 1 (если условие истинно) и 0 (если ложно).

Преимущества:

  • ✔️ Не требует VBA или сложных функций.
  • ✔️ Работает в любых версиях Excel.
  • ✔️ Автоматически обновляется при изменении данных.

Пример для нескольких условий:

=ЕСЛИ(A1>100; 1; ЕСЛИ(A1<50; 2; 0))

Здесь 1 — зелёные ячейки (>100), 2 — красные (<50), 0 — остальные. Затем используйте СУММПРОИЗВ() с критерием.

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

Выбор метода зависит от вашей задачи, версии Excel и уровня подготовки. Вот краткое сравнение:

Метод Сложность Динамичность Поддерживаемые версии Excel Когда использовать
Фильтрация по цвету ❌ Ручной пересчёт Все Разовые проверки, небольшие таблицы
Функция ПОЛУЧИТЬ.ЯЧЕЙКУ ⭐⭐⭐ ✅ Автоматический 2010+ (требует .xlsm) Для фиксированных цветов, если не хотите использовать VBA
VBA-макрос ⭐⭐⭐⭐ ✅ Автоматический 2010+ (требует .xlsm) Регулярное использование, сложные задачи
Power Query ⭐⭐⭐ ⚠️ Требует обновление 2016+, Office 365 Большие наборы данных, сложная обработка
Условное форматирование + вспомогательный столбец ⭐⭐ ✅ Автоматический Все Если цвета определяются правилами, а не вручную

Рекомендации:

  • 📌 Для разовых задач используйте фильтрацию.
  • 📌 Если цвета проставлены вручную и нужна автоматизация — VBA.
  • 📌 Для условного форматированиявспомогательный столбец.
  • 📌 Для больших данныхPower Query.

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

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

Да. В методе с VBA замените Interior.Color на Font.Color в коде макроса. В методе с ПОЛУЧИТЬ.ЯЧЕЙКУ используйте параметр 24 вместо 38 (для цвета шрифта). В Power Query замените CellFillColor() на CellFontColor().

Почему макрос возвращает сумму 0, хотя есть цветные ячейки?

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

  1. Цвет в образцовой ячейке не совпадает с цветами в диапазоне (даже оттенки могут отличаться).
  2. В ячейках текст вместо чисел — макрос суммирует только числовые значения.
  3. Файл сохранён как .xlsx вместо .xlsm — макросы отключены.

Решение: проверьте код цвета через MsgBox colorCell.Interior.Color в VBA или используйте образцовую ячейку с точно таким же цветом.

Как суммировать по нескольким цветам одновременно?

Способы:

  • В VBA: модифицируйте макрос, чтобы он принимал массив цветов:
    Function SumByColors(rng As Range, ParamArray colorCells())
    

    ' ... код для проверки нескольких цветов

    End Function

  • В ПОЛУЧИТЬ.ЯЧЕЙКУ: используйте несколько вспомогательных столбцов с условием ИЛИ().
  • В Power Query: сгруппируйте данные по нескольким кодам цветов.
Можно ли суммировать по цветам в Google Таблицах?

В Google Sheets нет прямой аналогии, но есть обходные пути:

  1. Используйте App Script (аналог VBA). Пример кода:
    function sumByColor() {
    

    var sheet = SpreadsheetApp.getActiveSheet();

    var range = sheet.getDataRange();

    var colors = range.getBackgrounds();

    var values = range.getValues();

    var sum = 0;

    var targetColor = sheet.getRange("D1").getBackground(); // образцовая ячейка

    for (var i = 0; i < colors.length; i++) {

    for (var j = 0; j < colors[i].length; j++) {

    if (colors[i][j] === targetColor) {

    sum += values[i][j];

    }

    }

    }

    return sum;

    }

  2. Используйте вспомогательный столбец с формулой, если цвета определяются условным форматированием.

Ограничение: в Google Таблицах нет функции, аналогичной ПОЛУЧИТЬ.ЯЧЕЙКУ.

Почему после копирования данных в другую книгу цвета сохраняются, а суммирование по ним — нет?

При копировании ячеек с цветами в другую книгу:

  • Если использовался VBA-макрос, его нужно скопировать в новую книгу (откройте редактор VBA и экспортируйте модуль).
  • Если использовалась функция ПОЛУЧИТЬ.ЯЧЕЙКУ, проверьте, что в новой книге сохранено имя диапазона (ЦветФона).
  • Цвета могут изменить код (например, красный в одной книге — код 3, в другой — 255). Проверьте коды через VBA.