Работа с цветовыми метками в Microsoft Excel — это мощный инструмент визуального анализа данных, но когда требуется автоматизировать обработку таких ячеек, многие пользователи сталкиваются с трудностями. Дело в том, что стандартные функции фильтрации в Excel изначально не предназначены для работы с цветами заполнения. Однако существуют обходные пути — от встроенных инструментов до написания макросов на VBA.
В этой статье мы разберём 5 рабочих методов, как сделать выборку по цвету ячейки: от простейшего ручного фильтра до автоматизированных решений для больших массивов данных. Вы узнаете, какие ограничения есть у каждого способа, как обойти типичные ошибки (например, почему функция GET.CELL может не сработать в новых версиях Excel), и получите готовые шаблоны кода для повторного использования. Особое внимание уделим скрытому методу с использованием функции ПОЛУЧИТЬ.ЯЧЕЙКУ, который работает даже в Excel Online.
1. Ручной фильтр по цвету: быстрый способ для небольших таблиц
Самый простой метод — использовать встроенную функцию фильтрации по цвету. Он подходит для разовых задач, когда не требуется автоматизация. Вот как это работает:
- Выделите диапазон данных, включая заголовки столбцов.
- Перейдите на вкладку
Данные→Фильтр(или нажмитеCtrl+Shift+L). - Нажмите на стрелку фильтра в заголовке столбца, где нужно отфильтровать по цвету.
- В выпадающем меню выберите
Фильтр по цвету→Цвет заполненияи укажите нужный оттенок.
Этот метод имеет два ключевых ограничения:
- 🔴 Не работает с условным форматированием — фильтр видит только ручную заливку ячеек.
- 🔴 Не сохраняет результат — после снятия фильтра данные вернутся в исходное состояние.
Если вам нужно не просто отобразить, а скопировать или перенести отфильтрованные данные, используйте комбинацию Alt+; (выделение видимых ячеек) перед копированием. Это сэкономит время на ручном переносе.
2. Функция ПОЛУЧИТЬ.ЯЧЕЙКУ (GET.CELL): скрытый инструмент для формул
Малоизвестная функция ПОЛУЧИТЬ.ЯЧЕЙКУ (или GET.CELL в английской версии) позволяет извлекать информацию о формате ячейки, включая цвет заливки. Её особенность — она работает только в именованных формулах.
Алгоритм использования:
- Выделите ячейку, где будет результат (например,
A1). - Перейдите на вкладку
Формулы→Диспетчер имен→Создать. - В поле
ИмявведитеЦветЯчейки, в полеДиапазонукажите=ПОЛУЧИТЬ.ЯЧЕЙКУ(38;!A1)(где38— код цвета заливки). - Теперь в любой ячейке можно использовать формулу
=ЦветЯчейки, чтобы получить числовой код цвета.
| Код функции GET.CELL | Значение | Пример возвращаемого значения |
|---|---|---|
38 |
Цвет заливки ячейки | 16777215 (белый) |
24 |
Цвет шрифта | 0 (чёрный) |
63 |
Индекс цвета (для палитры Excel) | 5 (синий) |
⚠️ Внимание: В Excel 365 и онлайн-версии функция ПОЛУЧИТЬ.ЯЧЕЙКУ может возвращать #Н/Д для динамических массивов. В этом случае используйте альтернативный метод с VBA (см. раздел 4).
=ТЕКСТ(ЦветЯчейки;"[<10000000]00000000;[>=10000000]00000000").
Результат можно проверить на сайтах вроде color-hex.com-->
3. Условное форматирование + вспомогательный столбец
Если вам нужно не просто отфильтровать, а проанализировать данные по цвету (например, посчитать сумму по ячейкам определённого оттенка), создайте вспомогательный столбец с формулами. Этот метод работает даже с условным форматированием.
Пример для подсчёта ячеек красного цвета (RGB(255,0,0)):
- Добавьте новый столбец рядом с данными.
- В первой ячейке столбца введите:
=ЕСЛИ(И(ПОЛУЧИТЬ.ЯЧЕЙКУ(38;A1)=16711680);1;0)(где
16711680— код красного цвета). - Растяните формулу на весь диапазон.
- Используйте
СУММилиФИЛЬТРпо вспомогательному столбцу.
Для условного форматирования формула будет сложнее:
=ЕСЛИ(ИЛИ(НЕОШИБКА(ПОИСК("красный";ПОЛУЧИТЬ.ЯЧЕЙКУ(63;A1);1)));1;0)
Здесь мы проверяем название цвета в палитре Excel (индекс 63).
- 🟢 Плюсы: Работает с условным форматированием, не требует VBA.
- 🔴 Минусы: Нужно вручную указывать коды цветов для каждого оттенка.
4. Макрос VBA: автоматизация для больших данных
Для обработки тысяч строк с цветовым форматированием напишите простой макрос. Он скопирует данные из ячеек заданного цвета в новый лист или диапазон.
Пример кода для копирования строк с красными ячейками в столбце A:
Sub CopyByColor()
Dim wsSource As Worksheet, wsDest As Worksheet
Dim rng As Range, cell As Range, i As Long
Dim colorToFind As Long
' Укажите цвет (красный = RGB(255,0,0) = 16711680)
colorToFind = 16711680
Set wsSource = ActiveSheet
Set wsDest = Worksheets.Add
wsDest.Name = "Результаты по цвету"
' Заголовки столбцов
wsSource.Rows(1).Copy wsDest.Rows(1)
i = 2 ' Начинаем со второй строки
For Each cell In wsSource.Range("A2:A" & wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row)
If cell.Interior.Color = colorToFind Then
cell.EntireRow.Copy wsDest.Rows(i)
i = i + 1
End If
Next cell
MsgBox "Готово! Скопировано " & i - 2 & " строк.", vbInformation
End Sub
Как адаптировать код под свои нужды:
- 🔹 Измените
colorToFindна нужный цвет (узнать код можно черезПОЛУЧИТЬ.ЯЧЕЙКУ(38)). - 🔹 Замените
"A2:A"на свой диапазон (например,"B2:B"). - 🔹 Добавьте фильтрацию по нескольким цветам через
OR.
Как узнать код цвета ячейки без формул?
Откройте редактор VBA (Alt+F11), в окне Immediate (Ctrl+G) введите:
?ActiveCell.Interior.Color
Нажмите Enter — в ответ получите числовой код цвета активной ячейки.
⚠️ Внимание: Макросы не работают в Excel Online и мобильных версиях. Также они могут блокироваться настройками безопасности (проверьте Файл → Параметры → Центр управления безопасностью).
5. Power Query: выборка по цвету без VBA
Power Query (вкладка Данные → Получить данные) не умеет напрямую фильтровать по цвету, но можно обойти это ограничение через вспомогательный столбец:
- Добавьте столбец с формулой
=ПОЛУЧИТЬ.ЯЧЕЙКУ(38;A1)(как в разделе 2). - Загрузите данные в Power Query (
Данные → Из таблицы/диапазона). - Отфильтруйте новый столбец по коду цвета.
- Удалите вспомогательный столбец перед загрузкой результата обратно в Excel.
Преимущество этого метода — неразрушающая обработка: исходные данные остаются нетронутыми, а результат обновляется при изменении цветов.
Добавьте столбец с кодом цвета|Проверьте, что все ячейки имеют ручную заливку (не условное форматирование)|Загрузите данные в Power Query|Отфильтруйте по коду цвета|Удалите вспомогательный столбец перед выводом-->
Сравнение методов: какой выбрать?
| Метод | Работает с условным форматированием | Требует VBA | Сохраняет результат | Подходит для больших данных |
|---|---|---|---|---|
| Ручной фильтр | ❌ Нет | ❌ Нет | ❌ Нет | ❌ Нет |
| ПОЛУЧИТЬ.ЯЧЕЙКУ | ✅ Да | ❌ Нет | ✅ Да | ⚠️ Ограничено |
| VBA-макрос | ✅ Да | ✅ Да | ✅ Да | ✅ Да |
| Power Query | ✅ Да (с вспомогательным столбцом) | ❌ Нет | ✅ Да | ✅ Да |
Для разовых задач подойдёт ручной фильтр. Если нужно анализировать данные по цвету регулярно — используйте ПОЛУЧИТЬ.ЯЧЕЙКУ или Power Query. Для автоматизации обработки тысяч строк оптимален VBA.
FAQ: Частые вопросы по выборке по цвету
Можно ли отфильтровать ячейки по цвету шрифта, а не заливки?
Да, для этого в функции ПОЛУЧИТЬ.ЯЧЕЙКУ используйте код 24 вместо 38. Например:
=ПОЛУЧИТЬ.ЯЧЕЙКУ(24;A1)
вернёт код цвета шрифта. В VBA проверяйте свойство cell.Font.Color.
Почему фильтр по цвету не показывает ячейки с условным форматированием?
Стандартный фильтр Excel распознаёт только ручную заливку. Для условного форматирования используйте методы с ПОЛУЧИТЬ.ЯЧЕЙКУ или VBA (в макросе проверяйте cell.DisplayFormat.Interior.Color вместо cell.Interior.Color).
Как скопировать только видимые ячейки после фильтра по цвету?
После применения фильтра выделите диапазон и нажмите Alt+; (выделение видимых ячеек), затем Ctrl+C для копирования. Альтернативно используйте VBA:
Selection.SpecialCells(xlCellTypeVisible).Copy
Можно ли сделать выборку по цвету в Google Sheets?
В Google Таблицах нет прямого аналога ПОЛУЧИТЬ.ЯЧЕЙКУ, но можно использовать скрипты на Google Apps Script. Пример кода:
function getBackgroundColor() {
return SpreadsheetApp.getActiveSheet().getActiveCell().getBackground();
}
Результат вернёт цвет в формате #ffffff.
Как сохранить фильтр по цвету для повторного использования?
Создайте настраиваемый вид (Вид → Настраиваемые представления) после применения фильтра. Либо запишите макрос (Вид → Макросы → Записать макрос), который повторяет ваши действия.