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

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

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

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

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

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

  • 🔹 Выделите диапазон данных с цветными ячейками (например, A1:D100).
  • 🔹 Перейдите на вкладку ДанныеФильтр (или нажмите Ctrl+Shift+L).
  • 🔹 Нажмите на стрелочку фильтра в заголовке столбца → Фильтр по цвету → выберите нужный оттенок.
  • 🔹 В строке состояния (внизу окна) появится количество отфильтрованных ячеек.

Плюсы: быстро, не требует формул, работает во всех версиях Excel.

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

⚠️ Внимание: Если цвета ячеек задаются через условное форматирование, этот метод не сработает. В таком случае переходите к следующим способам.

2. Метод 2: Функция GET.CELL (для ручной заливки)

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

Инструкция:

  1. Нажмите Ctrl+F3, чтобы открыть Диспетчер имён.
  2. Создайте новое имя (например, ЦветЯчейки) со формулой:
    =GET.CELL(38,!A1)

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

  3. В любой ячейке введите формулу:
    =ЦветЯчейки

    и скопируйте её на нужный диапазон.

  4. Теперь используйте СЧЁТЕСЛИ для подсчёта ячеек с определённым кодом цвета.
ЦветКод цвета (GET.CELL)Пример формулы
Красный3=СЧЁТЕСЛИ(B2:B10; 3)
Зелёный4=СЧЁТЕСЛИ(B2:B10; 4)
Синий5=СЧЁТЕСЛИ(B2:B10; 5)
Жёлтый6=СЧЁТЕСЛИ(B2:B10; 6)

🔍 Как узнать код цвета? Выделите ячейку с нужным цветом, введите в строке формул =GET.CELL(38,!A1) и нажмите Enter.

Почему GET.CELL возвращает 0 для условного форматирования?

Функция GET.CELL распознаёт только ручную заливку, применённую через инструмент "Цвет заливки" на главной вкладке. Условное форматирование (даже если визуально цвет совпадает) обрабатывается иначе — для него нужен VBA или Power Query.

3. Метод 3: VBA-макрос для подсчёта по цветам

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

Скопируйте этот код в редактор VBA (Alt+F11InsertModule):

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

Dim cl As Range

Dim count As Long

count = 0

For Each cl In rng

If cl.Interior.Color = color.Interior.Color Then

count = count + 1

End If

Next cl

CountByColor = count

End Function

Как использовать:

  • 📌 Выделите ячейку с образцом цвета (например, F1 — красная ячейка).
  • 📌 В любой ячейке введите формулу:
    =CountByColor(A1:A100; F1)

    где A1:A100 — диапазон для подсчёта, а F1 — ячейка-образец.

Выключить защиту макросов в Файл → Параметры → Центр управления безопасностью|Настройки центра... → Параметры макросов

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

Проверить, что модуль вставлен в ThisWorkbook, а не в лист

-->

⚠️ Внимание: Если цвета в ячейках задаются через условное форматирование с формулой, макрос выше не сработает. В этом случае используйте модифицированную версию кода с проверкой .DisplayFormat.Interior.Color.

4. Метод 4: Power Query для динамического подсчёта

В Excel 2016 и новее (включая Office 365) есть мощный инструмент — Power Query, который умеет анализировать цвета ячеек. Этот метод подходит для создания динамических отчётов, которые обновляются при изменении данных.

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

  1. Выделите диапазон с данными → вкладка ДанныеИз таблицы/диапазона (или Get & Transform Data в англоязычной версии).
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец со формулой:
    = if [Column1] = null then null else if Value.Is(Value.FromText([Column1]), type text) then "Text" else "Number"

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

  3. Добавьте ещё один столбец для цвета:
    = try Record.Field(Value.Metadata([Column1]), "BackgroundColor") otherwise null
  4. Отфильтруйте данные по коду цвета (например, #FFFF0000 для красного).
  5. Нажмите Закрыть и загрузить — результат появится на новом листе.

Преимущество метода: отчёт обновляется в один клик (ДанныеОбновить все), не требует VBA.

Фильтрация по цвету

Функция GET.CELL

VBA-макросы

Power Query

Не работал с цветами

-->

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

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

Пример:

  • 🟢 Допустим, у вас правило: "Если значение > 100, заливка зелёная".
  • 🟢 В соседнем столбце добавьте формулу:
    =ЕСЛИ(A1>100; "Зелёный"; "Красный")
  • 🟢 Теперь используйте СЧЁТЕСЛИ для подсчёта меток:
    =СЧЁТЕСЛИ(B1:B100; "Зелёный")

💡 Когда этот метод удобен:

  • ✔️ Правила условного форматирования простые (основаны на значениях ячеек).
  • ✔️ Нужно избежать VBA или Power Query.
  • ✔️ Данные часто обновляются, и требуется автоматический пересчёт.

6. Распространённые ошибки и как их избежать

Даже опытные пользователи Excel сталкиваются с проблемами при подсчёте по цветам. Вот TOP-3 ошибки и их решения:

  1. Ошибка #1: Функция возвращает 0 для ячеек с условным форматированием.
    Решение: Используйте VBA с проверкой .DisplayFormat.Interior.Color или создайте вспомогательный столбец.
  2. Ошибка #2: Цвета выглядят одинаково, но имеют разные коды (например, #FF0000 и #CC0000).
    Решение: Проверьте точные коды цветов через GET.CELL(38, ...) или макрос:
    Sub ShowColorCode()
    

    MsgBox Selection.Interior.Color

    End Sub

  3. Ошибка #3: После копирования данных цвета "слетают".
    Решение: Используйте Специальная вставкаФорматы или Power Query для импорта.

🔧 Совет для сложных таблиц: Если в вашей таблице используются градиенты или полупрозрачные цвета, ни один из перечисленных методов не сработает корректно. В этом случае единственный выход — ручная разметка данных (например, добавление столбца с категориями).

FAQ: Частые вопросы по подсчёту цветов в Excel

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

Да, для этого модифицируйте VBA-функцию, заменив .Interior.Color на .Font.Color. Пример:

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

Dim cl As Range, count As Long

count = 0

For Each cl In rng

If cl.Font.Color = color.Font.Color Then count = count + 1

Next cl

CountByFontColor = count

End Function

Для GET.CELL используйте код 24 вместо 38.

Почему макрос CountByColor не видит цвета в моей таблице?

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

  • Цвета задаются через условное форматирование — используйте .DisplayFormat.Interior.Color.
  • Цвет ячейки-образца не совпадает с цветами в диапазоне (проверьте коды через MsgBox).
  • В настройках Excel отключены макросы (включите в Файл → Параметры → Центр управления безопасностью).
Как посчитать сумму значений в ячейках определённого цвета?

Используйте модифицированную VBA-функцию:

Function SumByColor(rng As Range, color As Range) As Double

Dim cl As Range, total As Double

total = 0

For Each cl In rng

If cl.Interior.Color = color.Interior.Color Then

total = total + cl.Value

End If

Next cl

SumByColor = total

End Function

Вызывайте её так: =SumByColor(A1:A100; F1).

Работают ли эти методы в Google Sheets?

В Google Таблицах нет встроенных функций для подсчёта по цветам, но можно:

  • Использовать Apps Script (аналог VBA).
  • Установить надстройку Color Counter из магазина дополнений.
  • Экспортировать данные в Excel и применить описанные выше методы.
Можно ли автоматически обновлять подсчёт цветов при изменении данных?

Да, для этого:

  • В VBA используйте событие Worksheet_Change для пересчёта.
  • В Power Query настройте автоматическое обновление при открытии файла.
  • Для GET.CELL добавьте волатильную функцию (например, СЛЧИС()) в зависимую ячейку, чтобы принудительно обновлять расчёты.