Как в Excel сделать выборку по цвету ячейки: все способы с примерами

Вы когда-нибудь сталкивались с ситуацией, когда в таблице Excel часть данных выделена цветом, а вам нужно быстро отфильтровать только эти ячейки? Например, красные строки с просроченными задачами, зелёные с выполненными заказами или жёлтые с предупреждениями. Вручную просматривать сотни строк — неэффективно, но в Excel есть несколько способов автоматизировать эту задачу.

В этой статье мы разберём 5 рабочих методов выборки по цвету: от стандартного фильтра до продвинутых формул и VBA-скриптов. Вы узнаете, как фильтровать ячейки по цвету заливки или шрифта, копировать только цветные данные, а также обойти ограничения Excel при работе с цветовыми фильтрами. Все инструкции актуальны для Excel 2010–2023 и Office 365, включая веб-версию.

Особое внимание уделим скрытому багу Excel с цветовыми фильтрами в сводных таблицах — эта информация сэкономит вам часы debugging’а. А в конце статьи вас ждёт FAQ с ответами на самые частые вопросы по теме.

1. Стандартный фильтр по цвету: простой способ для начинающих

Самый быстрый метод — использовать встроенный фильтр Excel. Он работает с цветом заливки ячейки и цветом шрифта, но имеет ограничения (о них расскажем ниже).

Как применить:

  1. Выделите диапазон данных (включая заголовки столбцов).
  2. Перейдите на вкладку ДанныеФильтр (или нажмите Ctrl+Shift+L).
  3. Нажмите на стрелку фильтра в столбце, где нужно отфильтровать по цвету.
  4. В выпадающем меню выберите Фильтр по цветуЦвет заливки или Цвет текста.
  5. Отметьте галочкой нужный цвет.

Плюсы метода:

  • 🔹 Не требует знания формул или 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. Условное форматирование + фильтр: обходной путь для сложных случаев

Если цвета в вашей таблице назначены через условное форматирование (а не вручную), стандартный фильтр по цвету не сработает. В этом случае нужно сначала преобразовать условные цвета в статические, а затем применить фильтр.

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

  1. Выделите диапазон с условным форматированием.
  2. Нажмите Ctrl+C, чтобы скопировать данные.
  3. Щёлкните правой кнопкой по той же области и выберите Специальная вставкаЗначения и форматы чисел.
  4. Теперь цвета стали статическими, и можно использовать фильтр из раздела 1.

🔹 Почему это работает: Условное форматирование — это динамическое правило, а фильтр по цвету ищет статические свойства ячеек. После специальной вставки цвета "закрепляются" за ячейками.

📊 Какой метод выборки по цвету вы используете чаще?
Стандартный фильтр
Формулы (ПРОСМОТРХ, ФИЛЬТР)
Условное форматирование + фильтр
VBA-скрипты
Не пользовался раньше

4. Фильтрация по цвету в сводных таблицах: обходим ограничения Excel

Сводные таблицы в Excel не поддерживают фильтрацию по цвету через стандартное меню. Однако есть два обходных пути:

Способ 1. Добавить столбец с кодом цвета

  1. Создайте вспомогательный столбец с формулой =ПОЛУЧИТЬ.ЯЧЕЙКУ(38;B2) (где B2 — ячейка с цветом).
  2. Добавьте этот столбец в сводную таблицу как фильтр.
  3. Отфильтруйте по нужному коду цвета.

Способ 2. Использовать Power Query

Если у вас Excel 2016 или новее:

  1. Выделите исходные данные и нажмите ДанныеИз таблицы/диапазона.
  2. В Power Query добавьте пользовательский столбец с формулой =Excel.CurrentCell.Format.Fill.BackgroundColor.
  3. Загрузите данные обратно в 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 для красного).

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

Это происходит по трём причинам:

  1. Цвета назначены через условное форматирование → используйте метод из раздела 3.
  2. Цвет применён к части ячейки (например, только к границе) → фильтр работает только с заливкой или текстом.
  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)