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

Подсчёт окрашенных ячеек в Microsoft Excel — задача, с которой сталкиваются пользователи при анализе данных, где цвет фона несет смысловую нагрузку. Например, в отчётах о продажах красным могут выделяться убыточные позиции, зелёным — прибыльные, а жёлтым — требующие внимания. В отличие от стандартных функций вроде СЧЁТЕСЛИ, которые работают с числовыми или текстовыми значениями, подсчёт по цвету требует обходных решений.

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

Если вы работаете с большими таблицами, где цветовое кодирование используется для визуального анализа, умение быстро подсчитывать такие ячейки сэкономит часы ручной работы. А для тех, кто только начинает осваивать Excel, мы подробно объясним каждый шаг — без пропусков и "очевидных" моментов, которые часто упускают в инструкциях.

1. Способ: Ручной подсчёт с помощью фильтра по цвету

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

Чтобы воспользоваться этим способом:

  1. Выделите диапазон ячеек, в котором нужно посчитать цветные ячейки (например, A1:D100).
  2. Перейдите на вкладку ДанныеФильтр (или нажмите Ctrl+Shift+L).
  3. Нажмите на стрелочку фильтра в заголовке столбца и выберите Фильтр по цветуЦвет заливки → нужный цвет.

После применения фильтра Excel скрывает все ячейки, кроме тех, что соответствуют выбранному цвету. Количество оставшихся строк в области данных и будет искомым числом. Например, если после фильтрации в таблице осталось 15 строк, значит, столько ячеек окрашено в выбранный цвет.

⚠️ Внимание: Этот метод работает только для видимых ячеек. Если в таблице есть скрытые строки или столбцы, фильтр их проигнорирует. Также он не подходит для подсчёта ячеек с условным форматированием, так как цвет в этом случае динамический и может меняться при изменении данных.

  • ✅ Быстро и без формул
  • ✅ Не требует знаний VBA
  • ❌ Не автоматизируется
  • ❌ Не работает со скрытыми данными

2. Способ: Функция ПОИСКПОЗ + СУММПРОИЗВ для условного форматирования

Если цвет ячеек задаётся через условное форматирование, можно обойтись без VBA, используя комбинацию функций. Этот метод работает, когда цвет зависит от значения ячейки (например, красный — если значение < 0).

Предположим, у нас есть диапазон A1:A10 с числами, где ячейки со значениями меньше 0 окрашены в красный. Чтобы посчитать их количество:

  1. Добавьте вспомогательный столбец (например, B).
  2. В ячейку B1 введите формулу:
    =ЕСЛИ(A1<0;1;0)

    и протяните её на весь диапазон.

  3. В любой свободной ячейке используйте:
    =СУММ(B1:B10)

    чтобы получить количество "красных" ячеек.

Если условное форматирование сложнее (например, зависит от нескольких условий), формулу во вспомогательном столбце нужно адаптировать. Например, для цвета, который появляется при выполнении условия И(A1<0; A1>-100), формула будет:

=ЕСЛИ(И(A1<0; A1>-100); 1; 0)
Как узнать правило условного форматирования?

Выделите ячейку с нужным цветом → Перейдите на вкладку ГлавнаяУсловное форматированиеУправление правилами. В открывшемся окне будет видно условие, по которому применяется цвет.

⚠️ Внимание: Этот метод не работает для ячеек, окрашенных вручную (без условного форматирования). Также он требует создания вспомогательного столбца, что не всегда удобно в больших таблицах.

Тип форматирования Подходит ли метод? Пример формулы
Условное (простое условие) ✅ Да =ЕСЛИ(A1<0;1;0)
Условное (сложное условие) ✅ Да =ЕСЛИ(И(A1>100;A1<200);1;0)
Ручная заливка ❌ Нет
Цвет шрифта (не заливки) ❌ Нет

3. Способ: Пользовательская функция на VBA для ручной заливки

Когда цвет ячеек задаётся вручную (не через условное форматирование), ни фильтры, ни стандартные функции не помогут. Здесь на помощь приходит VBA — язык программирования для автоматизации Excel. Мы создадим пользовательскую функцию, которую можно будет использовать как обычную формулу.

Следуйте инструкции:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите InsertModule.
  3. Вставьте следующий код:
    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

  4. Закройте редактор VBA.

Теперь в любой ячейке можно использовать формулу:

=CountColoredCells(A1:A10; C1)

где:

- A1:A10 — диапазон для подсчёта,

- C1 — ячейка с образцом цвета (её фон должен совпадать с искомым цветом).

Включить поддержку макросов в настройках Excel|Создать резервную копию файла|Убедиться, что ячейка-образец имеет нужный цвет|Проверить диапазон на наличие объединённых ячеек

-->

⚠️ Внимание: Функция чувствительна к точному совпадению цвета. Если ячейки окрашены в оттенки, которые визуально похожи, но имеют разные RGB-коды (например, #FF0000 и #FE0101), они не будут учтены. Чтобы избежать этого, используйте одну и ту же палитру цветов при заливке.

  • ✅ Работает с ручной заливкой
  • ✅ Можно использовать как формулу
  • ❌ Требует знания VBA
  • ❌ Не работает в Excel Online

4. Способ: Макрос для подсчёта всех цветов в диапазоне

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

Скопируйте этот код в модуль VBA (как в предыдущем способе):

Sub CountAllColors()

Dim rng As Range

Dim cl As Range

Dim dict As Object

Dim color As Long

Dim count As Long

Dim i As Integer

Dim ws As Worksheet

Set dict = CreateObject("Scripting.Dictionary")

Set ws = ActiveSheet

Set rng = Application.InputBox("Выберите диапазон:", "Подсчёт цветов", Selection.Address, Type:=8)

For Each cl In rng

color = cl.Interior.Color

If dict.Exists(color) Then

dict(color) = dict(color) + 1

Else

dict.Add color, 1

End If

Next cl

' Вывод результатов на новый лист

Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = "Цвета_отчёт"

Range("A1").Value = "Цвет"

Range("B1").Value = "Количество"

Range("A1:B1").Font.Bold = True

i = 2

For Each color In dict.Keys

Cells(i, 1).Interior.Color = color

Cells(i, 2).Value = dict(color)

i = i + 1

Next color

Columns("A:B").AutoFit

End Sub

После запуска макроса (Alt + F8 → выберите CountAllColorsВыполнить) появится новое окно, где нужно указать диапазон для анализа. Результат будет выведен на отдельный лист с названиями цветов и их количеством.

Ручной фильтр|Формулы для условного форматирования|VBA-функции|Макросы|Не считаю цветные ячейки

-->

⚠️ Внимание: Макрос создаёт новый лист с отчётом. Если в книге уже есть лист с именем Цвета_отчёт, макрос завершится с ошибкой. Перед запуском убедитесь, что такого листа нет, или переименуйте его.

5. Способ: Использование надстройки Kutools for Excel

Для тех, кто не хочет разбираться в VBA или формулах, есть альтернатива — надстройка Kutools for Excel. Она добавляет в Excel дополнительные функции, включая инструмент для подсчёта цветных ячеек.

Чтобы воспользоваться им:

  1. Установите Kutools for Excel (доступна бесплатная пробная версия).
  2. Выделите диапазон с данными.
  3. Перейдите на вкладку KutoolsВыделитьВыделить ячейки с форматированием.
  4. В открывшемся окне выберите Цвет заливки и укажите нужный цвет.
  5. Нажмите ОК — все ячейки выбранного цвета будут выделены, а их количество отобразится в строке состояния.

Преимущество этого метода — не нужно писать код или формулы. Однако надстройка платная (хотя и имеет бесплатный пробный период), и её установка требует прав администратора на компьютере.

  • ✅ Интуитивно понятный интерфейс
  • ✅ Работает с любыми цветами (ручная заливка, условное форматирование)
  • ❌ Платная лицензия
  • ❌ Требует установки

6. Способ: Power Query для продвинутых пользователей

Power Query — мощный инструмент для преобразования данных, который доступен в Excel 2016 и новее. Хотя он не предназначен напрямую для работы с цветами, его можно использовать для косвенного подсчёта, если цвет зависит от значения.

Предположим, у вас есть столбец с данными, где цвет ячейки зависит от значения (например, красный — если значение отрицательное). Тогда:

  1. Выделите диапазон и перейдите на вкладку ДанныеИз таблицы/диапазона.
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
    = if [Column1] < 0 then "Красный" else "Другой"

    (замените Column1 на имя вашего столбца).

  3. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.
  4. Теперь используйте СЧЁТЕСЛИ для подсчёта значений "Красный" в новом столбце.

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

Как открыть Power Query в старых версиях Excel?

В Excel 2010-2013 Power Query доступен как надстройка Power Query for Excel, которую можно скачать с сайта Microsoft. В Excel 2016 и новее инструмент встроен по умолчанию на вкладке Данные.

⚠️ Внимание: Power Query не распознаёт цвет как отдельное свойство. Он работает только с логикой, которую можно выразить формулой. Например, если цвет ячейки зависит от текстового значения (например, "Да" — зелёный, "Нет" — красный), вы сможете посчитать такие ячейки через СЧЁТЕСЛИ без Power Query.

Сравнение методов: какой выбрать?

Выбор способа зависит от вашей задачи, уровня подготовки и версий Excel. Ниже — сравнительная таблица, которая поможет определиться:

Метод Тип заливки Сложность Автоматизация Подходит для больших данных
Ручной фильтр Любая ❌ Нет ❌ Нет
Формулы для условного форматирования Только условное ⭐⭐ ✅ Да ✅ Да
VBA-функция Ручная заливка ⭐⭐⭐ ✅ Да ✅ Да
Макрос для всех цветов Любая ⭐⭐⭐⭐ ✅ Да ✅ Да
Надстройка Kutools Любая ✅ Да ✅ Да
Power Query Только через логику ⭐⭐⭐ ✅ Да ✅ Да

Для разовых задач подойдёт ручной фильтр или Kutools. Если нужно автоматизировать процесс в больших таблицах, лучше освоить VBA или формулы для условного форматирования. Для анализа данных, где цвет зависит от значений, оптимален Power Query.

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

Можно ли посчитать цветные ячейки в Excel Online?

Excel Online не поддерживает VBA и большинства надстроек, поэтому доступны только ручные методы: фильтр по цвету или формулы для условного форматирования (если цвет зависит от значения). Для ручной заливки альтернатив нет.

Почему VBA-функция не видит цвет ячейки?

Наиболее частая причина — цвета визуально похожи, но имеют разные RGB-коды. Например, красный из стандартной палитры (RGB(255, 0, 0)) и красный, выбранный с помощью пипетки (RGB(254, 1, 1)), для VBA будут разными. Чтобы избежать этого, используйте одну и ту же палитру или проверяйте цвета через Interior.Color.

Как посчитать ячейки с цветом шрифта, а не заливки?

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

Function CountFontColor(rng As Range, color As Range) As Long

Dim cl As Range

Dim count As Long

Dim targetColor As Long

targetColor = color.Font.Color

count = 0

For Each cl In rng

If cl.Font.Color = targetColor Then

count = count + 1

End If

Next cl

CountFontColor = count

End Function

Используйте её аналогично: =CountFontColor(A1:A10; C1), где C1 — ячейка с образцом цвета шрифта.

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

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

Как посчитать цветные ячейки в защищённом листе?

Если лист защищён, VBA-функции и макросы не будут работать, так как они требуют доступа к свойствам ячеек. В этом случае остаются только ручные методы: фильтр по цвету или (если цвет зависит от значения) формулы во вспомогательном столбце.