Если вам нужно подсчитать количество ячеек с конкретным цветом фона в Excel, стандартные функции вроде COUNTIF или SUMIF не помогут — они анализируют только содержимое, игнорируя форматирование. Проблема возникает, когда данные визуально выделены цветом (например, красный для просроченных задач, зеленый для выполненных), но требуется автоматизировать их подсчет без ручного перебора. В этой статье разберем 5 проверенных методов: от простых фильтров до VBA-скриптов, работающих даже с пользовательскими цветами.
Важно понимать, что Excel не хранит цвет как отдельное свойство ячейки в формулах — его можно извлечь только через макросы или обходные решения. Например, если вы применяете условное форматирование, цвет динамически меняется в зависимости от значения, что усложняет задачу. Мы рассмотрим варианты для статического цвета (заданного вручную) и динамического (через условное форматирование), а также нюансы работы с Excel Online и Google Sheets.
Метод 1: Фильтрация по цвету (без формул)
Самый быстрый способ для одноразового подсчета — использовать встроенную фильтрацию. Он подходит, если цвет ячеек задан вручную (не через условное форматирование) и не требуется автоматическое обновление результата.
Алгоритм действий:
- Выделите диапазон с данными (включая заголовки столбцов).
- Перейдите на вкладку
Данные→Фильтр(или нажмитеCtrl+Shift+L). - Щелкните по стрелке фильтра в заголовке столбца →
Фильтр по цвету→ выберите нужный цвет заполнения. - В строке состояния (внизу окна) появится количество отфильтрованных ячеек.
⚠️ Внимание: Этот метод не работает, если цвет ячейки задан через условное форматирование. Фильтр распознает только цвет, примененный вручную через инструмент Заливка на панели инструментов.
Метод 2: Функция GET.CELL (для статического цвета)
Для автоматизированного подсчета без VBA можно использовать малоизвестную функцию GET.CELL, которая возвращает информацию о форматировании ячейки. Этот метод требует предварительной настройки именованного диапазона.
Инструкция:
- Выделите ячейку, где будет отображаться результат (например,
B1). - Перейдите на вкладку
Формулы→Диспетчер имен→Создать. - В поле
ИмявведитеЦветЯчейки, в полеДиапазонукажите:=GET.CELL(38,!A1)где
38— код для цвета фона, аA1— адрес первой ячейки диапазона. - В ячейке
B1введите формулу:=СУММПРОИЗВ(--(ЦветЯчейки=3);--(A1:A100<>""))где
3— номер цвета (красный в стандартной палитре), аA1:A100— анализируемый диапазон.
Чтобы узнать номер цвета, выделите ячейку с нужным цветом и выполните макрос:
Sub ShowColorIndex()
MsgBox Selection.Interior.ColorIndex
End Sub
Номера цветов в стандартной палитре Excel
- 1 — Черный
- 3 — Красный
- 4 — Зеленый
- 5 — Синий
- 6 — Желтый
- 43 — Серый (25%)
Метод 3: VBA-скрипт для подсчета цветных ячеек
Если вам нужно универсальное решение, работающее с любыми цветами (включая пользовательские) и условным форматированием, используйте VBA. Этот метод подходит для Excel 2010–2023 и позволяет создать собственную функцию.
Шаги для создания функции:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - В меню выберите
Insert→Module. - Вставьте код:
Function CountCellsByColor(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
CountCellsByColor = count
End Function
- Закройте редактор и вернитесь в Excel.
- В любой ячейке введите формулу:
=CountCellsByColor(A1:A100; B1)где
A1:A100— диапазон для анализа, аB1— ячейка с эталонным цветом.
⚠️ Внимание: Если цвет ячейки задан через условное форматирование, этот код не сработает. Для динамических цветов используйте модифицированную версию:
Function CountConditionalColor(rng As Range) As Long
Dim cl As Range
Dim count As Long
count = 0
For Each cl In rng
If cl.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then ' Красный цвет
count = count + 1
End If
Next cl
CountConditionalColor = count
End Function
🔹 Убедитесь, что включена вкладка "Разработчик" (Файл → Параметры → Настройка ленты)
🔹 Разрешите выполнение макросов (Файл → Параметры → Центр управления безопасностью → Параметры центра → Включить все макросы)
🔹 Сохраните файл как .xlsm (с поддержкой макросов)
🔹 Проверьте, что эталонная ячейка имеет точно такой же цвет (включая оттенок)
-->
Метод 4: Power Query для динамического подсчета
Если вы работаете с Excel 2016 или новее, можно использовать Power Query для извлечения данных о цветах. Этот метод сложнее в настройке, но позволяет обновлять результаты при изменении исходных данных.
Пошаговая инструкция:
- Выделите диапазон с данными и нажмите
Данные→Из таблицы/диапазона. - В открывшемся редакторе
Power Queryдобавьте пользовательский столбец с формулой:= if [Column1] <> null then Color.ToText([Column1[BackgroundColor]]) else null(замените
Column1на имя вашего столбца). - Отфильтруйте новый столбец по нужному цвету (например,
#FFFF0000для красного). - Нажмите
Закрыть и загрузить, чтобы вернуть данные в Excel.
Этот метод требует знания кодов цветов в шестнадцатеричном формате. Например:
| Цвет | HEX-код | Пример отображения |
|---|---|---|
| Красный | #FFFF0000 | |
| Зеленый | #FF00FF00 | |
| Синий | #FF0000FF | |
| Желтый | #FFFFFF00 |
Метод 5: Подсчет цветных ячеек в Google Sheets
В Google Таблицах нет встроенных функций для работы с цветами, но можно использовать Google Apps Script — аналог VBA. Скрипт ниже подсчитывает ячейки с заданным цветом фона:
Инструкция:
- Откройте таблицу →
Расширения→Apps Script. - Удалите стандартный код и вставьте:
function countColoredCells(range, colorCell) {var sheet = SpreadsheetApp.getActiveSpreadsheet();
var rangeToCheck = sheet.getRange(range);
var colorRange = sheet.getRange(colorCell);
var bgColor = colorRange.getBackground();
var count = 0;
for (var i = 1; i <= rangeToCheck.getNumRows(); i++) {
for (var j = 1; j <= rangeToCheck.getNumColumns(); j++) {
if (rangeToCheck.getCell(i, j).getBackground() === bgColor) {
count++;
}
}
}
return count;
}
- Сохраните скрипт и вернитесь в таблицу.
- В любой ячейке введите:
=countColoredCells("A1:B10"; "D1")где
A1:B10— диапазон для анализа, аD1— ячейка с эталонным цветом.
⚠️ Внимание: В Google Sheets цвета, примененные через условное форматирование, не распознаются этим скриптом. Для динамических цветов используйте альтернативный подход с созданием дополнительного столбца, который дублирует логику условного форматирования.
VBA-скрипты
Фильтрация по цвету
Функция GET.CELL
Power Query
Другое-->
Ошибки и решения при подсчете цветных ячеек
Даже с правильно настроенными формулами или скриптами могут возникать ошибки. Рассмотрим типичные проблемы и способы их устранения:
- 🔴 Функция возвращает 0, хотя цветные ячейки есть
Причина: Цвет эталонной ячейки не совпадает с анализируемыми (например, оттенки красного различаются).
Решение: Проверьте код цвета через макросDebug.Print Selection.Interior.Color. - 🔴 VBA не работает с условным форматированием
Причина: СтандартныйInterior.Colorне видит динамические цвета.
Решение: ИспользуйтеDisplayFormat.Interior.Color(см. модифицированный код выше). - 🔴 Power Query не обновляет данные
Причина: Не настроено автоматическое обновление запроса.
Решение: Щелкните правой кнопкой по таблице →Обновитьили настройте периодичность вСвойствах связи. - 🔴 Google Apps Script выдает ошибку разрешения
Причина: Скрипт не авторизован.
Решение: При первом запуске разрешите доступ к таблице в всплывающем окне.
FAQ: Частые вопросы по подсчету цветных ячеек
Можно ли посчитать ячейки с градиентной заливкой?
Нет, ни один из методов не распознает градиенты. Excel хранит градиент как сложный объект, а не как единый цвет. Альтернатива: замените градиент на сплошной цвет или используйте условное форматирование с дискретными значениями.
Почему функция GET.CELL возвращает #N/A?
Ошибка возникает, если:
- Не создан именованный диапазон
ЦветЯчейки. - В формуле указана ячейка за пределами диапазона, заданного в именованной формуле.
- Цвет ячейки задан через условное форматирование (GET.CELL его не видит).
Проверьте настройки в Диспетчере имен и убедитесь, что диапазон в формуле GET.CELL совпадает с анализируемым.
Как посчитать ячейки с цветом шрифта, а не фона?
Для цвета текста модифицируйте VBA-функцию:
Function CountCellsByFontColor(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.Font.Color = color.Font.Color Then
count = count + 1
End If
Next cl
CountCellsByFontColor = count
End Function
Используйте аналогично: =CountCellsByFontColor(A1:A100; B1).
Работает ли подсчет цветов в Excel Online?
Нет, в веб-версии Excel Online:
- Отсутствует поддержка VBA.
- Функция
GET.CELLне работает. - Power Query доступен, но с ограниченными возможностями.
Единственный рабочий метод — фильтрация по цвету (см. Метод 1).
Как посчитать ячейки с полупрозрачным цветом?
Полупрозрачные цвета (с альфа-каналом) не поддерживаются стандартными методами. Решение:
- Удалите прозрачность через
Формат ячеек→Заливка→ настройте сплошной цвет. - Используйте VBA с проверкой
Interior.Color(прозрачность игнорируется).