Как посчитать цветные клетки в Excel: от простых формул до VBA

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

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

Спойлер: самый надёжный способ — это VBA, но он требует разрешений на выполнение макросов. Если вам нужно решение без программирования, обратите внимание на функцию ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL) — её знают немногие, но она спасает в 80% случаев.

📊 Как часто вы используете цветовую маркировку в Excel?
Ежедневно
Несколько раз в неделю
Редко
Никогда

Почему стандартные функции Excel не видят цвет ячеек

Если вы попытаетесь применить СЧЁТЕСЛИ к диапазону с цветной заливкой, Excel проигнорирует форматирование и посчитает только ячейки с конкретным значением. Это происходит потому, что:

  • 🔹 Цвет заливки — это свойство объекта (ячейки), а не её содержимого. Формулы по умолчанию работают только с данными внутри ячеек.
  • 🔹 В Excel нет встроенной функции, которая могла бы считывать цвет так же легко, как текст или числа.
  • 🔹 Даже условное форматирование (УФ) не помогает — оно динамически меняет цвет на основе правил, но не предоставляет инструментов для его подсчёта.

Интересный факт: в Google Sheets эта проблема решена проще — там есть функция GET.COLOR, но в Excel аналогичного инструмента нет. Приходится идти на хитрости.

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

Способ 1: Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL) — скрытый инструмент Excel

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

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

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

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

  5. Нажмите OK.

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

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

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

=СУММПРОИЗВ(--(ЦветЯчейки(A1:A100)=65535))
Примечание: это формула массива — в старых версиях Excel её нужно вводить через Ctrl+Shift+Enter.
Как узнать код цвета для своей заливки?

1. Залейте ячейку нужным цветом. 2. Выделите её и нажмите Ctrl+1 (или правая кнопка → Формат ячеек). 3. Перейдите на вкладку Заливка и посмотрите на RGB-код внизу окна. 4. Преобразуйте RGB в десятичный код с помощью формулы =RGB(красный;зелёный;синий) (например, =RGB(255;255;0) для жёлтого вернёт 65535).

Способ 2: Пользовательская функция на VBA — универсальное решение

Если вы готовы использовать макросы, VBA предлагает самое гибкое решение. Мы создадим функцию CountColoredCells, которая будет считать ячейки заданного цвета в любом диапазоне.

Инструкция по настройке:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. В меню выберите Insert → Module.
  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.

Теперь в Excel можно использовать функцию как обычно. Например:

=CountColoredCells(A1:A100; B1)

где A1:A100 — диапазон для подсчёта, а B1 — ячейка с образцом цвета.

Преимущества метода:

  • 🔹 Работает с любыми цветами, включая градиенты и пользовательские оттенки.
  • 🔹 Можно модифицировать для подсчёта по нескольким цветам или условному форматированию.
  • 🔹 Быстрее, чем ручной фильтр для больших диапазонов (10 000+ ячеек).

Сохранить файл как .xlsm (с поддержкой макросов)|Разрешить выполнение макросов в настройках безопасности|Проверить, что диапазон не содержит объединённых ячеек|Создать резервную копию данных-->

Способ 3: Надстройка "Color Counter" — решение без программирования

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

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

  1. Скачайте надстройку с официального сайта (бесплатная версия доступна).
  2. Установите файл и перезапустите Excel.
  3. В меню появится новая вкладка Ablebits. Перейдите в Color Tools → Color Counter.
  4. Выделите диапазон для анализа и нажмите Count.

Надстройка покажет количество ячеек для каждого цвета в выбранном диапазоне, включая:

  • 🔹 Цвет заливки.
  • 🔹 Цвет шрифта.
  • 🔹 Условное форматирование.

Важно: надстройки могут конфликтовать с корпоративными политиками безопасности. Перед установкой проверьте разрешения у администратора IT-отдела.

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

Способ 4: Power Query — для опытных пользователей

Power Query (доступен в Excel 2016+) позволяет импортировать данные с сохранением информации о формате, включая цвета. Однако этот метод требует дополнительных действий и подходит только для статических данных.

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

  1. Выделите диапазон и экспортируйте его в Power Query через Данные → Из таблицы/диапазона.
  2. В редакторе Power Query добавьте пользовательский столбец с формулой для извлечения цвета (например, на языке M).
  3. Отфильтруйте данные по нужному цвету и загрузите обратно в Excel.

Пример кода на M для извлечения цвета:

= Table.AddColumn(#"Предыдущий шаг", "Цвет", each if [Column1] <> null then Value.Metadata([Column1])[BackgroundColor] else null)

Ограничения:

  • 🔹 Не работает с динамическими диапазонами (при изменении данных нужно обновлять запрос).
  • 🔹 Требует знания Power Query и языка M.
  • 🔹 Цвета условного форматирования не сохраняются.

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

Если цвет ячеек задаётся через условное форматирование, можно пойти обратным путём: создать правило, которое будет отмечать ячейки меткой (например, "1"), а затем посчитать эти метки стандартной функцией СЧЁТЕСЛИ.

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

  1. Добавьте вспомогательный столбец рядом с вашими данными.
  2. Создайте правило условного форматирования для оригинального диапазона (например, "если значение > 100, залить красным").
  3. Во вспомогательном столбце используйте формулу, которая проверяет условие из шага 2 и возвращает "1", если оно истинно:
    =ЕСЛИ(A1>100;1;"")
  4. Теперь можно посчитать количество "1" с помощью =СЧЁТЕСЛИ(B:B;1).

Этот метод работает только если:

  • 🔹 Цвет ячеек задаётся через УФ (а не вручную).
  • 🔹 У вас есть возможность добавить вспомогательный столбец.
  • 🔹 Условие для цвета можно выразить формулой.

⚠️ Внимание: если в таблице уже есть условное форматирование с несколькими правилами, этот способ может не сработать из-за конфликта правил. В таком случае лучше использовать VBA.

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

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

  • 🔹 Функция возвращает 0, хотя цветные ячейки есть:
    Причина: неверный код цвета. Убедитесь, что вы используете десятичный код, а не RGB. Например, красный — это 255, а не (255, 0, 0).
    Решение: проверьте код цвета через Формат ячеек → Заливка.
  • 🔹 Макрос не работает в shared-файле:
    Причина: макросы отключены для совместного доступа.
    Решение: сохраните файл как .xlsm и откройте его локально.
  • 🔹 Функция ПОЛУЧИТЬ.ЯЧЕЙКУ не обновляется:
    Причина: именованный диапазон не пересчитывается автоматически.
    Решение: нажмите F9 для принудительного пересчёта.

⚠️ Внимание: если вы используете Excel Online, ни один из описанных методов не сработает — веб-версия не поддерживает VBA, надстройки и некоторые функции. Для работы с цветами потребуется десктопная версия.

Ещё одна ловушка: объединённые ячейки. Если в диапазоне есть объединённые клетки, VBA-функция может посчитать их несколько раз или пропустить. Перед подсчётом разъедините ячейки через Главная → Объединить и центрировать → Отменить объединение.

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

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

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

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

Dim cl As Range, count As Long, targetColor As Long

targetColor = color.Font.Color

For Each cl In rng

If cl.Font.Color = targetColor Then count = count + 1

Next cl

CountFontColorCells = count

End Function

Почему моя функция возвращает ошибку #ИМЯ?

Это происходит, если:

  • 🔹 Вы не сохранили файл как .xlsm (для VBA).
  • 🔹 Имя функции написано с ошибкой (регистр важен!).
  • 🔹 Макросы отключены в настройках Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки макросов).

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

Стандартные методы не работают с градиентами. Решения:

  • 🔹 Замените градиент на сплошной цвет.
  • 🔹 Используйте VBA с проверкой типа заливки:
    If cl.Interior.Pattern = xlPatternLinearGradient Then count = count + 1

Можно ли автоматически обновлять счётчик при изменении цвета?

Да, если использовать:

  • 🔹 VBA-функцию с событием Worksheet_Change (обновляет счётчик при изменении листа).
  • 🔹 Надстройку с поддержкой динамического пересчёта (например, Kutools for Excel).

Пример кода для автоматического обновления:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.CalculateFull

End Sub

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

На защищённом листе макросы и функции не могут изменять данные. Решения:

  • 🔹 Временно снимите защиту (Рецензирование → Снять защиту листа).
  • 🔹 Используйте Power Query (не требует разблокировки листа).
  • 🔹 Попросите администратора добавить исключение для вашего макроса.