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

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

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

Особенность работы с цветами в Excel заключается в том, что программа не предоставляет прямой функции для их подсчёта. Это связано с архитектурой файлов .xlsx: цвет ячейки — это свойство её формата, а не значения. Поэтому стандартные математические или логические функции просто "не видят" эту информацию. Однако обходные пути существуют, и некоторые из них удивляют своей простотой.

═══

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

Самый доступный метод для пользователей, не знакомых с программированием, — использование условного форматирования в комбинации со вспомогательным столбцом. Суть подхода: создать правило, которое будет автоматически проставлять в соседней ячейке метку (например, "1"), если исходная ячейка окрашена в нужный цвет. Затем остаётся лишь подсчитать количество таких меток стандартной функцией SUM.

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

  1. Добавьте справа от вашего диапазона вспомогательный столбец (например, B, если данные в A).
  2. Выделите первую ячейку вспомогательного столбца (например, B1).
  3. Перейдите в Главная → Условное форматирование → Создать правило.
  4. Выберите тип правила Использовать формулу для определения форматируемых ячеек.
  5. Введите формулу, проверяющую цвет соседней ячейки (об этом ниже).
  6. Задайте формат для ячейки (например, заполнение чёрным цветом и белым текстом "1").
  7. Растяните правило на весь вспомогательный столбец.
  8. Подсчитайте сумму значений во вспомогательном столбце.

Ключевой момент — формула для проверки цвета. К сожалению, Excel не позволяет напрямую сравнить цвет ячейки с образцом, но можно использовать функцию GET.CELL через именованный диапазон. Для этого:

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

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

  4. Теперь во вспомогательном столбце используйте формулу:
    =IF(ЦветЯчейки=3, 1, 0)

    где 3 — код красного цвета (коды других цветов см. в таблице ниже).

ЦветКодПример формулы
Красный3=IF(ЦветЯчейки=3,1,0)
Зелёный44=IF(ЦветЯчейки=44,1,0)
Синий5=IF(ЦветЯчейки=5,1,0)
Жёлтый6=IF(ЦветЯчейки=6,1,0)
Без заливки0=IF(ЦветЯчейки=0,1,0)

После применения формулы к всему диапазону остаётся просуммировать значения во вспомогательном столбце:

=SUM(B1:B100)
⚠️ Внимание: Этот метод работает только для цветов из стандартной палитры Excel. Если вы используете пользовательские цвета (через Другие цвета), их коды будут другими, и потребуется дополнительная настройка.

═══

2. Способ: Функция SUBTOTAL с фильтром по цвету

Менее известный, но эффективный приём — использование функции SUBTOTAL в сочетании с фильтром по цвету. Этот метод подходит, если вам нужно быстро посчитать окрашенные ячейки в отфильтрованном диапазоне (например, в сводной таблице или после применения автофильтра).

Инструкция:

  1. Выделите диапазон с данными (включая заголовки).
  2. Нажмите Данные → Фильтр (или Ctrl+Shift+L).
  3. Щёлкните по стрелке фильтра в заголовке столбца и выберите Фильтр по цвету → [нужный цвет].
  4. Внизу таблицы добавьте строку с функцией:
    =SUBTOTAL(103, A2:A100)

    где 103 — код функции СЧЁТЗ (подсчёт непустых ячеек), а A2:A100 — ваш диапазон.

Преимущество этого способа в том, что SUBTOTAL автоматически учитывает только видимые ячейки после фильтрации. Таким образом, вы получаете количество ячеек именно того цвета, который отображается на экране.

Ограничения:

  • 🔴 Работает только с данными, к которым применён фильтр.
  • 🔴 Не подходит для подсчёта ячеек с пользовательскими цветами (не из стандартной палитры).
  • 🔴 Требует наличия заголовков в таблице для корректной работы фильтра.
📊 Какой способ подсчёта цветных ячеек вы используете чаще?
Ручной пересчёт
Условное форматирование
Фильтр по цвету
VBA-макросы
Надстройки (например, Kutools)

═══

3. Способ: VBA-макрос для подсчёта цветных ячеек

Для пользователей, готовых использовать Visual Basic for Applications, написание макроса — самый гибкий и мощный способ. VBA позволяет анализировать любые цвета, включая пользовательские, и работать с диапазонами любой сложности.

Приведём два варианта макросов:

  1. Подсчёт ячеек одного цвета (например, красного):
Function CountColoredCells(rng As Range, color As Range) As Long

Dim cl As Range

Dim count As Long

Dim targetColor As Long

targetColor = color.Interior.Color

count = 0

For Each cl In rng

If cl.Interior.Color = targetColor Then

count = count + 1

End If

Next cl

CountColoredCells = count

End Function

Чтобы использовать эту функцию:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Вернитесь в Excel и в любой ячейке введите:
    =CountColoredCells(A1:A100; B1)

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

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

Function CountCustomColoredCells(rng As Range, colorCode As Long) As Long

Dim cl As Range

Dim count As Long

count = 0

For Each cl In rng

If cl.Interior.Color = colorCode Then

count = count + 1

End If

Next cl

CountCustomColoredCells = count

End Function

Здесь colorCode — это числовое значение цвета (например, RGB(255, 0, 0) для красного). Чтобы узнать код цвета ячейки, используйте макрос:

Sub GetColorCode()

Dim cell As Range

Set cell = ActiveCell

MsgBox "Цветовой код: " & cell.Interior.Color

End Sub

⚠️ Внимание: Макросы работают только в файлах с расширением .xlsm (с поддержкой макросов). При открытии такого файла Excel может показать предупреждение о безопасности — разрешите выполнение макросов, если доверяете источнику.

Сохраните файл как .xlsm (Файл → Сохранить как → Тип файла: Книга Excel с поддержкой макросов)|

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

Проверьте, что диапазон для подсчёта не содержит объединённых ячеек|

Запишите код цвета образца заранее (через макрос GetColorCode)

-->

═══

4. Способ: Надстройки для Excel (Kutools, Ablebits)

Если вы не хотите возиться с формулами или VBA, можно воспользоваться специализированными надстройками, которые добавляют функционал для работы с цветами. Самые популярные решения — Kutools for Excel и Ablebits.

Kutools for Excel предлагает инструмент Count by Color, который за несколько кликов подсчитывает количество ячеек с заданным цветом фона или шрифта. Как это работает:

  • 📌 Установите надстройку (бесплатная пробная версия доступна на официальном сайте).
  • 📌 Выделите диапазон для анализа.
  • 📌 Перейдите на вкладку Kutools и выберите Select → Select Cells with Format.
  • 📌 В открывшемся окне укажите цвет фона и нажмите OK.
  • 📌 Excel выделит все ячейки с этим цветом, а в строке состояния отобразится их количество.

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

  • ✅ Не требуют знания формул или VBA.
  • ✅ Работают с пользовательскими цветами.
  • ✅ Предлагают дополнительные функции (например, удаление форматирования по цвету).

Недостатки:

  • ❌ Платные (хотя есть бесплатные пробные версии).
  • ❌ Могут замедлять работу Excel при больших объёмах данных.
НадстройкаФункция для цветаСтоимость (2026)Бесплатная версия
Kutools for ExcelCount by Colorот $3930-дневный триал
AblebitsCount Colored Cellsот $5914-дневный триал
ASAP UtilitiesSelect cells by colorБесплатноДа (ограниченный функционал)

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

═══

5. Способ: Power Query (для Excel 2016 и новее)

В современных версиях Excel (2016, 2019, 365) появился инструмент Power Query, который позволяет импортировать данные и трансформировать их, включая анализ форматирования. Хотя Power Query не предназначен напрямую для работы с цветами ячеек, его можно использовать в комбинации с VBA для автоматизации процесса.

Алгоритм:

  1. Выделите ваш диапазон и нажмите Данные → Из таблицы/диапазона (в группе Получить и преобразовать).
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой, которая будет проверять цвет (это потребует предварительной настройки через VBA).
  3. После обработки загрузите данные обратно в Excel и подсчитайте количество меток.

Пример кода для Power Query (требует предварительной настройки):

let

Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

AddColorColumn = Table.AddColumn(Source, "Цвет", each if [Column1] = "Ваше условие" then 1 else 0)

in

AddColorColumn

Этот метод сложнее предыдущих, но он полезен, если вам нужно автоматизировать подсчёт цветов в регулярно обновляемых данных (например, в отчётах, которые приходят ежемесячно).

⚠️ Внимание: Power Query не может напрямую считывать цвет ячеек — для этого требуется предварительная обработка данных через VBA или вспомогательные столбцы. Этот способ подходит только опытным пользователям.

═══

6. Ошибки и решения: почему не работает подсчёт цветов?

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

Проблема 1: Функция GET.CELL возвращает неверный код цвета.

  • 🔹 Причина: Вы используете пользовательский цвет, который не входит в стандартную палитру Excel.
  • 🔹 Решение: Используйте VBA для получения точного цветового кода (как описано в разделе 3).

Проблема 2: Макрос не считает ячейки с условным форматированием.

  • 🔹 Причина: Условное форматирование применяется динамически и не меняет фактический цвет ячейки (свойство Interior.Color остаётся прежним).
  • 🔹 Решение: Используйте метод .DisplayFormat.Interior.Color в VBA:
    If cl.DisplayFormat.Interior.Color = targetColor Then

Проблема 3: Надстройка (например, Kutools) не видит некоторые цвета.

  • 🔹 Причина: Цвета применены через условное форматирование, а не через прямой формат ячеек.
  • 🔹 Решение: Преобразуйте условное форматирование в обычный формат: выделите диапазон → Главная → Формат по образцу (кисть) → щёлкните по ячейке с нужным цветом.

Проблема 4: Формула со вспомогательным столбцом выдаёт ошибку #ИМЯ?.

  • 🔹 Причина: Не создан именованный диапазон ЦветЯчейки.
  • 🔹 Решение: Повторите шаги из раздела 1 для создания именованного диапазона.
Как узнать, применён ли цвет через условное форматирование?

Откройте диспетчер правил условного форматирования (Главная → Условное форматирование → Управление правилами). Если в списке есть правила с заливкой, значит цвет динамический и может не распознаваться стандартными методами подсчёта.

═══

FAQ: Частые вопросы о подсчёте цветных ячеек

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

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

Function CountFontColor(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

CountFontColor = count

End Function

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

Почему функция GET.CELL работает только с английской версией Excel?

Функция GET.CELL является "скрытой" и может не корректно работать в локализованных версиях Excel (например, русской). Чтобы обойти это ограничение:

  1. Переключите язык интерфейса на английский (Файл → Параметры → Язык).
  2. Используйте VBA вместо GET.CELL.

В русских версиях Excel вместо GET.CELL иногда помогает функция ЯЧЕЙКА, но она не поддерживает проверку цвета.

Как посчитать ячейки с градиентной заливкой?

Стандартные методы (включая VBA) не работают с градиентной заливкой, так как она не имеет единого цветового кода. Решения:

  • Замените градиент на сплошной цвет.
  • Используйте надстройки вроде Kutools, которые могут анализировать градиенты как изображения (функция Color Picker).
Можно ли автоматически обновлять подсчёт при изменении цветов?

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

  • Для вспомогательного столбца: используйте Лист.Calculate в VBA для принудительного пересчёта.
  • Для макросов: разместите код в событии Worksheet_Change:
    Private Sub Worksheet_Change(ByVal Target As Range)
    

    Application.CalculateFull

    End Sub

Надстройки (например, Kutools) обновляют данные автоматически.

Есть ли разница между подсчётом в Excel и Google Sheets?

Google Sheets не поддерживает GET.CELL и имеет ограниченные возможности VBA. Альтернативы:

  • Используйте =COUNTIF с цветовыми метками (вручную или через Apps Script).
  • Установите надстройку Color Counter из магазина Google Workspace.

Пример скрипта для Google Sheets:

function countColoredCells() {

const sheet = SpreadsheetApp.getActiveSheet();

const range = sheet.getRange("A1:A100");

const colors = range.getBackgrounds();

let count = 0;

const targetColor = "#ff0000"; // красный

colors.forEach(row => {

row.forEach(cell => {

if (cell === targetColor) count++;

});

});

return count;

}

═══