Как посчитать в Excel ячейки определенного цвета — все способы от простого к сложному

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

Важно понимать, что Excel не хранит цвет как отдельное свойство ячейки в формулах — его можно извлечь только через макросы или обходные решения. Например, если вы применяете условное форматирование, цвет динамически меняется в зависимости от значения, что усложняет задачу. Мы рассмотрим варианты для статического цвета (заданного вручную) и динамического (через условное форматирование), а также нюансы работы с Excel Online и Google Sheets.

Метод 1: Фильтрация по цвету (без формул)

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

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

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

⚠️ Внимание: Этот метод не работает, если цвет ячейки задан через условное форматирование. Фильтр распознает только цвет, примененный вручную через инструмент Заливка на панели инструментов.

Метод 2: Функция GET.CELL (для статического цвета)

Для автоматизированного подсчета без VBA можно использовать малоизвестную функцию GET.CELL, которая возвращает информацию о форматировании ячейки. Этот метод требует предварительной настройки именованного диапазона.

Инструкция:

  1. Выделите ячейку, где будет отображаться результат (например, B1).
  2. Перейдите на вкладку ФормулыДиспетчер именСоздать.
  3. В поле Имя введите ЦветЯчейки, в поле Диапазон укажите:
    =GET.CELL(38,!A1)

    где 38 — код для цвета фона, а A1 — адрес первой ячейки диапазона.

  4. В ячейке 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 и позволяет создать собственную функцию.

Шаги для создания функции:

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

    CountCellsByColor = count

    End Function

  4. Закройте редактор и вернитесь в Excel.
  5. В любой ячейке введите формулу:
    =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 для извлечения данных о цветах. Этот метод сложнее в настройке, но позволяет обновлять результаты при изменении исходных данных.

Пошаговая инструкция:

  1. Выделите диапазон с данными и нажмите ДанныеИз таблицы/диапазона.
  2. В открывшемся редакторе Power Query добавьте пользовательский столбец с формулой:
    = if [Column1] <> null then Color.ToText([Column1[BackgroundColor]]) else null

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

  3. Отфильтруйте новый столбец по нужному цвету (например, #FFFF0000 для красного).
  4. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

Этот метод требует знания кодов цветов в шестнадцатеричном формате. Например:

ЦветHEX-кодПример отображения
Красный#FFFF0000
Зеленый#FF00FF00
Синий#FF0000FF
Желтый#FFFFFF00

Метод 5: Подсчет цветных ячеек в Google Sheets

В Google Таблицах нет встроенных функций для работы с цветами, но можно использовать Google Apps Script — аналог VBA. Скрипт ниже подсчитывает ячейки с заданным цветом фона:

Инструкция:

  1. Откройте таблицу → РасширенияApps Script.
  2. Удалите стандартный код и вставьте:
    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;

    }

  3. Сохраните скрипт и вернитесь в таблицу.
  4. В любой ячейке введите:
    =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).

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

Полупрозрачные цвета (с альфа-каналом) не поддерживаются стандартными методами. Решение:

  1. Удалите прозрачность через Формат ячеекЗаливка → настройте сплошной цвет.
  2. Используйте VBA с проверкой Interior.Color (прозрачность игнорируется).