Подсчёт ячеек с цветной заливкой в Microsoft Excel — задача, с которой сталкиваются пользователи при анализе отчётов, чек-листов или визуально структурированных таблиц. На первый взгляд кажется, что достаточно просто выделить цветные ячейки и посмотреть их количество в строке состояния. Однако стандартные функции вроде СЧЁТЕСЛИ или СЧЁТЗ не учитывают форматирование, а только содержимое. Это создаёт проблему: как автоматизировать подсчёт, если данные не имеют текстовых или числовых маркеров, а отличаются лишь цветом фона?
В этой статье мы разберём 5 рабочих методов — от элементарных (для новичков) до продвинутых (с использованием VBA). Вы узнаете, как обойти ограничения Excel, какие инструменты скрыты в меню программы, и почему иногда проще использовать Power Query, чем писать макрос. Особое внимание уделим нюансам: например, почему функция ПОИСКПОЗ не подходит для этой задачи, или как избежать ошибок при копировании таблиц с сохранением форматирования.
Если вы работаете с большими массивами данных, где цвет — единственный идентификатор (например, в отчётах о продажах с выделением просроченных позиций), эти методы сэкономят часы ручного труда. А для тех, кто предпочитает автоматизацию, мы подготовили готовые скрипты VBA, которые можно адаптировать под свои задачи.
Метод 1: Ручной подсчёт через фильтр по цвету
Самый простой способ — использовать встроенный фильтр по цвету ячейки. Он не требует знания формул или макросов, но подходит только для одноразовых задач на небольших диапазонах.
Чтобы воспользоваться этим методом:
- Выделите диапазон ячеек, в котором нужно посчитать цветные.
- Перейдите на вкладку
Главная→Сортировка и фильтр→Фильтр. - Нажмите на стрелочку фильтра в заголовке столбца и выберите
Фильтр по цвету→Цвет заливки→ нужный оттенок. - Excel отобразит только ячейки выбранного цвета. Их количество будет показано в строке состояния (внизу окна, справа).
✅ Плюсы: не требует формул, работает во всех версиях Excel (включая Excel Online).
❌ Минусы: не автоматизируется, при изменении данных фильтр сбрасывается.
Если в фильтре отображаются не все строки (например, скрыты вручную), строка состояния учитывает только видимые ячейки. Чтобы увидеть реальное количество, раскройте все строки (Почему строка состояния показывает неверное количество?
Главная → Формат → Скрыть/отобразить → Отобразить строки).
Нюанс: если в таблице используются условное форматирование (цвет меняется по правилу), фильтр по цвету может не сработать. В этом случае переходите к следующим методам.
Метод 2: Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL) для опытных пользователей
Excel скрывает мощный инструмент — функцию ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL), которая возвращает информацию о форматировании ячейки, включая цвет заливки. Однако она работает только в именованных формулах и требует предварительной настройки.
Алгоритм действий:
- Нажмите
Формулы → Определённые имена → Присвоить имя. - В поле
ИмявведитеЦветЗаливки, в полеДиапазон— формулу:
Примечание:=ПОЛУЧИТЬ.ЯЧЕЙКУ(38;!A1)38— код параметра для цвета заливки,!A1— относительная ссылка на активную ячейку. - Теперь в любой ячейке можно использовать формулу
=ЦветЗаливки, и она вернёт числовой код цвета (например,65535для жёлтого). - Чтобы посчитать ячейки конкретного цвета, комбинируйте с
СЧЁТЕСЛИ:=СЧЁТЕСЛИ(Диапазон; "=65535")
Важно: коды цветов зависят от палитры текущей книги. Чтобы узнать код нужного цвета, примените функцию к залитой ячейке.
Метод 3: VBA-макрос для автоматизации подсчёта
Если вам нужно регулярно считать цветные ячейки, VBA — оптимальное решение. Ниже приведён универсальный макрос, который подсчитывает ячейки выбранного цвета в указанном диапазоне.
Как использовать:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте новый модуль (
Insert → Module) и скопируйте туда код:Function CountColorCells(rng As Range, color As Range) As LongDim 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
CountColorCells = count
End Function
- Закройте редактор. Теперь в Excel можно использовать функцию
=CountColorCells(A1:A10; B1), где:A1:A10— диапазон для подсчёта,B1— ячейка с образцом цвета.
Критическая особенность: макрос сравнивает точные цвета, включая оттенки. Если в таблице используются близкие цвета (например, светло-зелёный и салатовый), они будут считаться разными.
Сохраните файл как .xlsm (с поддержкой макросов)|Включите макросы в настройках безопасности (Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы)|Проверьте, что в ячейке-образце нет условного форматирования
-->
⚠️ Внимание: если вы копируете таблицу с цветными ячейками из другого файла, Excel может изменить коды цветов. Всегда проверяйте результат на тестовом диапазоне.
Метод 4: Power Query для динамических таблиц
Power Query (доступен в Excel 2016 и новее) позволяет преобразовывать данные, включая анализ форматирования. Этот метод подходит для динамических таблиц, где цвета могут изменяться по правилам условного форматирования.
Пошаговая инструкция:
- Выделите диапазон и преобразуйте его в таблицу (
Ctrl + T). - Перейдите на вкладку
Данные→Из таблицы/диапазона(группаПолучить и преобразовать). - В редакторе Power Query добавьте пользовательский столбец:
Замените= if [Column1] = null then null else if Value.Is(Value.FromText([Column1]), type color) then 1 else 0[Column1]на имя вашего столбца. - Отфильтруйте новый столбец по значению
1и посчитайте строки.
❌ Ограничение: Power Query не распознаёт цвета ячеек напрямую — придётся использовать обходные пути (например, связывать цвет с данными через условное форматирование).
| Метод | Сложность | Автоматизация | Работает с условным форматированием |
|---|---|---|---|
| Фильтр по цвету | ⭐ | Нет | Нет |
ПОЛУЧИТЬ.ЯЧЕЙКУ |
⭐⭐⭐ | Да | Нет |
| VBA-макрос | ⭐⭐⭐⭐ | Да | Да (с доработками) |
| Power Query | ⭐⭐⭐⭐ | Да | Частично |
Метод 5: Условное форматирование + вспомогательный столбец
Если цвета в таблице задаются через условное форматирование, можно обойтись без VBA. Создайте правило, которое будет дублировать цвет в отдельном столбце текстовым маркером (например, "Красный", "Зелёный"), а затем используйте СЧЁТЕСЛИ.
Пример настройки:
- Добавьте справа от таблицы вспомогательный столбец.
- Создайте правило условного форматирования для исходного диапазона (например, если значение > 100, заливка красная).
- Во вспомогательном столбце используйте формулу:
=ЕСЛИ(И(A1>100); "Красный"; ЕСЛИ(И(A1<50); "Зелёный"; "Жёлтый")) - Теперь подсчёт ведётся по текстовому признаку:
=СЧЁТЕСЛИ(B:B; "Красный").
✅ Плюс: метод не зависит от реального цвета, а опирается на логику условного форматирования.
❌ Минус: требует дублирования данных и ручной настройки правил.
Типичные ошибки и как их избежать
Даже опытные пользователи сталкиваются с проблемами при подсчёте цветных ячеек. Вот наиболее частые ошибки и способы их решения:
🔹 Ошибка 1: Функция ПОЛУЧИТЬ.ЯЧЕЙКУ возвращает #ЗНАЧ!.
⚠️ Внимание: это происходит, если в настройках Excel отключена поддержка макросов 4.0. Включите её в Файл → Параметры → Формулы → Работа с формулами.
🔹 Ошибка 2: VBA-макрос не видит цвета в скопированной таблице.
🔹 Решение: При копировании диапазонов из других файлов используйте Специальная вставка → Форматы, чтобы сохранить оригинальные коды цветов.
🔹 Ошибка 3: Power Query не обновляет данные после изменения цветов.
🔹 Решение: Обновите запрос вручную (Данные → Обновить все) или настройте автоматическое обновление при открытии файла.
🔹 Ошибка 4: Фильтр по цвету не показывает все ячейки.
🔹 Решение: Убедитесь, что в таблице нет скрытых строк или применённых других фильтров.
FAQ: Частые вопросы о подсчёте цветных ячеек
Можно ли посчитать ячейки с градиентной заливкой?
Нет, стандартные методы (включая VBA) работают только с однотонной заливкой. Градиент рассматривается как отсутствие цвета. Обходной путь — использовать условное форматирование с однотонными цветами вместо градиента.
Почему макрос считает не все ячейки?
Вероятно, в таблице используются близкие оттенки (например, RGB(255, 0, 0) и RGB(254, 0, 0)). Макрос сравнивает точные значения. Решение: округлите коды цветов в скрипте или используйте диапазон значений.
Как посчитать цветные ячейки в Google Sheets?
В Google Таблицах нет встроенных инструментов для этой задачи. Используйте скрипт Apps Script:
function countColoredCells() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getDataRange();
const colors = range.getBackgrounds();
let count = 0;
const targetColor = "#ffff00"; // Жёлтый цвет
colors.forEach(row => row.forEach(cell => {
if (cell === targetColor) count++;
}));
Logger.log(count);
}
Можно ли посчитать ячейки с цветом шрифта?
Да, для этого модифицируйте VBA-макрос, заменив Interior.Color на Font.Color. Пример:
If cl.Font.Color = color.Font.Color Then count = count + 1
Почему после сохранения файла цвета сбиваются?
Это происходит при сохранении в формате .xlsx (без макросов) или при открытии в старых версиях Excel. Используйте формат .xlsm и проверяйте совместимость с вашей версией программы.