Фильтр по двум цветам одновременно в Excel: все работающие способы

Microsoft Excel позволяет фильтровать данные по цвету ячеек, но стандартный инструмент ограничен выбором только одного цвета за раз. Что делать, если нужно отобразить строки, где ячейки окрашены и в красный, и в зелёный одновременно? Или исключить из выборки всё, кроме двух конкретных цветов?

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

Важно понимать, что решение зависит от версии Excel (2010, 2013, 2016, 2019, 365) и структуры ваших данных. Например, в Excel 365 с динамическими массивами подход будет отличаться от Excel 2010 без надстроек. Также имеет значение, применяется ли цвет к ячейкам через условное форматирование или вручную.

Если вы никогда не работали с фильтрами по цвету, начните с базовой настройки. Включите фильтр (Данные → Фильтр), откройте выпадающий список в столбце и выберите Фильтр по цвету. Здесь вы увидите палитру доступных цветов — но только для одного выбора. Наша задача — расширить эту функциональность.

Метод 1: Использование вспомогательного столбца с формулой

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

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

  1. Добавьте справа от таблицы новый столбец (например, "Фильтр_цвет").
  2. Используйте формулу, которая проверяет цвет ячейки в текущей строке.
  3. Примените стандартный фильтр к вспомогательному столбцу.

Для ручного форматирования подойдёт такой макрос (вставьте его в модуль через Alt+F11):

Function GetCellColor(cell As Range) As Long

GetCellColor = cell.Interior.Color

End Function

Затем в ячейке вспомогательного столбца введите:

=OR(GetCellColor(A2)=RGB(255,0,0), GetCellColor(A2)=RGB(0,255,0))

где RGB(255,0,0) — красный, а RGB(0,255,0) — зелёный.

Создать новый столбец справа от данных|Вставить макрос GetCellColor в модуль VBA|Применить формулу OR для проверки двух цветов|Включить фильтр по вспомогательному столбцу-->

Преимущество метода: работает во всех версиях Excel, не требует надстроек. Недостаток: нужно обновлять формулы при изменении цветов.

Метод 2: Фильтр по условному форматированию

Если цвета ячеек задаются через условное форматирование, можно использовать правила фильтрации на основе значений, которые эти цвета отображают. Например, если зелёный цвет соответствует значению "Да", а красный — "Нет", фильтруйте по этим текстам.

Инструкция:

  1. Выделите диапазон с данными.
  2. Перейдите в Главная → Условное форматирование → Управление правилами.
  3. Посмотрите, какие условия привязаны к цветам (например, "больше 100" для зелёного).
  4. Примените стандартный фильтр по этим условиям.

Если правила условного форматирования сложные (например, формулы), используйте функцию CELL("color", ссылка) во вспомогательном столбце. Она возвращает 1, если цвет применён через условное форматирование.

Как узнать код цвета в условном форматировании?

Откройте Управление правилами, выберите правило и нажмите Изменить правило. В поле "Формат" будет указан цвет в формате RGB или название темы (например, "Зелёный, акцент 6").

Важно! Функция CELL("color",...) работает только для цветов, применённых вручную, а не через условное форматирование. Для последних нужен VBA.

Метод 3: Power Query для продвинутых пользователей

В Excel 2016 и новее доступен инструмент Power Query (вкладка Данные → Получить данные), который позволяет трансформировать данные перед фильтрацией. С его помощью можно создать столбец с информацией о цвете и затем фильтровать по нему.

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

  1. Выделите таблицу и нажмите Данные → Из таблицы/диапазона (Power Query).
  2. В редакторе запросов добавьте пользовательский столбец с формулой:
    = if [ВашСтолбец] = "Значение1" then "Цвет1" else if [ВашСтолбец] = "Значение2" then "Цвет2" else null
  3. Фильтруйте новый столбец по названиям цветов ("Цвет1" или "Цвет2").
  4. Загрузите данные обратно в Excel.

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

Вспомогательный столбец с формулой|Power Query|Макрос VBA|Условное форматирование-->

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

Метод 4: Макрос VBA для фильтрации по двум цветам

Для полной автоматизации напишем макрос, который будет фильтровать строки по двум заданным цветам. Этот способ самый гибкий, но требует базовых знаний VBA.

Код макроса (вставьте в модуль через Alt+F11 → Вставка → Модуль):

Sub FilterByTwoColors()

Dim ws As Worksheet

Dim rng As Range, cell As Range

Dim color1 As Long, color2 As Long

Dim i As Long

' Укажите лист и диапазон

Set ws = ActiveSheet

Set rng = ws.UsedRange

' Укажите цвета в формате RGB (например, красный и зелёный)

color1 = RGB(255, 0, 0) ' Красный

color2 = RGB(0, 255, 0) ' Зелёный

' Снять все фильтры

If ws.AutoFilterMode Then ws.AutoFilterMode = False

' Применить фильтр по двум цветам

rng.AutoFilter Field:=1, Criteria1:=color1, Operator:=xlFilterCellColor

rng.AutoFilter Field:=1, Criteria2:=color2, Operator:=xlFilterCellColor

' Альтернативный вариант для фильтрации строк, где ХОТЯ БЫ одна ячейка одного из цветов

' (раскомментируйте, если нужен такой вариант)

' For i = 2 To rng.Rows.Count

' For Each cell In rng.Rows(i).Cells

' If cell.Interior.Color = color1 Or cell.Interior.Color = color2 Then

' cell.EntireRow.Hidden = False

' Exit For

' Else

' cell.EntireRow.Hidden = True

' End If

' Next cell

' Next i

End Sub

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

  1. Нажмите Alt+F8, выберите макрос FilterByTwoColors и запустите.
  2. В коде замените RGB(255, 0, 0) и RGB(0, 255, 0) на нужные цвета (узнать код цвета можно через макрос GetCellColor из Метода 1).
  3. По умолчанию фильтр применяется к первому столбцу. Измените Field:=1 на номер вашего столбца.

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

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

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

Метод Сложность Работает с ручными цветами Работает с условным форматированием Требует VBA Подходит для больших данных
Вспомогательный столбец + формула Средняя Да Частично Да (для GET.CELL) Да
Условное форматирование + фильтр по значениям Низкая Нет Да Нет Да
Power Query Высокая Нет Да (если привязан к данным) Нет Да
Макрос VBA Высокая Да Да Да Да

Для одноразовых задач подойдёт вспомогательный столбец. Если вы часто работаете с цветами, освойте макрос VBA — он сэкономит время в долгосрочной перспективе. Для данных с чёткой логикой цветов (например, "красный = просрочено") оптимален Power Query.

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

При фильтрации по двум цветам пользователи часто сталкиваются с следующими проблемами:

  • 🔴 Цвета не распознаются: Убедитесь, что цвета применены к ячейкам, а не к шрифту. Функции вроде GET.CELL работают только с Interior.Color, а не с Font.Color.
  • 🟡 Фильтр не обновляется: При изменении цветов вручную не забывайте пересчитывать формулы (F9) или запускать макрос заново.
  • 🟢 Не работает с условным форматированием: Для таких случаев используйте CELL("color",...) или анализируйте условия, по которым применяются цвета.
  • 🔵 Макрос выдаёт ошибку: Проверьте, что в коде указаны правильные номера столбцов (Field:=1 соответствует столбцу A). Также убедитесь, что на листе включён фильтр (AutoFilter).

Внимание! В Excel Online и мобильной версии Excel макросы и некоторые функции (например, GET.CELL) не поддерживаются. Для таких случаев используйте вспомогательные столбцы с формулами на основе значений.

Продвинутые сценарии: фильтр по цветам в сводных таблицах

Если ваши данные organised в сводную таблицу, фильтрация по цветам становится ещё сложнее. Сводные таблицы не поддерживают фильтр по цвету ячеек напрямую, но есть обходные пути:

  • 📊 Добавьте исходные данные в модель: Создайте вспомогательный столбец в исходной таблице (как в Методе 1), затем обновите сводную таблицу. Теперь можно фильтровать по значениям вспомогательного столбца.
  • 🔄 Используйте срезы: Если цвета соответствуют категориям (например, "Высокий/Низкий"), создайте срез по этим категориям.
  • 🖥️ Power Pivot: В Excel 2013+ можно загрузить данные в модель Power Pivot, добавить столбец с информацией о цветах и построить сводную таблицу на её основе.

Пример для Power Pivot:

  1. Выделите исходную таблицу и нажмите Вставка → Сводная таблица → Добавить в модель данных.
  2. В окне Power Pivot добавьте вычисляемый столбец:
    =IF([ВашСтолбец]="Условие1", "Цвет1", IF([ВашСтолбец]="Условие2", "Цвет2", "Другой"))
  3. Постройте сводную таблицу на основе модели и добавьте новый столбец в фильтры.

Ограничение: Power Pivot доступен только в Excel 2013 Professional Plus и новее. Для домашних версий используйте вспомогательные столбцы.

FAQ: Частые вопросы по фильтрации по двум цветам

Можно ли фильтровать по двум цветам без макросов?

Да, с помощью вспомогательного столбца (Метод 1) или Power Query (Метод 3). Макросы ускоряют процесс, но не являются обязательными.

Для ручных цветов подойдёт формула с GET.CELL (требует однократной настройки VBA). Для цветов из условного форматирования — анализ правил или Power Query.

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

Excel не сохраняет состояние фильтра по цветам при закрытии книги. Чтобы обойти это, используйте:

  • Макрос, который применяет фильтр при открытии файла (событие Workbook_Open).
  • Вспомогательный столбец с формулами — его можно отфильтровать стандартными средствами.
Как фильтровать по цветам в защищённом листе?

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

  • Снимите защиту (Рецензирование → Снять защиту листа).
  • Используйте Power Query — он работает независимо от защиты листа.
  • Создайте копию листа без защиты для фильтрации.
Можно ли фильтровать по цветам шрифта, а не ячеек?

Да, но подход отличается. Для цвета шрифта используйте:

  • Функцию GET.CELL с параметром 37 (цвет шрифта): =GET.CELL(37, A1).
  • Макрос, который проверяет cell.Font.Color вместо cell.Interior.Color.

Пример макроса для фильтрации по двум цветам шрифта:

Sub FilterByTwoFontColors()

Dim rng As Range, cell As Range

Dim color1 As Long, color2 As Long

color1 = RGB(255, 0, 0) ' Красный шрифт

color2 = RGB(0, 0, 255) ' Синий шрифт

For Each cell In Selection

If cell.Font.Color <> color1 And cell.Font.Color <> color2 Then

cell.EntireRow.Hidden = True

End If

Next cell

End Sub

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

Условное форматирование не возвращает цвет напрямую, но можно:

  1. Посмотреть правила в Управление правилами и воспроизвести условия во вспомогательном столбце.
  2. Использовать VBA для анализа правил:
    Sub ListConditionalFormats()
    

    Dim ws As Worksheet

    Dim fc As FormatCondition

    Set ws = ActiveSheet

    For Each fc In ws.Cells.FormatConditions

    Debug.Print fc.ApplyTo.Address, fc.Type, fc.Interior.Color

    Next fc

    End Sub