Почему стандартный фильтр не видит цвета — и что с этим делать
Вы когда-нибудь пытались отсортировать таблицу в Excel по цвету ячеек, но обнаруживали, что стандартный фильтр просто игнорирует ваши закрашенные данные? Это не баг программы — так работает логика автофильтра. По умолчанию Excel фильтрует только по значениям ячеек, тексту или числам, полностью игнорируя визуальное оформление. Но что делать, если вам критически важно выделить строки именно с красным и зелёным фоном одновременно — например, для анализа финансовых отчётов или контрольных листов?
Проблема усложняется, когда нужно отфильтровать данные сразу по двум цветам. Стандартный инструмент Фильтр по цвету ячейки в меню Данные → Фильтр позволяет выбрать только один цвет за раз. Попытка применить фильтр последовательно к двум цветам приведёт к тому, что вы увидите только строки с последним выбранным цветом — первый фильтр просто перезапишется. Решение есть, и их даже несколько: от скрытых возможностей условного форматирования до написания простого макроса на VBA.
В этой статье мы разберём 5 проверенных способов, как отфильтровать данные по двум цветам одновременно — без потери данных и с учётом особенностей разных версий Excel (от 2010 до 2026). Вы узнаете, какой метод самый быстрый, какой подходит для больших таблиц, и как автоматизировать процесс, если вам приходится делать это регулярно.
Метод 1: Фильтрация через условное форматирование + вспомогательный столбец
Этот способ не требует знания VBA и работает во всех версиях Excel, включая Office 365. Суть в том, чтобы создать вспомогательный столбец, который будет отмечать строки с нужными цветами, а затем фильтровать уже по нему. Вот пошаговая инструкция:
- Добавьте вспомогательный столбец справа от ваших данных (например, столбец
Z, если данные заканчиваются наY). - В первой ячейке вспомогательного столбца (например,
Z2) введите формулу:
Примечание: вместо=ЕСЛИ(ИЛИ(ЦВЕТЯЧЕЙКИ(A2)=44; ЦВЕТЯЧЕЙКИ(A2)=53); "Да"; "Нет")44и53подставьте индексы цветов из вашей таблицы (как их узнать — читайте ниже). - Растяните формулу на все строки таблицы.
- Примените стандартный фильтр к вспомогательному столбцу, выбрав значение
"Да".
Но как узнать числовые индексы цветов? Для этого:
- Выделите ячейку с нужным цветом.
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - В окне
Immediate(нажмитеCtrl + G, если его не видно) введите:? ActiveCell.Interior.ColorIndex - Нажмите
Enter— в ответ вы получите числовой индекс цвета (например,3для красного,4для зелёного в стандартной палитре).
Добавлен вспомогательный столбец справа от данных
Узнаны ColorIndex нужных цветов (через VBA)
Введена формула ЦВЕТЯЧЕЙКИ с условием ИЛИ
Формула растянута на все строки таблицы
Применён фильтр по значению "Да"-->
Плюсы метода:
- 🔹 Работает во всех версиях Excel, включая Excel Online.
- 🔹 Не требует знания программирования.
- 🔹 Можно фильтровать по любому количеству цветов, добавляя их в формулу через
ИЛИ.
Минусы:
- 🔸 Требует добавления вспомогательного столбца (может быть неудобно для больших таблиц).
- 🔸 Нужно вручную узнавать
ColorIndexдля каждого цвета.
⚠️ Внимание: Если вы используете тему документа или нестандартные цвета (не из стандартной палитры Excel), функцияColorIndexможет возвращать некорректные значения. В этом случае используйтеColorвместоColorIndex(но тогда индексы будут в формате RGB, например,255для красного).
Метод 2: Использование функции ПОЛУЧИТЬ.ЯЧЕЙКУ (для опытных пользователей)
Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (или GET.CELL в английской версии) — это скрытый инструмент Excel, который позволяет получать детальную информацию о ячейке, включая её цвет. Однако она работает только в именованных формулах и требует особой настройки.
Вот как ею воспользоваться:
- Выделите любую ячейку и нажмите
Ctrl + F3, чтобы открыть Диспетчер имён. - Создайте новое имя (например,
GetColor) и в полеДиапазонвведите:=ПОЛУЧИТЬ.ЯЧЕЙКУ(38;!A1)где
38— это код для получения цвета фона ячейки. - Теперь во вспомогательном столбце можно использовать формулу:
=ЕСЛИ(ИЛИ(GetColor=65535; GetColor=65280); "Да"; "Нет")где
65535и65280— цвета в формате RGB (жёлтый и зелёный соответственно).
Этот метод более гибкий, чем ColorIndex, так как работает с любыми цветами, включая пользовательские. Однако он сложнее в настройке и требует понимания, как работают именованные диапазоны.
| Цвет | ColorIndex | RGB-код (для GET.CELL) |
|---|---|---|
| Красный | 3 | 255 |
| Зелёный | 4 | 65280 |
| Синий | 5 | 16711680 |
| Жёлтый | 6 | 65535 |
| Белый | 2 | 16777215 |
Метод 3: Фильтрация через Power Query (для Excel 2016 и новее)
Если вы работаете в Excel 2016 или новее (включая Office 365), у вас есть мощный инструмент — Power Query. Он позволяет импортировать данные, преобразовывать их и фильтровать по любым критериям, включая цвета. Вот как это сделать:
- Выделите вашу таблицу и перейдите на вкладку
Данные→Из таблицы/диапазона(илиGet Data → From Table/Rangeв английской версии). - В открывшемся редакторе Power Query добавьте пользовательский столбец:
- Нажмите
Добавить столбец → Пользовательский столбец. - Введите название столбца (например,
ColorFilter). - В поле формулы введите:
Примечание: Здесь требуется знание M-языка (языка Power Query). Для цветов проще использовать условную логику на основе значений.= if [YourColumnName] = "Ваше значение" and Table.AddColumn(#"Previous Step", "BackgroundColor", each if [YourColumnName] = "Ваше значение" then "Red" else "Green")
- Нажмите
Закрыть и загрузить, чтобы вернуть данные в Excel.К сожалению, Power Query не может напрямую считывать цвет ячейки — для этого потребуется обходной путь через VBA или вспомогательные столбцы. Однако если цвета назначаются по определённым правилам (например, красный — для отрицательных значений, зелёный — для положительных), вы можете воспроизвести эту логику в Power Query и фильтровать уже по ней.
⚠️ Внимание: При импорте данных через Power Query цвета ячеек не сохраняются. Если вам критически важно сохранить визуальное оформление, используйте другие методы из этой статьи.
Метод 4: Автоматизация через VBA (самый мощный способ)
Если вы готовы немного погрузиться в программирование, VBA позволит фильтровать данные по двум цветам одной кнопкой. Этот метод идеален для больших таблиц и регулярных задач.
Вот готовый макрос, который фильтрует строки по двум заданным цветам:
Sub FilterByTwoColors()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim color1 As Long, color2 As Long
Dim lastRow As Long
' Укажите здесь ваши цвета (в формате RGB)
color1 = RGB(255, 0, 0) ' Красный
color2 = RGB(0, 255, 0) ' Зелёный
' Укажите лист и диапазон (например, "A2:Z1000")
Set ws = ThisWorkbook.Sheets("Лист1") ' Измените на имя вашего листа
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set rng = ws.Range("A2:Z" & lastRow)
' Сначала показываем все строки
ws.Rows.Hidden = False
' Прячем строки, которые не соответствуют цветам
For Each cell In rng.Columns(1).Cells ' Проверяем только первый столбец (можно изменить)
If cell.Interior.Color <> color1 And cell.Interior.Color <> color2 Then
cell.EntireRow.Hidden = True
End If
Next cell
End Sub
Как использовать этот макрос:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код выше в новый модуль (
Insert → Module). - Измените параметры:
color1иcolor2— на нужные цвета (используйтеRGBилиColorIndex).Лист1— на имя вашего листа.A2:Z1000— на ваш диапазон данных.
Alt + F8.Преимущества VBA:
- 🔹 Мгновенная фильтрация даже для таблиц с 100 000+ строк.
- 🔹 Можно сохранить макрос и использовать его повторно.
- 🔹 Гибкость: можно фильтровать по цветам шрифта, заливки или даже градиента.
Недостатки:
- 🔸 Требует базовых знаний VBA (или готовности скопировать код).
- 🔸 Макросы могут быть отключены в вашей организации по политике безопасности.
Как узнать RGB-код цвета ячейки?
1. Выделите ячейку с нужным цветом.
2. Нажмите Alt + F11, затем Ctrl + G, чтобы открыть окно Immediate.
3. Введите команду:
? ActiveCell.Interior.Color
4. Нажмите Enter — вы получите число в формате RGB (например, 255 для красного).
5. Используйте это число в макросе вместо RGB(255, 0, 0).
Метод 5: Использование Office Scripts (для Excel Online)
Если вы работаете в Excel Online, у вас нет доступа к VBA, но зато есть Office Scripts — новый инструмент автоматизации на основе TypeScript. С его помощью тоже можно фильтровать данные по цветам, хотя это и потребует немного больше усилий.
Вот пример скрипта для фильтрации по двум цветам:
function main(workbook: ExcelScript.Workbook) {
// Укажите имя листа
let sheet = workbook.getActiveWorksheet();
// Укажите диапазон (например, "A2:Z1000")
let range = sheet.getRange("A2:Z1000");
// Укажите цвета в формате HTML (например, "#FF0000" для красного)
let color1 = "#FF0000"; // Красный
let color2 = "#00FF00"; // Зелёный
// Получаем все строки
let rows = range.getRows();
for (let i = rows.length - 1; i >= 0; i--) {
let cell = rows[i].getCell(0); // Проверяем первую ячейку в строке
let cellColor = cell.getFormat().getFill().getColor();
// Если цвет не совпадает ни с одним из нужных — скрываем строку
if (cellColor !== color1 && cellColor !== color2) {
sheet.getRow(i + range.getRowIndex()).setHidden(true);
}
}
}
Как использовать:
- Откройте вашу таблицу в Excel Online.
- Перейдите на вкладку
Автоматизация→Новый скрипт. - Вставьте код выше и измените параметры (
имя листа,диапазон,цвета). - Сохраните скрипт и запустите его.
Office Scripts — это будущее автоматизации в Excel Online, но на данный момент (2026 год) у этого инструмента есть ограничения:
- 🔸 Работает только в браузере (не в десктопной версии Excel).
- 🔸 Требует знания основ TypeScript для модификации скриптов.
- 🔸 Невозможно записать макрос — нужно писать код вручную.
Сравнение методов: какой выбрать?
Выбор метода зависит от ваших задач, версии Excel и уровня подготовки. В таблице ниже — сравнение всех способов:
| Метод | Сложность | Работает в Excel Online | Скорость | Подходит для больших таблиц | Требует вспомогательных столбцов |
|---|---|---|---|---|---|
| Условное форматирование + фильтр | Низкая | Да | Средняя | Нет | Да |
| Функция ПОЛУЧИТЬ.ЯЧЕЙКУ | Средняя | Нет | Средняя | Да | Да |
| Power Query | Высокая | Да | Высокая | Да | Нет |
| VBA | Средняя | Нет | Очень высокая | Да | Нет |
| Office Scripts | Высокая | Да | Высокая | Да | Нет |
Рекомендации по выбору:
- 🔹 Если вам нужно однократное решение и вы не хотите возиться с кодом — используйте условное форматирование + вспомогательный столбец.
- 🔹 Если вы работаете с большими данными и готовы написать макрос — VBA будет самым быстрым и надёжным вариантом.
- 🔹 Если вы в Excel Online — ваш единственный вариант (помимо ручной фильтрации) — Office Scripts.
- 🔹 Если цвета назначаются по логическим правилам (например, красный для отрицательных чисел) — Power Query поможет автоматизировать процесс.
Частые ошибки и как их избежать
Даже опытные пользователи Excel иногда сталкиваются с проблемами при фильтрации по цветам. Вот самые распространённые ошибки и способы их решения:
1. Фильтр не находит цвета, хотя они есть в таблице
Причина: Вы используете ColorIndex, но цвета в вашей таблице — пользовательские (не из стандартной палитры). Решение: используйте RGB вместо ColorIndex или узнайте точный код цвета через VBA (как описано выше).
2. После фильтрации пропадают данные
Причина: Вы применили фильтр не к всей таблице, а только к части столбцов. Решение: всегда проверяйте, что фильтр охватывает все столбцы с данными, включая заголовки.
3. Макрос не работает в другой книге
Причина: В коде жёстко прописано имя листа (например, "Лист1"), а в новой книге лист называется иначе. Решение: используйте ActiveSheet вместо жёсткого имени или добавьте проверку:
On Error Resume Next
Set ws = ThisWorkbook.Sheets("Лист1")
If ws Is Nothing Then Set ws = ThisWorkbook.Sheets(1)
On Error GoTo 0
4. Цвета в Power Query не сохраняются
Причина: Power Query не поддерживает форматирование ячеек. Решение: если цвета назначаются по правилам (например, условное форматирование), воспроизведите эти правила в Power Query через Добавление столбца → Пользовательский столбец.
5. Фильтр работает медленно на больших таблицах
Причина: Формулы во вспомогательном столбце пересчитываются для каждой ячейки. Решение: используйте VBA или Power Query — они работают значительно быстрее на больших объёмах данных.
⚠️ Внимание: Если вы используете условное форматирование для назначения цветов, помните, что оно динамическое. Это значит, что если условие изменится (например, значение в ячейке станет другим), цвет автоматически обновится — и ваша фильтрация может стать неактуальной. В таких случаях лучше зафиксировать цвета вручную (Формат ячеек → Заливка).
FAQ: Ответы на частые вопросы
Можно ли отфильтровать данные по цвету шрифта, а не заливки?
Да, все методы из этой статьи работают и для цвета шрифта. В макросах VBA вместо cell.Interior.Color используйте cell.Font.Color. Для функции ПОЛУЧИТЬ.ЯЧЕЙКУ вместо кода 38 (цвет заливки) используйте 24 (цвет шрифта).
Почему после фильтрации некоторые строки пропадают, хотя их цвет подходит?
Скорее всего, вы фильтруете только по одному столбцу, а в других столбцах той же строки есть ячейки с другими цветами. Решение: проверяйте цвет в первом столбце (как в примере с VBA) или добавьте условие для проверки всех ячеек в строке:
For Each cell In rng.Rows(i).Cells
If cell.Interior.Color = color1 Or cell.Interior.Color = color2 Then
' Показываем строку, если хотя бы одна ячейка подходит
rowVisible = True
Exit For
End If
Next cell
Как отфильтровать по двум цветам в Google Sheets?
В Google Sheets нет встроенной функции для фильтрации по цветам, но можно использовать Google Apps Script (аналог VBA). Вот пример кода:
function filterByColors() {
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getDataRange();
const color1 = "#ff0000"; // Красный
const color2 = "#00ff00"; // Зелёный
range.getValues().forEach((row, index) => {
const rowRange = sheet.getRange(index + 1, 1, 1, row.length);
const rowColors = rowRange.getBackgrounds()[0];
if (!rowColors.some(color => color === color1 || color === color2)) {
sheet.hideRows(index + 1);
}
});
}
Чтобы использовать этот скрипт:
- Откройте Google Sheets →
Расширения → Apps Script. - Вставьте код и сохраните.
- Запустите функцию
filterByColors.
Можно ли сохранить фильтр по цветам, чтобы не настраивать его каждый раз?
Да, есть несколько способов:
- 🔹 В VBA: сохраните макрос в персональной книге макросов (
Personal.xlsb), и он будет доступен во всех файлах. - 🔹 Во вспомогательном столбце: оставьте формулу на листе и просто применяйте фильтр по значению
"Да"при необходимости. - 🔹 В Power Query: сохраните запрос и обновляйте его по мере изменения данных.
Почему в моём Excel нет функции ЦВЕТЯЧЕЙКИ?
Функции ЦВЕТЯЧЕЙКИ (или GET.CELL) нет в стандартном списке функций Excel. Она работает только через именованные диапазоны, как описано в Методе 2. Если вы пытаетесь ввести её напрямую в ячейку, Excel выдаст ошибку #ИМЯ?.