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

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

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

Проблема усложняется тем, что цвет ячейки может быть назначен разными способами: через условное форматирование, ручную заливку или даже макрос. Каждый случай требует своего подхода. Например, ячейки, окрашенные условным форматированием по формуле =A1>100, и ячейки с ручной заливкой RGB(255, 0, 0) — это два разных сценария для подсчёта. В этой статье разберём все актуальные методы, от простейших до автоматизированных, с учётом нюансов каждого.

Способ 1: Фильтр по цвету — быстрый, но ограниченный

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

  1. Выделите диапазон с данными (например, A1:D50).
  2. Перейдите на вкладку Данные → Фильтр (или нажмите Ctrl+Shift+L).
  3. Щёлкните по стрелке фильтра в заголовке столбца и выберите Фильтр по цвету → [нужный цвет].
  4. Отфильтрованные ячейки можно посчитать вручную или использовать СЧЁТЗ для видимого диапазона.

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

Минусы: не подходит для условного форматирования, не автоматизируется.

Способ 2: Функция ПОИСКПОЗ + VBA — для условного форматирования

Когда цвет ячейки задаётся через условное форматирование, фильтр бессилен. Здесь поможет комбинация ПОИСКПОЗ и пользовательской функции на VBA. Сначала создаём функцию:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте новый модуль (Insert → Module) и добавьте код:
    Function GetCellColor(cell As Range) As Long
    

    GetCellColor = cell.Interior.Color

    End Function

  3. Вернитесь в Excel и используйте формулу:
    =ПОИСКПОЗ(GetCellColor(A1); {цвет1; цвет2; ...}; 0)

    где {цвет1; цвет2; ...} — массив цветов в формате RGB (например, 255 для красного).

🔹 Пример: Чтобы посчитать красные ячейки в диапазоне A1:A10, используйте:

=СЧЁТЕСЛИ(Диапазон_с_цветами; "Красный")

где Диапазон_с_цветами — столбец с формулой GetCellColor.

Как узнать RGB-код цвета ячейки?

Выделите ячейку, нажмите Ctrl+1 (Формат ячеек), перейдите на вкладку Заливка и посмотрите значение в поле Цвет. Для стандартных цветов Excel используйте таблицу соответствий (например, красный = 255, зелёный = 5287936).

Способ 3: Надстройка Kutools for Excel — платно, но универсально

Если вам часто приходится работать с цветами в Excel, стоит рассмотреть надстройку Kutools for Excel. Она добавляет функцию Count by Color, которая:

  • 🔹 Подсчитывает ячейки по любому цвету (включая условное форматирование).
  • 🔹 Работает с градиентами и узорами.
  • 🔹 Экспортирует результаты в новый лист.

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

  1. Установите надстройку (бесплатная пробная версия на 30 дней).
  2. Выделите диапазон и нажмите Kutools → Select → Select Cells by Color.
  3. В появившемся окне выберите цвет и нажмите OK — программа покажет количество ячеек.
📊 Какой способ подсчёта по цвету вы используете чаще?
Фильтр по цвету
Функции VBA
Надстройки (Kutools и др.)
Ручной подсчёт
Не считал раньше

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

Способ 4: Power Query — для больших данных

Если вам нужно обработать тысячи строк, Power Query (доступен в Excel 2016+) справится эффективнее VBA. Алгоритм:

  1. Выделите данные и перейдите на вкладку Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте пользовательский столбец с формулой:
    = if [Column1] has "Ваше условие" then "Цвет1" else "Цвет2"

    (замените Column1 и условия на свои).

  3. Сгруппируйте данные по новому столбцу (Группировка → Count Rows).

⚠️ Ограничение: Power Query не видит цвет заливки напрямую — вам нужно сначала преобразовать цвет в текстовый признак (например, через VBA или условное форматирование с метками).

Добавьте столбец с метками цветов (например, "Красный", "Зелёный")|Преобразуйте диапазон в таблицу (Ctrl+T)|Проверьте отсутствие пустых ячеек|Сохраните файл перед импортом в Power Query-->

Способ 5: Макрос для автоматического подсчёта

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

Sub CountCellsByColor()

Dim rng As Range, cell As Range, colorCount As Long

Dim targetColor As Long

targetColor = RGB(255, 0, 0) ' Красный цвет

Set rng = Selection ' или укажите диапазон: Range("A1:A100")

colorCount = 0

For Each cell In rng

If cell.Interior.Color = targetColor Then

colorCount = colorCount + 1

End If

Next cell

MsgBox "Количество ячеек: " & colorCount

End Sub

🔹 Как адаптировать:

  • Замените RGB(255, 0, 0) на нужный цвет (см. таблицу RGB).
  • Чтобы считать ячейки с условным форматированием, используйте cell.DisplayFormat.Interior.Color вместо cell.Interior.Color.

Таблица цветов Excel: RGB-коды стандартных заливок

Чтобы не гадать с цветами, используйте эту таблицу стандартных заливок Excel и их RGB-эквивалентов:

ЦветRGB-кодПример использования в VBA
КрасныйRGB(255, 0, 0)If cell.Interior.Color = 255 Then
ЗелёныйRGB(0, 255, 0)If cell.Interior.Color = 65280 Then
СинийRGB(0, 0, 255)If cell.Interior.Color = 16711680 Then
ЖёлтыйRGB(255, 255, 0)If cell.Interior.Color = 65535 Then
ЧёрныйRGB(0, 0, 0)If cell.Interior.Color = 0 Then

⚠️ Внимание: Цвета, назначенные через тему документа (например, "Акцент 1"), могут иметь динамические RGB-коды. В этом случае используйте cell.DisplayFormat.Interior.Color или записывайте макрос вручную для точного определения кода.

Частые ошибки и как их избежать

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

  1. Игнорирование условного форматирования: Функции вроде GetCellColor не видят цвета, назначенные через Условное форматирование → Правила выделения ячеек. Решение: используйте DisplayFormat.
  2. Несоответствие RGB: Цвет, который вы видите, может не совпадать с его программным кодом (например, "Светло-зелёный" в Excel = RGB(146, 208, 80), а не RGB(0, 255, 0)). Проверяйте код через Формат ячеек.
  3. Забывают о прозрачности: Ячейки с Нет заливки имеют цвет RGB(255, 255, 255) (белый), но это не значит, что они белые! Используйте If cell.Interior.ColorIndex = xlNone Then для проверки.

💡 Совет: Перед написанием макроса запишите его в режиме Запись макроса (вкладка Вид → Макросы → Записать макрос), а затем отредактируйте код под свои нужды. Это поможет избежать ошибок с цветами.

FAQ: Ответы на частые вопросы

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

Да, для этого в макросе используйте cell.Font.Color вместо cell.Interior.Color. Например:

If cell.Font.Color = RGB(255, 0, 0) Then

Для условного форматирования шрифта применяйте cell.DisplayFormat.Font.Color.

Почему моя функция VBA возвращает ошибку #VALUE?

Скорее всего, вы забыли указать диапазон ячеек в формуле. Убедитесь, что:

  • Функция GetCellColor принимает один аргумент (ячейку).
  • Вы используете её в формуле массива (нажмите Ctrl+Shift+Enter после ввода).
Как посчитать ячейки с градиентной заливкой?

Градиенты не имеют единого RGB-кода, поэтому стандартные методы не работают. Решения:

  • Используйте надстройку Kutools (распознаёт градиенты).
  • Замените градиент на сплошной цвет через Условное форматирование → Управление правилами.
Работают ли эти методы в Google Sheets?

Нет, Google Таблицы не поддерживают подсчёт по цвету через формулы. Альтернативы:

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

Да, но с ограничениями:

  • Фильтр по цвету работает без изменений.
  • Макросы и VBA не будут выполняться, если лист защищён без разрешения на редактирование макросов. Снимите защиту или настройте права доступа.