Вы когда-нибудь сталкивались с ситуацией, когда в таблице Excel данные выделены разными цветами, а вам нужно быстро посчитать количество ячеек определённого оттенка? Стандартные функции СЧЁТЕСЛИ или СУММЕСЛИ здесь бессильны — они работают только с содержимым ячеек, игнорируя их оформление. Между тем, подсчёт по цветам может пригодиться в самых разных сценариях: от анализа продаж (где цвета обозначают регионы) до контроля выполнения задач (где зелёный — "готов", красный — "просрочено").
В этой статье мы разберём 5 проверенных методов, как считать по цветам в Excel — от элементарных (доступных даже новичкам) до продвинутых с использованием VBA. Вы узнаете, как обойти ограничения программы, какие подводные камни ждут при работе с условным форматированием, и почему иногда проще использовать Power Query, чем писать макросы. Все инструкции сопровождаются скриншотами, готовыми формулами и примерами кода — их можно скопировать и сразу применить в своей таблице.
1. Метод 1: Фильтрация по цвету (без формул)
Самый простой способ — воспользоваться встроенной фильтрацией по цвету ячейки. Он не требует знания формул или программирования, но подходит только для визуального анализа, а не для автоматических расчётов.
Как это работает:
- 🔹 Выделите диапазон данных с цветными ячейками (например,
A1:D100). - 🔹 Перейдите на вкладку
Данные→Фильтр(или нажмитеCtrl+Shift+L). - 🔹 Нажмите на стрелочку фильтра в заголовке столбца →
Фильтр по цвету→ выберите нужный оттенок. - 🔹 В строке состояния (внизу окна) появится количество отфильтрованных ячеек.
✅ Плюсы: быстро, не требует формул, работает во всех версиях Excel.
❌ Минусы: результат не фиксируется в ячейке (при обновлении данных придётся фильтровать заново), нельзя использовать в формулах.
⚠️ Внимание: Если цвета ячеек задаются через условное форматирование, этот метод не сработает. В таком случае переходите к следующим способам.
2. Метод 2: Функция GET.CELL (для ручной заливки)
Малоизвестный приём — использование функции GET.CELL, которая возвращает информацию о формате ячейки, включая цвет. Этот метод работает только с ручной заливкой и требует предварительной настройки.
Инструкция:
- Нажмите
Ctrl+F3, чтобы открытьДиспетчер имён. - Создайте новое имя (например,
ЦветЯчейки) со формулой:=GET.CELL(38,!A1)где
38— код цвета заливки, а!A1— ссылка на активную ячейку. - В любой ячейке введите формулу:
=ЦветЯчейкии скопируйте её на нужный диапазон.
- Теперь используйте
СЧЁТЕСЛИдля подсчёта ячеек с определённым кодом цвета.
| Цвет | Код цвета (GET.CELL) | Пример формулы |
|---|---|---|
| Красный | 3 | =СЧЁТЕСЛИ(B2:B10; 3) |
| Зелёный | 4 | =СЧЁТЕСЛИ(B2:B10; 4) |
| Синий | 5 | =СЧЁТЕСЛИ(B2:B10; 5) |
| Жёлтый | 6 | =СЧЁТЕСЛИ(B2:B10; 6) |
🔍 Как узнать код цвета? Выделите ячейку с нужным цветом, введите в строке формул =GET.CELL(38,!A1) и нажмите Enter.
Почему GET.CELL возвращает 0 для условного форматирования?
Функция GET.CELL распознаёт только ручную заливку, применённую через инструмент "Цвет заливки" на главной вкладке. Условное форматирование (даже если визуально цвет совпадает) обрабатывается иначе — для него нужен VBA или Power Query.
3. Метод 3: VBA-макрос для подсчёта по цветам
Если вам нужно автоматизировать подсчёт по цветам в больших таблицах, без VBA не обойтись. Этот метод универсален: работает и с ручной заливкой, и с условным форматированием.
Скопируйте этот код в редактор VBA (Alt+F11 → Insert → Module):
Function CountByColor(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.Interior.Color = color.Interior.Color Then
count = count + 1
End If
Next cl
CountByColor = count
End Function
Как использовать:
- 📌 Выделите ячейку с образцом цвета (например,
F1— красная ячейка). - 📌 В любой ячейке введите формулу:
=CountByColor(A1:A100; F1)где
A1:A100— диапазон для подсчёта, аF1— ячейка-образец.
Выключить защиту макросов в Файл → Параметры → Центр управления безопасностью|Настройки центра... → Параметры макросов
Сохранить файл как .xlsm (с поддержкой макросов)
Проверить, что модуль вставлен в ThisWorkbook, а не в лист
-->
⚠️ Внимание: Если цвета в ячейках задаются через условное форматирование с формулой, макрос выше не сработает. В этом случае используйте модифицированную версию кода с проверкой .DisplayFormat.Interior.Color.
4. Метод 4: Power Query для динамического подсчёта
В Excel 2016 и новее (включая Office 365) есть мощный инструмент — Power Query, который умеет анализировать цвета ячеек. Этот метод подходит для создания динамических отчётов, которые обновляются при изменении данных.
Пошаговая инструкция:
- Выделите диапазон с данными → вкладка
Данные→Из таблицы/диапазона(илиGet & Transform Dataв англоязычной версии). - В открывшемся редакторе Power Query добавьте пользовательский столбец со формулой:
= if [Column1] = null then null else if Value.Is(Value.FromText([Column1]), type text) then "Text" else "Number"(замените
Column1на имя вашего столбца). - Добавьте ещё один столбец для цвета:
= try Record.Field(Value.Metadata([Column1]), "BackgroundColor") otherwise null - Отфильтруйте данные по коду цвета (например,
#FFFF0000для красного). - Нажмите
Закрыть и загрузить— результат появится на новом листе.
⚡ Преимущество метода: отчёт обновляется в один клик (Данные → Обновить все), не требует VBA.
Фильтрация по цвету
Функция GET.CELL
VBA-макросы
Power Query
Не работал с цветами
-->
5. Метод 5: Условное форматирование + вспомогательный столбец
Если цвета ячеек задаются через условное форматирование, можно пойти на хитрость: создать вспомогательный столбец, который будет дублировать логику форматирования, а затем считать по его значениям.
Пример:
- 🟢 Допустим, у вас правило: "Если значение > 100, заливка зелёная".
- 🟢 В соседнем столбце добавьте формулу:
=ЕСЛИ(A1>100; "Зелёный"; "Красный") - 🟢 Теперь используйте
СЧЁТЕСЛИдля подсчёта меток:=СЧЁТЕСЛИ(B1:B100; "Зелёный")
💡 Когда этот метод удобен:
- ✔️ Правила условного форматирования простые (основаны на значениях ячеек).
- ✔️ Нужно избежать
VBAили Power Query. - ✔️ Данные часто обновляются, и требуется автоматический пересчёт.
6. Распространённые ошибки и как их избежать
Даже опытные пользователи Excel сталкиваются с проблемами при подсчёте по цветам. Вот TOP-3 ошибки и их решения:
- Ошибка #1: Функция возвращает 0 для ячеек с условным форматированием.
Решение: ИспользуйтеVBAс проверкой.DisplayFormat.Interior.Colorили создайте вспомогательный столбец. - Ошибка #2: Цвета выглядят одинаково, но имеют разные коды (например, #FF0000 и #CC0000).
Решение: Проверьте точные коды цветов черезGET.CELL(38, ...)или макрос:Sub ShowColorCode()MsgBox Selection.Interior.Color
End Sub
- Ошибка #3: После копирования данных цвета "слетают".
Решение: ИспользуйтеСпециальная вставка→Форматыили Power Query для импорта.
🔧 Совет для сложных таблиц: Если в вашей таблице используются градиенты или полупрозрачные цвета, ни один из перечисленных методов не сработает корректно. В этом случае единственный выход — ручная разметка данных (например, добавление столбца с категориями).
FAQ: Частые вопросы по подсчёту цветов в Excel
Можно ли посчитать ячейки по цвету шрифта, а не заливки?
Да, для этого модифицируйте VBA-функцию, заменив .Interior.Color на .Font.Color. Пример:
Function CountByFontColor(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
CountByFontColor = count
End Function
Для GET.CELL используйте код 24 вместо 38.
Почему макрос CountByColor не видит цвета в моей таблице?
Вероятные причины:
- Цвета задаются через условное форматирование — используйте
.DisplayFormat.Interior.Color. - Цвет ячейки-образца не совпадает с цветами в диапазоне (проверьте коды через
MsgBox). - В настройках Excel отключены макросы (включите в
Файл → Параметры → Центр управления безопасностью).
Как посчитать сумму значений в ячейках определённого цвета?
Используйте модифицированную VBA-функцию:
Function SumByColor(rng As Range, color As Range) As Double
Dim cl As Range, total As Double
total = 0
For Each cl In rng
If cl.Interior.Color = color.Interior.Color Then
total = total + cl.Value
End If
Next cl
SumByColor = total
End Function
Вызывайте её так: =SumByColor(A1:A100; F1).
Работают ли эти методы в Google Sheets?
В Google Таблицах нет встроенных функций для подсчёта по цветам, но можно:
- Использовать
Apps Script(аналогVBA). - Установить надстройку Color Counter из магазина дополнений.
- Экспортировать данные в Excel и применить описанные выше методы.
Можно ли автоматически обновлять подсчёт цветов при изменении данных?
Да, для этого:
- В
VBAиспользуйте событиеWorksheet_Changeдля пересчёта. - В Power Query настройте автоматическое обновление при открытии файла.
- Для
GET.CELLдобавьте волатильную функцию (например,СЛЧИС()) в зависимую ячейку, чтобы принудительно обновлять расчёты.