Как посчитать только закрашенные ячейки в Excel: формулы, фильтры и макросы

Работа с цветовыми метками в Microsoft Excel — это не только вопрос эстетики, но и мощный инструмент анализа данных. Представьте: у вас таблица с сотнями строк, где важные значения выделены жёлтым, а критические ошибки — красным. Как быстро узнать, сколько таких ячеек на листе? Или рассчитать их сумму без ручного пересчёта? Стандартные функции вроде СЧЁТ или СУММ игнорируют цвет фона, поэтому здесь нужны специальные приёмы.

В этой статье мы разберём 5 проверенных способов подсчёта закрашенных ячеек — от простых формул для начинающих до автоматизации через VBA для опытных пользователей. Вы узнаете, как работать с условным форматированием, фильтрами по цвету и даже создавать собственные функции. А ещё — типичные ошибки, которые портят результаты, и как их избежать.

🔹 Важно: методы отличаются по сложности и универсальности. Например, формулы с ПОЛУЧИТЬ.ЯЧЕЙКУ работают только на активном листе, а макросы требуют разрешений на выполнение кода. Мы отметили плюсы и минусы каждого подхода, чтобы вы выбрали оптимальный вариант для своей задачи.

🔹 Если вы часто работаете с цветовыми метками, сохраните эту страницу в закладки — здесь есть решения для любых версий Excel (2010–2023) и Excel Online. А в конце статьи вас ждёт FAQ с ответами на частые вопросы, включая проблемы с макросами и альтернативы для Google Sheets.

1. Способ: Фильтр по цвету ячейки (без формул)

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

Алгоритм действий:

  1. Выделите диапазон с данными (включая заголовки столбцов).
  2. Перейдите на вкладку ДанныеФильтр (или нажмите Ctrl+Shift+L).
  3. Щёлкните по стрелке фильтра в заголовке столбца, где нужно посчитать закрашенные ячейки.
  4. В меню выберите Фильтр по цветуФильтр по цвету ячейки и укажите нужный оттенок.
  5. Отфильтрованные строки — это и есть искомые ячейки. Их количество отобразится в строке состояния внизу окна Excel (например, «Записей: 12 из 100»).

Плюсы: не нужно писать формулы, работает во всех версиях Excel, включая веб-версию.

Минусы: показывает только количество, а не сумму значений; не подходит для динамических диапазонов (при изменении данных фильтр сбрасывается).

2. Способ: Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (для статических данных)

Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL) — скрытый инструмент Excel, который возвращает информацию о формате ячейки, включая цвет фона. Чтобы ею воспользоваться, сначала нужно создать именованный диапазон:

Инструкция:

  1. Нажмите ФормулыДиспетчер имёнСоздать.
  2. В поле «Имя» введите ЦветЯчейки (или любое другое).
  3. В поле «Формула» вставьте:
    =ПОЛУЧИТЬ.ЯЧЕЙКУ(38;!A1)

    Здесь 38 — код цвета фона, а !A1 — относительная ссылка на активную ячейку.

  4. Нажмите OK и закройте диспетчер.

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

=ЕСЛИ(ЦветЯчейки=3;1;0)

где 3 — код жёлтого цвета (список кодов см. ниже). Чтобы посчитать все закрашенные ячейки в диапазоне A1:A100, используйте:

=СУММПРОИЗВ(--(ЦветЯчейки(A1:A100)=3))
Внимание! Эта формула должна вводиться как массивная (в старых версиях Excel — нажать Ctrl+Shift+Enter).
Коды цветов в функции ПОЛУЧИТЬ.ЯЧЕЙКУ

0 — нет заливки, 1 — чёрный, 3 — красный, 4 — зелёный, 5 — синий, 6 — жёлтый, 7 — фиолетовый, 8 — бирюзовый.

Полный список см. в документации Microsoft (коды зависят от палитры темы книги).

⚠️ Внимание: Функция ПОЛУЧИТЬ.ЯЧЕЙКУ работает только на активном листе и не обновляется при изменении цвета ячеек через условное форматирование. Также она не распознаёт цвета, применённые через Условное форматирование — только ручную заливку.

3. Способ: VBA-макрос для подсчёта по цвету

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

Пример кода для подсчёта количества ячеек с жёлтым фоном в диапазоне A1:A100:

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

Как использовать:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код выше в модуль (меню InsertModule).
  3. Вернитесь на лист и в любой ячейке введите:
    =CountColoredCells(A1:A100;B1)

    где B1 — ячейка с образцом цвета (закрасьте её в нужный оттенок).

🔹 Расширенный вариант: чтобы макрос учитывал цвета из условного форматирования, замените строку If cl.Interior.Color = targetColor Then на:

If cl.DisplayFormat.Interior.Color = targetColor Then

Фильтр по цвету|Функция ПОЛУЧИТЬ.ЯЧЕЙКУ|VBA-макрос|Другой вариант-->

4. Способ: Условное форматирование + вспомогательный столбец

Этот метод подходит, если цвета ячеек задаются через условное форматирование (например, правила типа «если значение > 100, закрасить в красный»). Здесь нельзя использовать ПОЛУЧИТЬ.ЯЧЕЙКУ или VBA, но можно обойти ограничение с помощью вспомогательного столбца.

Алгоритм:

  1. Добавьте рядом с исходными данными новый столбец (например, B).
  2. В ячейку B1 введите формулу, которая повторяет условие условного форматирования. Например, если ячейки в столбце A закрашиваются в красный при значении > 100, используйте:
    =ЕСЛИ(A1>100;1;0)
  3. Растяните формулу на весь диапазон.
  4. Теперь количество «закрашенных» ячеек можно посчитать как =СУММ(B1:B100), а сумму значений — как =СУММПРОИЗВ(A1:A100;B1:B100).

Плюсы: работает с динамическими данными, не требует VBA.

Минусы: нужно дублировать логику условного форматирования в формулах.

Создать резервную копию книги|Проверить правила условного форматирования|Добавить новый столбец справа от данных|Протестировать формулу на 2-3 строках-->

5. Способ: Power Query для сложных задач

Если вы работаете с большими наборами данных и используете Power Query (доступен в Excel 2016+ и Excel 365), можно автоматизировать подсчёт закрашенных ячеек через язык M. Этот метод сложнее предыдущих, но незаменим для регулярной обработки данных.

Инструкция:

  1. Выделите исходный диапазон и нажмите ДанныеИз таблицы/диапазона (или Get & Transform Data в английской версии).
  2. В редакторе Power Query добавьте настраиваемый столбец с формулой:
    = if [Column1] > 100 then 1 else 0

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

  3. Сгруппируйте данные по новому столбцу, чтобы посчитать количество строк с единицей.
  4. Нажмите Закрыть и загрузить, чтобы вернуть результаты в Excel.

⚠️ Внимание: Power Query не «видит» цвета ячеек напрямую — он оперирует только данными и правилами. Поэтому этот метод применим только если цвет задаётся через формулы или условное форматирование с чёткими критериями.

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

Чтобы помочь вам определиться, мы составили таблицу с сравнением всех способов по ключевым параметрам:

Метод Подходит для условного форматирования Требует VBA Работает в Excel Online Считает сумму значений Сложность
Фильтр по цвету ❌ Нет ❌ Нет ✅ Да ❌ Нет
ПОЛУЧИТЬ.ЯЧЕЙКУ ❌ Нет ❌ Нет ❌ Нет ✅ Да ⭐⭐
VBA-макрос ✅ Да (с доработкой) ✅ Да ❌ Нет ✅ Да ⭐⭐⭐
Вспомогательный столбец ✅ Да ❌ Нет ✅ Да ✅ Да ⭐⭐
Power Query ✅ Да (косвенно) ❌ Нет ❌ Нет ✅ Да ⭐⭐⭐⭐

🔹 Критически важно: если цвета в вашей таблице применяются через условное форматирование, методы 1 и 2 (ПОЛУЧИТЬ.ЯЧЕЙКУ и фильтр) не сработают. В этом случае используйте VBA с DisplayFormat или вспомогательный столбец.

Типичные ошибки и как их избежать

Даже опытные пользователи Excel сталкиваются с проблемами при подсчёте закрашенных ячеек. Вот самые распространённые ловушки:

⚠️ Внимание: Если вы используете ПОЛУЧИТЬ.ЯЧЕЙКУ в книге с несколькими листами, не забывайте про символ ! перед адресом ячейки (например, !A1). Без него функция будет считывать цвет с активного листа, что приведёт к ошибкам.

🔸 Ошибка 1: Формула возвращает #ЗНАЧ! при использовании ПОЛУЧИТЬ.ЯЧЕЙКУ.

Причина: Не создан именованный диапазон или неправильно указан код цвета.

Решение: Проверьте синтаксис в диспетчере имён и сверьте код цвета с таблицей (см. спойлер выше).

🔸 Ошибка 2: Макрос не видит цвета из условного форматирования.

Причина: Код использует Interior.Color вместо DisplayFormat.Interior.Color.

Решение: Замените строку сравнения в макросе (см. раздел про VBA).

⚠️ Внимание: В Excel Online и мобильной версии Excel макросы и функция ПОЛУЧИТЬ.ЯЧЕЙКУ не работают. Используйте фильтр по цвету или вспомогательный столбец.

🔸 Ошибка 3: После обновления данных количество закрашенных ячеек не меняется.

Причина: Формулы не пересчитываются автоматически (актуально для ПОЛУЧИТЬ.ЯЧЕЙКУ).

Решение: Нажмите F9 для принудительного пересчёта или используйте VBA с событием Worksheet_Change.

FAQ: Ответы на частые вопросы

Можно ли посчитать закрашенные ячейки в Google Sheets?

В Google Sheets нет прямого аналога функции ПОЛУЧИТЬ.ЯЧЕЙКУ, но можно использовать скрипты на Google Apps Script. Пример кода:

function countColoredCells(range, color) {

var sheet = SpreadsheetApp.getActiveSheet();

var data = sheet.getRange(range).getDisplayValues();

var bgColors = sheet.getRange(range).getBackgrounds();

var count = 0;

for (var i = 0; i < bgColors.length; i++) {

for (var j = 0; j < bgColors[i].length; j++) {

if (bgColors[i][j] === color) count++;

}

}

return count;

}

Чтобы использовать его, перейдите в Расширения → Apps Script, вставьте код и сохраните. Затем в ячейке введите =countColoredCells("A1:B10"; "#ffff00"), где #ffff00 — hex-код жёлтого цвета.

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

Используйте комбинацию СУММПРОИЗВ с проверкой цвета. Для VBA подойдёт этот макрос:

Function SumColoredCells(rng As Range, color As Range) As Double

Dim cl As Range

Dim sum As Double

Dim targetColor As Long

targetColor = color.Interior.Color

sum = 0

For Each cl In rng

If cl.Interior.Color = targetColor Then

sum = sum + cl.Value

End If

Next cl

SumColoredCells = sum

End Function

В ячейке введите =SumColoredCells(A1:A100;B1), где B1 — ячейка с зелёной заливкой.

Почему макрос работает медленно на больших диапазонах?

Цикл For Each в VBA обрабатывает каждую ячейку по отдельности, что тормозит выполнение на диапазонах больше 10 000 строк. Оптимизируйте код:

  1. Отключите обновление экрана: Application.ScreenUpdating = False.
  2. Используйте массивы для чтения данных: Dim data As Variant: data = rng.Value.
  3. Применяйте DisplayFormat только если нужно учитывать условное форматирование.

Пример ускоренного кода:

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

Application.ScreenUpdating = False

Dim data As Variant, colors As Variant

Dim i As Long, count As Long

Dim targetColor As Long

targetColor = color.DisplayFormat.Interior.Color

data = rng.Value

colors = rng.DisplayFormat.Interior.Color

For i = 1 To UBound(colors, 1)

If colors(i, 1) = targetColor Then count = count + 1

Next i

FastCountColoredCells = count

Application.ScreenUpdating = True

End Function

Как узнать hex-код цвета ячейки для макроса?

Вручную:

  1. Выделите ячейку с нужным цветом.
  2. Нажмите ГлавнаяЗаливкаДругие цветаДругие.
  3. В поле «Цвет» будет указан hex-код (например, #FFC000 для оранжевого).

Через VBA:

Sub GetHexColor()

Dim cl As Range

Set cl = Selection

MsgBox "HEX: " & Right("000000" & Hex(cl.Interior.Color), 6)

End Sub

Выделите ячейку и запустите макрос — он покажет её цвет в формате RRGGBB.

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

Нет, ни один из описанных методов не работает с градиентной заливкой, так как она не имеет единого цвета. Альтернативные варианты:

  • 🎨 Замените градиент на сплошной цвет (например, используйте самый тёмный оттенок градиента для подсчёта).
  • 📊 Если градиент применён через условное форматирование, создайте вспомогательный столбец с формулой, повторяющей условие.
  • 🖥️ Для сложных задач используйте Power Query + ручную классификацию данных.