Вы когда-нибудь сталкивались с ситуацией, когда в таблице Excel часть данных выделена цветом, а вам нужно быстро отфильтровать только эти ячейки? Например, красные строки с просроченными задачами, зелёные с выполненными заказами или жёлтые с предупреждениями. Вручную просматривать сотни строк — неэффективно, но в Excel есть несколько способов автоматизировать эту задачу.
В этой статье мы разберём 5 рабочих методов выборки по цвету: от стандартного фильтра до продвинутых формул и VBA-скриптов. Вы узнаете, как фильтровать ячейки по цвету заливки или шрифта, копировать только цветные данные, а также обойти ограничения Excel при работе с цветовыми фильтрами. Все инструкции актуальны для Excel 2010–2023 и Office 365, включая веб-версию.
Особое внимание уделим скрытому багу Excel с цветовыми фильтрами в сводных таблицах — эта информация сэкономит вам часы debugging’а. А в конце статьи вас ждёт FAQ с ответами на самые частые вопросы по теме.
1. Стандартный фильтр по цвету: простой способ для начинающих
Самый быстрый метод — использовать встроенный фильтр Excel. Он работает с цветом заливки ячейки и цветом шрифта, но имеет ограничения (о них расскажем ниже).
Как применить:
- Выделите диапазон данных (включая заголовки столбцов).
- Перейдите на вкладку
Данные→Фильтр(или нажмитеCtrl+Shift+L). - Нажмите на стрелку фильтра в столбце, где нужно отфильтровать по цвету.
- В выпадающем меню выберите
Фильтр по цвету→Цвет заливкиилиЦвет текста. - Отметьте галочкой нужный цвет.
✅ Плюсы метода:
- 🔹 Не требует знания формул или VBA.
- 🔹 Работает во всех версиях Excel (начиная с 2007).
- 🔹 Сохраняет исходные данные (не удаляет строки).
❌ Минусы:
- 🔸 Нельзя фильтровать по нескольким цветам одновременно (только по одному).
- 🔸 Не работает в сводных таблицах (см. раздел 4).
- 🔸 Не копирует отфильтрованные данные автоматически.
2. Фильтрация по цвету с помощью функции ПРОСМОТРХ (XLOOKUP)
Когда стандартный фильтр не подходит (например, нужно скопировать цветные ячейки в другой лист), на помощь приходят формулы. Один из самых универсальных способов — комбинация функций ПРОСМОТРХ (или VLOOKUP в старых версиях) с ПОЛУЧИТЬ.ЯЧЕЙКУ.
Предположим, у вас есть таблица с данными в столбцах A:D, где ячейки в столбце B окрашены в разные цвета. Чтобы извлечь строки с зелёной заливкой:
=ПРОСМОТРХ(1;A2:A100/(ПОЛУЧИТЬ.ЯЧЕЙКУ(38;B2:B100)=3);A2:D100)
Расшифровка формулы:
- 📌
ПОЛУЧИТЬ.ЯЧЕЙКУ(38;B2:B100)— возвращает код цвета заливки для диапазонаB2:B100. - 📌
=3— код зелёного цвета в палитре Excel (уточните свой код черезПОЛУЧИТЬ.ЯЧЕЙКУдля образца). - 📌
ПРОСМОТРХизвлекает всю строку, если условие выполнено.
Как узнать код цвета ячейки?
Чтобы получить код цвета заливки, введите в любой ячейке формулу =ПОЛУЧИТЬ.ЯЧЕЙКУ(38;A1), где A1 — ячейка с нужным цветом. Для цвета шрифта используйте =ПОЛУЧИТЬ.ЯЧЕЙКУ(24;A1).
⚠️ Внимание: Формула вернёт ошибку #ДЕЛ/0!, если в диапазоне нет ячеек с указанным цветом. Чтобы избежать этого, оберните её в ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(ПРОСМОТРХ(...);"Нет данных")
3. Условное форматирование + фильтр: обходной путь для сложных случаев
Если цвета в вашей таблице назначены через условное форматирование (а не вручную), стандартный фильтр по цвету не сработает. В этом случае нужно сначала преобразовать условные цвета в статические, а затем применить фильтр.
Алгоритм действий:
- Выделите диапазон с условным форматированием.
- Нажмите
Ctrl+C, чтобы скопировать данные. - Щёлкните правой кнопкой по той же области и выберите
Специальная вставка→Значения и форматы чисел. - Теперь цвета стали статическими, и можно использовать фильтр из раздела 1.
🔹 Почему это работает: Условное форматирование — это динамическое правило, а фильтр по цвету ищет статические свойства ячеек. После специальной вставки цвета "закрепляются" за ячейками.
4. Фильтрация по цвету в сводных таблицах: обходим ограничения Excel
Сводные таблицы в Excel не поддерживают фильтрацию по цвету через стандартное меню. Однако есть два обходных пути:
Способ 1. Добавить столбец с кодом цвета
- Создайте вспомогательный столбец с формулой
=ПОЛУЧИТЬ.ЯЧЕЙКУ(38;B2)(гдеB2— ячейка с цветом). - Добавьте этот столбец в сводную таблицу как фильтр.
- Отфильтруйте по нужному коду цвета.
Способ 2. Использовать Power Query
Если у вас Excel 2016 или новее:
- Выделите исходные данные и нажмите
Данные→Из таблицы/диапазона. - В Power Query добавьте пользовательский столбец с формулой
=Excel.CurrentCell.Format.Fill.BackgroundColor. - Загрузите данные обратно в Excel и создайте сводную таблицу на их основе.
⚠️ Внимание: В сводных таблицах, созданных из внешних источников (SQL, веб), цветовая фильтрация может не работать даже с обходными путями. В этом случае используйте VBA (раздел 5).
5. VBA-скрипты для продвинутой выборки по цвету
Когда нужно автоматизировать выборку по цвету (например, копировать все красные строки в другой лист раз в час), на помощь приходит VBA. Ниже скрипт, который копирует строки с указанным цветом заливки:
Sub CopyColoredRows()
Dim wsSource As Worksheet, wsDest As Worksheet
Dim rng As Range, cell As Range
Dim colorToFind As Long
Dim lastRow As Long, i As Long
' Настройки (измените под свою задачу)
Set wsSource = ThisWorkbook.Sheets("Лист1") ' Источник
Set wsDest = ThisWorkbook.Sheets("Лист2") ' Куда копировать
colorToFind = RGB(255, 199, 206) ' Розовый цвет (измените на свой)
' Очищаем лист назначения
wsDest.Cells.Clear
' Находим последнюю строку с данными
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
' Копируем заголовки
wsSource.Rows(1).Copy wsDest.Rows(1)
' Проверяем каждую строку
For i = 2 To lastRow
If wsSource.Cells(i, 2).Interior.Color = colorToFind Then ' Столбец B
wsSource.Rows(i).Copy wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Offset(1)
End If
Next i
MsgBox "Готово! Скопировано " & wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Row - 1 & " строк.", vbInformation
End Sub
Как настроить скрипт:
- 🔧 Измените
colorToFindна нужный цвет (используйтеRGBили запишите макрос для определения кода). - 🔧 Укажите правильные имена листов (
Лист1,Лист2). - 🔧 В строке
wsSource.Cells(i, 2)число2— это столбецB. Измените его, если нужно проверять другой столбец.
🔹 Преимущества VBA:
- 🤖 Автоматизация (можно запускать по таймеру).
- 🤖 Работает с любыми цветами, включая градиенты.
- 🤖 Можно копировать данные в другие книги или на email.
Включить вкладку "Разработчик" (Файл → Параметры → Настройка ленты)|Сохранить файл как .xlsm (с поддержкой макросов)|Проверить, что цвета ячеек статические (не условное форматирование)|Создать резервную копию данных-->
6. Альтернативные инструменты: Power Query и Office Scripts
Если вам нужно регулярно фильтровать данные по цвету, стоит рассмотреть более современные инструменты:
| Инструмент | Поддержка цветовой фильтрации | Когда использовать |
|---|---|---|
| Power Query | Частично (только через пользовательские столбцы) | Для больших наборов данных (100К+ строк) |
| Office Scripts (Excel Online) | Да (через TypeScript) | Для облачных таблиц и автоматизации в браузере |
| Python + pandas | Да (библиотека openpyxl) |
Для интеграции с другими системами (базы данных, API) |
| Google Sheets | Да (функция GETCELLCOLOR в Apps Script) |
Если вы работаете в Google Таблицах |
🔹 Пример кода для Office Scripts (Excel Online):
function main(workbook: ExcelScript.Workbook) {
let sheet = workbook.getActiveWorksheet();
let range = sheet.getUsedRange();
let colorToFind = { red: 1, green: 0.78, blue: 0.81 }; // Розовый
// Создаём новый лист для результатов
let resultSheet = workbook.addWorksheet("Цветные строки");
let headers = range.getRow(0).getValues()[0];
resultSheet.getRange("A1").getResizedRange(0, headers.length - 1).setValues([headers]);
// Копируем строки с нужным цветом
let rowIndex = 1;
for (let i = 1; i < range.getRowCount(); i++) {
let cell = range.getCell(i, 1); // Столбец B (индекс 1)
let cellColor = cell.getFormat().getFill().getColor();
if (cellColor.red === colorToFind.red &&
cellColor.green === colorToFind.green &&
cellColor.blue === colorToFind.blue) {
let rowValues = range.getRow(i).getValues()[0];
resultSheet.getRange(`A${rowIndex + 1}`).getResizedRange(0, rowValues.length - 1).setValues([rowValues]);
rowIndex++;
}
}
}
Сравнение методов: какой выбрать?
Чтобы помочь вам определиться, мы собрали ключевые критерии выбора метода в одной таблице:
| Критерий | Стандартный фильтр | Формулы | VBA | Power Query |
|---|---|---|---|---|
| Сложность | ⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Работа с условным форматированием | ❌ Нет | ✅ Да (после преобразования) | ✅ Да | ✅ Да |
| Автоматизация | ❌ Нет | ❌ Нет | ✅ Да | ✅ Да |
| Работает в Excel Online | ✅ Да | ✅ Да | ❌ Нет | ✅ Да |
| Скорость (для 100К строк) | ⚠️ Медленно | ⚠️ Медленно | ✅ Быстро | ✅ Очень быстро |
🔹 Рекомендации:
- 📌 Для разовых задач — стандартный фильтр или формулы.
- 📌 Для регулярной обработки — VBA или Power Query.
- 📌 Для облачных таблиц — Office Scripts.
FAQ: Ответы на частые вопросы
Можно ли фильтровать по цвету в Google Таблицах?
В Google Таблицах нет встроенного фильтра по цвету, но можно использовать Apps Script. Вот пример кода:
function filterByColor() {
let sheet = SpreadsheetApp.getActiveSheet();
let range = sheet.getDataRange();
let colorToFind = "#ffc7ce"; // Розовый
let values = range.getValues();
let backgrounds = range.getBackgrounds();
let result = [values[0]]; // Заголовки
for (let i = 1; i < values.length; i++) {
if (backgrounds[i][1] === colorToFind) { // Столбец B (индекс 1)
result.push(values[i]);
}
}
sheet.getRange(1, 6, result.length, result[0].length).setValues(result); // Вывод с 6 столбца
}
🔹 Примечание: Цвета в Google Таблицах указываются в HEX-формате (например, #ff0000 для красного).
Почему фильтр по цвету не показывает некоторые цвета?
Это происходит по трём причинам:
- Цвета назначены через условное форматирование → используйте метод из раздела 3.
- Цвет применён к части ячейки (например, только к границе) → фильтр работает только с заливкой или текстом.
- Цвет добавлен через тему документа → Excel может не распознавать такие цвета как статические.
🔹 Решение: Скопируйте данные с параметром Значения и форматы чисел (см. раздел 3).
Как скопировать только цветные ячейки в другой файл?
Используйте этот VBA-скрипт:
Sub CopyColoredCellsToNewWorkbook()
Dim wbNew As Workbook
Dim wsSource As Worksheet, wsDest As Worksheet
Dim cell As Range, rng As Range
Dim colorToFind As Long
Dim lastRow As Long, i As Long
' Настройки
Set wsSource = ThisWorkbook.Sheets("Лист1")
colorToFind = RGB(255, 230, 153) ' Жёлтый
lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
' Создаём новую книгу
Set wbNew = Workbooks.Add
Set wsDest = wbNew.Sheets(1)
' Копируем заголовки
wsSource.Rows(1).Copy wsDest.Rows(1)
' Копируем цветные строки
For i = 2 To lastRow
If wsSource.Cells(i, 3).Interior.Color = colorToFind Then ' Столбец C
wsSource.Rows(i).Copy wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Offset(1)
End If
Next i
' Сохраняем новую книгу
wbNew.SaveAs Filename:="Цветные данные_" & Format(Now(), "yyyy-mm-dd")
wbNew.Close SaveChanges:=False
End Sub
⚠️ Внимание: Перед запуском сохраните исходный файл — скрипт создаст новую книгу и закроет её без сохранения изменений.
Можно ли фильтровать по цвету в защищённом листе?
Нет, если лист защищён, стандартный фильтр по цвету будет недоступен. Обходные пути:
- 🔓 Временно снять защиту (если у вас есть пароль).
- 🔓 Использовать VBA с разрешением на редактирование макросами:
Sub FilterInProtectedSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Защищённый лист")
' Временно снимаем защиту (если знаем пароль)
ws.Unprotect Password:="ваш_пароль"
' Применяем фильтр
ws.Range("A1:D100").AutoFilter Field:=2, Criteria1:=RGB(200, 230, 200), Operator:=xlFilterCellColor
' Возвращаем защиту
ws.Protect Password:="ваш_пароль", AllowFiltering:=True
End Sub
🔹 Важно: При защите листа разрешите фильтрацию (AllowFiltering:=True).
Как посчитать количество ячеек определённого цвета?
Используйте эту формулу массива (введите с Ctrl+Shift+Enter в старых версиях Excel):
=СУММ(--(ПОЛУЧИТЬ.ЯЧЕЙКУ(38;A2:A100)=3))
Где:
38— параметр для цвета заливки.3— код зелёного цвета (замените на свой).A2:A100— диапазон для подсчёта.
🔹 Для Excel 365 (динамические массивы):
=СЧЁТЕСЛИ(ПОЛУЧИТЬ.ЯЧЕЙКУ(38;A2:A100);3)