Многие пользователи Excel сталкиваются с неприятным сюрпризом: стандартная функция СЧЁТЕСЛИ (COUNTIF) наотрез отказывается подсчитывать ячейки на основе их цвета заливки или шрифта. Причина проста — архитектура Excel строго разделяет данные (значения) и их визуальное представление (форматирование). Формулы умеют работать только с данными, полностью игнорируя оформление ячеек.
Видеоинструкция
Почему СЧЁТЕСЛИ не видит цвет?
Функция СЧЁТЕСЛИ создана для анализа значений: чисел, текста или дат. Цвет ячейки — это свойство оформления, которое накладывается поверх данных. Excel не пересчитывает формулы автоматически при изменении цвета заливки, так как это действие не меняет значение самой ячейки. Чтобы решить эту задачу, нужно использовать обходные пути.
Способ 1. Использование фильтра и функции ПРОМЕЖУТОЧНЫЕ.ИТОГИ
Самый простой способ посчитать ячейки по цвету без использования макросов — отфильтровать их и применить специальную формулу, которая умеет работать только с видимыми строками.
- Выделите вашу таблицу и перейдите на вкладку Данные. Если у вас возникли проблемы с поиском этого раздела, изучите инструкцию: Пропала вкладка Данные в Excel: как вернуть.
- Включите Фильтр, нажмите на стрелочку в заголовке столбца и выберите Фильтр по цвету, указав нужный оттенок.
- В пустой ячейке под таблицей введите формулу:
=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(102; A2:A100)(где 102 — это код функции СЧЁТЗ, игнорирующей скрытые строки, а A2:A100 — ваш диапазон).
Если вам нужно не просто посчитать, а упорядочить данные по цветам, узнайте, как отсортировать несколько столбцов в Excel по алфавиту.
Способ 2. Создание собственной функции (UDF) через VBA
Если вам нужно динамическое решение, которое будет выводить результат прямо на листе без фильтрации, придется использовать простой макрос на VBA.
- Нажмите комбинацию клавиш Alt + F11, чтобы открыть редактор VBA.
- Выберите в верхнем меню Insert -> Module.
- Вставьте следующий код в открывшееся окно модуля:
Function CountColor(CountRange As Range, ColorCell As Range) As Long Dim Cell As Range Dim TargetColor As Long TargetColor = ColorCell.Interior.Color For Each Cell In CountRange If Cell.Interior.Color = TargetColor Then CountColor = CountColor + 1 End If Next Cell End Function - Закройте редактор VBA. Теперь в вашей книге доступна новая формула:
=CountColor(A2:A100; C1), где A2:A100 — диапазон для подсчета, а C1 — ячейка-образец с нужным цветом заливки.
Дополнительно
Обратите внимание, что при изменении цвета заливки вручную Excel не запустит пересчет формулы автоматически. Чтобы обновить результаты работы макроса, вам потребуется нажать клавишу F9 или комбинацию Ctrl + Alt + F9 для принудительного пересчета листа.
Частые ошибки / Устранение неполадок
- Формула VBA возвращает ошибку #ИМЯ? (#NAME?): Убедитесь, что вы сохранили книгу в формате с поддержкой макросов (
.xlsm). Если макросы отключены в настройках безопасности Excel, пользовательские функции работать не будут. - Результат не обновляется при перекрашивании ячеек: Как упоминалось выше, изменение цвета не инициирует автоматический пересчет формул. Нажмите клавишу F9 для обновления данных.
- Проблема с условным форматированием: Метод VBA
Interior.Colorсчитывает только ручную заливку. Если цвет ячеек задан правилами условного форматирования, этот макрос вернет неверный результат. В таком случае лучше использовать стандартную функциюСЧЁТЕСЛИс тем же логическим условием, которое прописано в правиле форматирования. - Неудобно вводить формулы из-за движения курсора: После ввода формулы мы нажимаем Enter. Если вам неудобно стандартное поведение программы, посмотрите, как настроить движение курсора вправо по Enter в Excel.
Часто задаваемые вопросы
Можно ли посчитать ячейки по цвету вообще без макросов?
Да, с помощью фильтрации по цвету и функции ПРОМЕЖУТОЧНЫЕ.ИТОГИ, либо используя старый трюк с Диспетчером имен и функцией ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL).
Почему СЧЁТЕСЛИ выдает ошибку при попытке указать цвет?
Функция СЧЁТЕСЛИ не поддерживает аргументы форматирования. Она работает только со значениями ячеек, а не с их визуальным оформлением.








