Цветовая маркировка данных в Microsoft Excel — мощный инструмент визуального анализа, но стандартный фильтр по цвету позволяет выбирать только один оттенок за раз. Что делать, если нужно отфильтровать строки с ячейками красного И зелёного цвета одновременно? Или исключить все строки, где есть жёлтые или синие метки?
Эта проблема знакома каждому, кто работает с большими таблицами, где цвета используются для категоризации: от финансовых отчётов (красный — убытки, зелёный — прибыль) до проектных трекеров (жёлтый — "в процессе", оранжевый — "требует внимания"). В статье разберём 5 проверенных методов, включая скрытые функции стандартного фильтра, условное форматирование с формулами, VBA-макросы и даже обходные пути для Excel Online.
Особое внимание уделим ограничениям каждого способа: например, почему фильтр по двум цветам через интерфейс невозможен без макросов, но зато можно автоматизировать процесс с помощью Sub за 3 клика. А для тех, кто не хочет копаться в коде, покажем, как использовать вспомогательные столбцы с формулами GET.CELL — метод, работающий даже в защищённых файлах.
Важно: Все инструкции актуальны для Excel 2013–2026 и Microsoft 365. Для Excel Online и Mac-версий доступны не все методы — об этом предупредим отдельно.
Почему стандартный фильтр не умеет выбирать несколько цветов
На первый взгляд, функция фильтрации по цвету в Excel кажется универсальной: достаточно кликнуть на стрелку автофильтра, выбрать Фильтр по цвету и отметить нужный оттенок. Но здесь кроется главное ограничение: система позволяет выбрать только один цвет за раз. Попытка отметить второй оттенок автоматически сбрасывает выбор предыдущего.
Причина такого поведения заложена в архитектуре автофильтра. Дело в том, что фильтрация по цвету технически реализована как OR-условие (ИЛИ), но с жёстким ограничением на один критерий. То есть Excel ищет строки, где хоть одна ячейка соответствует выбранному цвету, но не умеет комбинировать несколько цветов в одном запросе.
Это подтверждает и официальная документация Microsoft: в разделе ["Filter by color"](https://support.microsoft.com/en-us/office) чётко указано, что фильтр применяется к одному цвету за раз. Более того, даже если вы попробуете обойти это через Расширенный фильтр, то обнаружите, что в критериях нет опции для работы с цветами — только с текстом, числами и датами.
⚠️ Внимание: В Excel для Mac (версии до 2019 года) фильтр по цвету может работать некорректно с ячейками, закрашенными черезУсловное форматирование. Цвета, назначенные вручную (Заливка ячейки), отображаются в фильтре, а динамические — нет.
Метод 1: Фильтр по нескольким цветам через вспомогательный столбец
Самый надёжный способ обойти ограничение — создать вспомогательный столбец, который будет содержать коды цветов для каждой ячейки. Затем можно отфильтровать данные по этим кодам, указав несколько значений через Расширенный фильтр или Текстовый фильтр с условием "равно" или "содержит".
Алгоритм действий:
- Добавьте новый столбец рядом с таблицей (например,
Stolbec_X). - В первую ячейку столбца введите формулу:
=GET.CELL(38,!A1)где
!A1— адрес ячейки, цвет которой нужно определить (используется имя диапазона, см. шаг 3). - Присвойте имя диапазону: выделите ячейку
A1, перейдите вФормулы → Присвоить имяи введите, например,ColorCell. Замените в формуле!A1наColorCell. - Растяните формулу на весь столбец. Теперь каждая ячейка
Stolbec_Xбудет содержать числовой код цвета (например,5296274для красного). - Примените
Расширенный фильтр, указав в критериях нужные цветовые коды.
Чтобы узнать код цвета для конкретного оттенка, выделите закрашенную ячейку и запустите макрос:
Sub GetColorCode()
MsgBox Selection.Interior.Color
End Sub
Он покажет числовое значение, которое нужно вставить в критерии фильтра.
Создать новый столбец справа от таблицы|
Ввести формулу =GET.CELL(38,ColorCell) в первую ячейку|
Присвоить имя диапазону с анализируемыми ячейками|
Растянуть формулу на весь столбец|
Запустить макрос для определения кодов нужных цветов-->
⚠️ Внимание: ФормулаGET.CELLработает только в именованных диапазонах. Если пропустить шаг с присвоением имени, Excel вернёт ошибку#NAME?. Также этот метод не работает с цветами, назначенными черезУсловное форматирование— только с ручной заливкой.
Метод 2: Использование VBA для фильтрации по 2+ цветам
Если вам нужно регулярно фильтровать данные по нескольким цветам, стоит автоматизировать процесс с помощью VBA-макроса. Ниже приведён код, который фильтрует строки по двум заданным цветам (например, красному и зелёному) в указанном диапазоне:
Sub FilterByMultipleColors()
Dim ws As Worksheet
Dim rng As Range
Dim color1 As Long, color2 As Long
Dim cell As Range
Dim visibleRows As Long
' Настройки: укажите свой лист и диапазон
Set ws = ThisWorkbook.Sheets("Лист1")
Set rng = ws.Range("A1:D100") ' Диапазон с данными
color1 = RGB(255, 0, 0) ' Красный
color2 = RGB(0, 255, 0) ' Зелёный
' Снять все фильтры
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' Скрыть все строки
ws.Rows.Hidden = True
' Показать строки, где есть ячейки с color1 ИЛИ color2
For Each cell In rng
If cell.Interior.Color = color1 Or cell.Interior.Color = color2 Then
cell.EntireRow.Hidden = False
End If
Next cell
' Подсчёт видимых строк (опционально)
visibleRows = ws.Cells.Rows.Count - ws.Cells.SpecialCells(xlCellTypeVisible).Rows.Count
MsgBox "Показано строк: " & ws.Cells.SpecialCells(xlCellTypeVisible).Rows.Count
End Sub
Как адаптировать макрос под свои нужды:
- 🔹 Замените
"Лист1"на имя вашего листа. - 🔹 В
Set rngукажите ваш диапазон (например,"B2:F500"). - 🔹 Измените
color1иcolor2на нужные цвета, используяRGBили числовые коды (например,color1 = 5296274для красного). - 🔹 Чтобы фильтровать по трем цветам, добавьте условие:
Or cell.Interior.Color = color3.
Sub ShowRGB()
MsgBox "RGB: " & Selection.Interior.Color & vbCrLf & _
"Red: " & Selection.Interior.Color Mod 256 & vbCrLf & _
"Green: " & (Selection.Interior.Color \ 256) Mod 256 & vbCrLf & _
"Blue: " & (Selection.Interior.Color \ 65536) Mod 256
End Sub
Этот код покажет отдельные значения красного, зелёного и синего каналов.-->
⚠️ Внимание: Макрос скрывает все строки на листе, а затем показывает только те, что соответствуют критериям. Если у вас на листе есть другие данные вне фильтруемого диапазона, они тоже будут скрыты. Чтобы этого избежать, модифицируйте код, добавив проверку на границы диапазона.
Метод 3: Фильтрация через условное форматирование + текстовые метки
Если вы не хотите использовать VBA или вспомогательные столбцы, можно пойти на хитрость: назначить каждой цветовой группе текстовый тег, а затем фильтровать по этим тегам. Этот метод подходит для таблиц, где цвета назначаются вручную или через простые правила условного форматирования.
Пошаговая инструкция:
- Добавьте справа от таблицы вспомогательный столбец (например,
Теги). - Создайте правило
Условного форматированиядля каждого цвета:- 🔹 Для красных ячеек: правило
"Формула" =ИСТИНАс форматированиемЗаливка: красный+ в столбцеТегипропишите значение"Красный". - 🔹 Для зелёных: аналогично, но с зелёной заливкой и тегом
"Зелёный".
- 🔹 Для красных ячеек: правило
Текстовый фильтр к столбцу Теги, выбрав "равно Красный или равно Зелёный".Преимущество этого метода — визуальная наглядность: вы сразу видите, какие ячейки относятся к какой группе. Кроме того, его можно комбинировать с другими фильтрами (например, по датам или числовым значениям).
Если в вашей таблице уже есть цветовая маркировка, можно автоматически заполнить столбец Где Как автоматизировать назначение тегов?
Теги с помощью формулы массива:=ЕСЛИ(ИЛИ(GET.CELL(38,!A1)=5296274;GET.CELL(38,!A1)=5287936);"Красный/Зелёный";"")
5296274 и 5287936 — коды красного и зелёного цветов соответственно. Не забудьте присвоить имя диапазону !A1 (как в Методе 1).
| Метод | Плюсы | Минусы | Подходит для |
|---|---|---|---|
Вспомогательный столбец с GET.CELL |
Работает без макросов, точно определяет цвета | Не видит цвета из условного форматирования | Excel 2010+, защищённые файлы |
| VBA-макрос | Гибкость (можно фильтровать по 3+ цветам), быстрота | Требует навыков программирования, не работает в Excel Online | Регулярная работа с большими таблицами |
| Текстовые метки | Наглядность, совместимость с другими фильтрами | Требует предварительной настройки правил | Таблицы с ручной цветовой маркировкой |
Метод 4: Обходной путь для Excel Online и Mac
В веб-версии Excel Online и старых версиях для Mac фильтр по цвету либо отсутствует, либо работает с ошибками. В этом случае поможет комбинация сортировки и ручной фильтрации:
- Добавьте вспомогательный столбец с формулой, определяющей цвет (как в Методе 1).
- Отсортируйте данные по этому столбцу. Все ячейки одного цвета окажутся сгруппированы.
- Вручную скройте ненужные группы, оставив только те, что соответствуют нужным цветам.
Для Excel Online также можно использовать Power Query (доступен в версиях 2016+):
- Выделите таблицу и нажмите
Данные → Из таблицы/диапазона. - В редакторе Power Query добавьте пользовательский столбец с формулой:
= if [Column1] has Color.Red then "Red" else if [Column1] has Color.Green then "Green" else "Other"(замените
Column1на имя вашего столбца). - Отфильтруйте данные по новому столбцу и загрузите обратно в Excel.
Метод 5: Фильтр по цветам в сводных таблицах
Если ваша задача — анализ данных с цветовой маркировкой, рассмотрите возможность использования сводных таблиц. Хотя они не умеют фильтровать по цветам напрямую, можно пойти на хитрость:
- Создайте сводную таблицу на основе исходных данных.
- Добавьте в неё вспомогательный столбец с текстовыми метками цветов (как в Методе 3).
- Перетащите столбец с метками в область
ФильтрыилиСтроки. - Теперь вы можете фильтровать сводную таблицу по цветовым группам, как по обычным текстам.
- 🔹 Замените условное форматирование на ручную заливку (если цвета статичны).
- 🔹 Используйте
VBA, чтобы считывать цвета из условного форматирования:Function GetCFColor(cell As Range) As LongGetCFColor = cell.DisplayFormat.Interior.Color
End Function
Затем применяйте эту функцию во вспомогательном столбце.
- 🔹 Использовать
VBA-макросы (они требуют разблокировки листа). - 🔹 Добавлять вспомогательные столбцы с формулами (если защита запрещает изменение структуры).
Преимущество этого подхода — динамичность: при изменении исходных данных сводная таблица обновляется автоматически. Кроме того, вы можете добавлять другие критерии фильтрации (например, по датам или категориям).
⚠️ Внимание: В сводных таблицах Excel нельзя напрямую отобразить цвета ячеек — только их текстовые метки. Если ваша задача — сохранить визуальную маркировку, комбинируйте сводные таблицы с Условным форматированием, назначив цвета на основе значений в столбце с метками.
Частые ошибки и как их избежать
При фильтрации по нескольким цветам пользователи часто сталкиваются с типичными проблемами. Вот самые распространённые и способы их решения:
1. Фильтр не видит цвета из условного форматирования
Причина: Формула GET.CELL и макросы работают только с цветами, назначенными через Заливка ячейки (ручная раскраска). Цвета, назначенные через Условное форматирование, являются динамическими и не сохраняются как свойство ячейки.
Решение:
2. После фильтрации пропадают данные
Причина: Если вы используете макрос, который скрывает строки (как в Методе 2), но не сохраняете состояние фильтра, при следующем открытии файла все строки могут остаться скрытыми.
Решение: В конце макроса добавьте строку:
ws.AutoFilterMode = False
Или используйте Расширенный фильтр с копированием результатов на новый лист.
3. Цветовые коды не совпадают
Причина: Цвета в Excel могут выглядеть одинаково, но иметь разные коды (например, если они назначены через разные палитры или темы). Например, "красный" из стандартной палитры и "красный" из темы Office будут иметь разные RGB-значения.
Решение: Всегда проверяйте код цвета непосредственно из вашей таблицы с помощью макроса из Метода 2 (это единственный надёжный способ).
FAQ: Ответы на частые вопросы
Можно ли фильтровать по цветам в защищённом листе?
Да, но с ограничениями. Если лист защищён, вы не сможете:
Обходной путь: Снимите защиту, добавьте вспомогательный столбец с GET.CELL, затем снова защитите лист, разрешив изменение только в этом столбце.
Почему фильтр по цвету не работает с ячейками, закрашенными через "Условное форматирование"?
Цвета из Условного форматирования являются динамическими — они не сохраняются как свойство ячейки, а пересчитываются при каждом изменении данных. Стандартные функции Excel (включая GET.CELL) не видят эти цвета.
Решение: Используйте VBA-функцию DisplayFormat, как показано в разделе про ошибки, или замените условное форматирование на ручную заливку.
Как фильтровать по цветам в Google Таблицах?
В Google Sheets нет встроенного фильтра по цвету, но можно использовать скрипт:
- Откройте
Расширения → Apps Script. - Вставьте код:
function filterByColor() {var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
var values = range.getValues();
var colors = range.getBackgrounds();
var targetColors = ["#ff0000", "#00ff00"]; // Красный и зелёный
for (var i = 0; i < colors.length; i++) {
var hideRow = true;
for (var j = 0; j < colors[i].length; j++) {
if (targetColors.includes(colors[i][j])) {
hideRow = false;
break;
}
}
sheet.hideRows(i + 1, 1, hideRow);
}
}
- Запустите скрипт — он скрывает все строки, кроме тех, что содержат указанные цвета.
Можно ли сохранить фильтр по нескольким цветам для повторного использования?
Да, если вы используете VBA или Power Query:
- 🔹 Для
VBA: сохраните макрос вПерсональной книге макросов(Personal.xlsb), чтобы он был доступен во всех файлах. - 🔹 Для
Power Query: сохраните запрос — при следующем открытии файла достаточно обновить данные.
Стандартный фильтр по цвету сохраняется только до закрытия файла.
Как фильтровать по цветам шрифта, а не заливки?
Все методы, описанные в статье, работают и для цвета шрифта. Нужно лишь заменить:
- 🔹 В формуле
GET.CELL: используйтеGET.CELL(24, ...)вместоGET.CELL(38, ...)(24 — код для цвета шрифта). - 🔹 В
VBA: заменитеcell.Interior.Colorнаcell.Font.Color.