Подсчёт ячеек по цвету в Microsoft Excel — задача, с которой регулярно сталкиваются аналитики, бухгалтеры и менеджеры проектов. На первый взгляд кажется, что функция должна быть встроена в программу по умолчанию: выбрал цвет, получил количество. Но стандартных инструментов для этого нет — ни в Excel 2019, ни в Office 365. Почему так? Дело в том, что цвет фона или шрифта в Excel считается атрибутом оформления, а не данными. Программа просто не «видит» его как критерий для вычислений.
Тем не менее, обойти это ограничение можно минимум пятью способами — от элементарных (подойдёт даже новичкам) до продвинутых (требуют знания VBA). В этой статье разберём каждый метод с примерами, нюансами и пошаговыми инструкциями. Вы узнаете, как считать ячейки по цвету фона, цвета шрифта, а также как автоматизировать процесс для больших таблиц.
Важно: все методы, кроме VBA, имеют ограничения. Например, фильтрация работает только для видимых ячеек, а функции GET.CELL — только в именованных диапазонах. Мы честно расскажем о подводных камнях каждого подхода, чтобы вы могли выбрать оптимальный вариант для своей задачи.
Если вы работаете с Google Таблицами, то вам повезло больше: там есть встроенная функция =COUNTIFBYCOLOR() (правда, только в бета-версии). Но для Excel придётся использовать обходные пути. Начнём с самого простого — ручного подсчёта с помощью фильтра.
1. Способ: ручной подсчёт через фильтр по цвету
Это самый быстрый метод, если вам нужно однократно посчитать ячейки одного цвета в небольшом диапазоне. Он не требует формул или скриптов, но имеет два существенных минуса: не подходит для динамических данных и работает только с видимыми ячейками.
Алгоритм действий:
- Выделите диапазон ячеек, в котором нужно посчитать цветные ячейки (например,
A1:D50). - Перейдите на вкладку
Главная→Сортировка и фильтр→Фильтр(или нажмитеCtrl+Shift+L). - Нажмите на стрелку фильтра в заголовке столбца и выберите
Фильтр по цвету→Цвет заливки(илиЦвет шрифта). - В выпадающем списке кликните на нужный цвет. Excel оставит только ячейки с этим цветом.
- Посмотрите номер последней видимой строки в левом сером столбце с номерами — это и будет количество ячеек.
⚠️ Внимание: Если в вашей таблице есть скрытые строки или применены другие фильтры, метод покажет неверный результат. Также он не работает с ячейками, окрашенными условным форматированием — для них нужен другой подход (см. раздел 4).
Для наглядности приведём пример. Допустим, у вас есть таблица продаж с выделенными красным цветом ячейками, где прибыль ниже нуля:
Пример таблицы для фильтрации
| Товар | Прибыль (руб.) | Регион |
|---|---|---|
| Ноутбук A | -1200 | Москва |
| Смартфон B | -850 | СПб |
| Планшет C | 3200 | Казань |
| Монитор D | -450 | Новосибирск |
После применения фильтра по красному цвету заливки останутся только 3 строки. Значит, убыточных позиций — 3. Но что делать, если данных сотни, а цветов десятки? Переходим к более продвинутым методам.
2. Способ: функция GET.CELL для именованных диапазонов
Этот метод подходит для тех, кто готов немного разобраться в именах диапазонов и макрофункциях. Он позволяет создавать динамические формулы, которые будут автоматически пересчитывать количество цветных ячеек при изменении данных.
Суть метода: функция GET.CELL может возвращать информацию о формате ячейки, включая цвет. Но она работает только внутри именованного диапазона. Вот пошаговая инструкция:
- Выделите ячейку, в которой хотите увидеть результат (например,
F1). - Перейдите на вкладку
Формулы→Определённые имена→Присвоить имя. - В поле
Имявведите, например,ЦветЗаливки. - В поле
Диапазонвведите формулу:=GET.CELL(38,!A1)где
38— это код цвета заливки (подробнее о кодах см. ниже), а!A1— относительная ссылка на активную ячейку. - Нажмите
OKи закройте окно. - Теперь в ячейке
F1введите формулу:=ЦветЗаливкии скопируйте её на весь диапазон, где нужно проверить цвет.
- Добавьте столбец с подсчётом, где используйте
=СЧЁТЕСЛИдля ячеек с нужным кодом цвета.
⚠️ Внимание: Код 38 в функции GET.CELL соответствует цвету заливки. Другие полезные коды:
24— цвет шрифта;37— индекс цвета заливки в палитре;39— индекс цвета шрифта.
Чтобы узнать индекс конкретного цвета, используйте макрос (см. раздел 5).
Главный плюс этого метода — он работает с условным форматированием, в отличие от фильтра. Минус — требует предварительной настройки именованных диапазонов и неудобен для больших таблиц.
☑️ Подготовка к использованию GET.CELL
Создать именованный диапазон с функцией GET.CELL|Проверить код цвета (38 для заливки, 24 для шрифта)|Скопировать формулу на весь анализируемый диапазон|Добавить столбец с СЧЁТЕСЛИ для подсчёта
3. Способ: надстройка «Подсчёт по цвету» (для Excel 2013—2023)
Если вам нужно регулярно считать ячейки по цвету, но писать макросы нет желания, можно установить бесплатную надстройку. Одна из самых популярных — Color Counter от Ablebits. Она добавляет в Excel специальную кнопку, которая за секунды подсчитывает ячейки по заданному цвету.
Как установить и использовать:
- Скачайте надстройку с официального сайта Ablebits (бесплатная версия позволяет считать до 50 ячеек за раз).
- Закройте Excel и запустите установщик.
- Откройте Excel, перейдите в
Файл→Параметры→Надстройки. - Внизу окна выберите
Надстройки Excel→Перейти. - Отметьте галочкой Color Counter и нажмите
OK. - Теперь на вкладке
Данныепоявится кнопкаCount by Color.
После нажатия кнопки откроется окно, где можно выбрать:
- 🔲 Диапазон для анализа;
- 🎨 Цвет заливки или шрифта;
- 📊 Формат вывода результата (количество или процент).
⚠️ Внимание: Надстройка не работает с ячейками, окрашенными через условное форматирование. Также она может конфликтовать с другими надстройками, поэтому перед установкой сохраните важные файлы.
Преимущества метода:
- ✅ Не требует знания формул или VBA;
- ✅ Работает с диапазонами до 10 000 ячеек;
- ✅ Можно сохранять отчёты в отдельный файл.
Из недостатков — надстройка платная для коммерческого использования (от $39), а бесплатная версия ограничена по функционалу.
4. Способ: подсчёт цветов условного форматирования
Если цвет ячеек задаётся через условное форматирование, то все предыдущие методы (кроме GET.CELL) не сработают. Дело в том, что условное форматирование — это динамическое правило, а не статический цвет. Здесь нужен другой подход: анализировать не цвет, а условие, по которому он применяется.
Допустим, у вас есть правило: «Если значение меньше 0, закрасить ячейку красным». Тогда вместо подсчёта красных ячеек можно просто посчитать количество отрицательных значений:
=СЧЁТЕСЛИ(A1:A100; "<0")
Но что делать, если правило сложнее? Например: «Закрасить ячейку, если она содержит текст "Убыток" или значение меньше 1000». В этом случае поможет комбинация функций:
=СЧЁТЕСЛИМН(B2:B100; "Убыток") + СЧЁТЕСЛИ(B2:B100; "<1000")
Если же правило условного форматирования использует формулу (например, =И(A2<0; C2="Москва")), то вам придётся повторить эту формулу в функции СУММПРОИЗВ:
=СУММПРОИЗВ(--(A2:A100<0); --(C2:C100="Москва"))
Не забудьте ввести эту формулу как массивную (в старых версиях Excel — нажать Ctrl+Shift+Enter).
⚠️ Внимание: Если в таблице несколько правил условного форматирования, которые перекрывают друг друга, этот метод может дать неточный результат. В таком случае лучше использовать VBA (см. следующий раздел).
5. Способ: VBA-макрос для точного подсчёта
Это самый универсальный и точный метод, который работает со всеми типами окраски: ручной, условным форматированием, даже с градиентной заливкой. Минус — требует включения макросов и базовых знаний VBA. Если вы никогда не писали скрипты в Excel, не пугайтесь: мы дадим готовый код, который можно просто скопировать.
Алгоритм действий:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - В окне проекта найдите вашу книгу (
VBAProject(Имя_файла.xlsx)) и кликните правой кнопкой по разделуModules→Insert→Module. - Вставьте в окно следующий код:
Function CountCellsByColor(rng As Range, color As Range) As LongDim 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
CountCellsByColor = count
End Function
- Закройте редактор VBA.
- Теперь в любой ячейке можно использовать формулу:
=CountCellsByColor(A1:A100; C1)где
A1:A100— диапазон для анализа, аC1— ячейка с образцом цвета.
⚠️ Внимание: Если цвет ячейки задан через условное форматирование, этот код не сработает. Для таких случаев нужен модифицированный скрипт:
Function CountConditionalFormatCells(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 <> xlNone Then
count = count + 1
End If
Next cl
CountConditionalFormatCells = count
End Function
Чтобы посчитать ячейки конкретного цвета (например, красного), добавьте проверку на RGB-код:
If cl.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
🔹 Критически важно: Перед использованием макросов сохраните файл в формате .xlsm (с поддержкой макросов), иначе скрипты не будут работать. Также убедитесь, что макросы разрешены в настройках безопасности (Файл → Параметры → Центр управления безопасностью → Параметры центра... → Настройка макросов).
6. Способ: Power Query для сложных таблиц
Если вы работаете с большими массивами данных (тысячи строк) и нуждаетесь в регулярном подсчёте цветных ячеек, стоит обратить внимание на Power Query — инструмент для преобразования и анализа данных, встроенный в Excel 2016 и новее.
Power Query не умеет напрямую анализировать цвета, но можно обойти это ограничение:
- Добавьте вспомогательный столбец с формулой, которая будет возвращать код цвета (например, через
GET.CELL, как в разделе 2). - Импортируйте данные в
Power Query:Данные→Из таблицы/диапазона. - В редакторе
Power Queryотфильтруйте строки по коду цвета. - Подсчитайте количество строк после фильтрации.
Пример запроса на языке M (для Power Query):
let
Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
Фильтр = Table.SelectRows(Источник, each [ЦветКода] = 3) // 3 — код красного цвета
in
Фильтр
⚠️ Внимание: Power Query не обновляет данные в реальном времени. Чтобы получить актуальные результаты, нужно вручную обновлять запрос (Данные → Обновить все).
Преимущества метода:
- ✅ Работает с миллионами строк;
- ✅ Можно автоматизировать обновление данных;
- ✅ Поддерживает сложные фильтры (например, «красные ячейки в столбце B, где в столбце C значение > 1000»).
Недостатки:
- ❌ Требует предварительной подготовки данных (добавление столбца с кодами цветов);
- ❌ Не работает с условным форматированием без дополнительных скриптов.
Сравнение всех методов: какой выбрать?
Чтобы вам было проще ориентироваться, мы собрали ключевые характеристики каждого способа в одной таблице:
| Метод | Работает с условным форматированием | Требует VBA | Макс. количество ячеек | Сложность |
|---|---|---|---|---|
| Фильтр по цвету | ❌ Нет | ❌ Нет | 10 000 | ⭐ |
| GET.CELL + СЧЁТЕСЛИ | ✅ Да | ❌ Нет | 100 000 | ⭐⭐ |
| Надстройка Color Counter | ❌ Нет | ❌ Нет | 50 (бесплатно) / неогр. (платная) | ⭐ |
| VBA-макрос | ✅ Да | ✅ Да | Неограничено | ⭐⭐⭐ |
| Power Query | ❌ Нет (без доп. скриптов) | ❌ Нет | Миллионы | ⭐⭐⭐ |
Рекомендации по выбору:
- 🔹 Если нужно однократно посчитать ячейки в небольшой таблице → используйте фильтр по цвету.
- 🔹 Если цвета задаются через условное форматирование → только VBA или
GET.CELL. - 🔹 Если работаете с большими данными → Power Query.
- 🔹 Если нужно регулярно считать цвета без макросов → надстройка.
FAQ: ответы на частые вопросы
Можно ли посчитать ячейки по цвету в Google Таблицах?
Да, в Google Таблицах есть экспериментальная функция =COUNTIFBYCOLOR(). Чтобы её включить:
- Перейдите в
Настройки→Экспериментальные функции. - Активируйте опцию
COUNTIFBYCOLOR. - Используйте формулу:
=COUNTIFBYCOLOR(диапазон; "цвет"), где "цвет" можно указать как"red","#ff0000"или ссылку на ячейку.
Ограничение: функция работает только с ручной заливкой, не поддерживает условное форматирование.
Почему функция GET.CELL возвращает ошибку #ИМЯ?
Ошибка #ИМЯ? появляется, если:
- Вы не создали именованный диапазон;
- В формуле опечатка (например,
GET_SELLвместоGET.CELL); - Ячейка, на которую ссылается формула, удалена.
Решение: проверьте имя диапазона в Формулы → Диспетчер имён и исправьте ссылки.
Как узнать RGB-код цвета ячейки для VBA?
Чтобы получить RGB-код цвета ячейки:
- Выделите ячейку с нужным цветом.
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Нажмите
Ctrl+G, чтобы открыть окноImmediate. - Введите команду:
?ActiveCell.Interior.Colorи нажмитеEnter. - Вы получите число (например,
255для красного). Это и есть код цвета.
Для перевода в RGB используйте функцию:
RGB = Hex(ActiveCell.Interior.Color)
Можно ли посчитать ячейки с градиентной заливкой?
Стандартными методами — нет. Градиентная заливка не имеет единого цвета, поэтому ни GET.CELL, ни VBA не смогут её корректно обработать. Единственный выход — заменить градиент на однотонную заливку или использовать надстройку, которая умеет анализировать градиенты (например, Kutools for Excel).
Почему макрос не считает ячейки после копирования таблицы?
Скорее всего, при копировании изменились ссылки на диапазоны в коде VBA. Проверьте:
- Имя листа в макросе (например,
Sheets("Лист1")); - Диапазон анализа (возможно, скопированная таблица находится в другом месте).
Решение: обновите ссылки в коде или используйте ActiveSheet вместо жёстко прописанного имени листа.