Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства .Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра. Очистка фона ячейки.
Свойство .Interior.Color объекта Range
Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).
Заливка ячейки цветом в VBA Excel
Пример кода 1:
|
1 2 3 4 5 6 |
Sub ColorTest1() Range("A1").Interior.Color = 31569 Range("A4:D8").Interior.Color = 4569325 Range("C12:D17").Cells(4).Interior.Color = 568569 Cells(3, 6).Interior.Color = 12659 End Sub |
Поместите пример кода в свой программный модуль и нажмите кнопку на панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть внутри выполняемой программы. На активном листе Excel ячейки и диапазон, выбранные в коде, окрасятся в соответствующие цвета.
Есть один интересный нюанс: если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:
|
1 2 3 4 5 |
Sub ColorTest11() Cells(1, 1).Interior.Color = -12207890 Cells(2, 1).Interior.Color = 16777215 + (-12207890) Cells(3, 1).Interior.Color = 4569325 End Sub |
Проверено в Excel 2016.
Вывод сообщений о числовых значениях цветов
Числовые значения цветов запомнить невозможно, поэтому часто возникает вопрос о том, как узнать числовое значение фона ячейки. Следующий код VBA Excel выводит сообщения о числовых значениях присвоенных ранее цветов.
Пример кода 2:
|
1 2 3 4 5 6 |
Sub ColorTest2() MsgBox Range("A1").Interior.Color MsgBox Range("A4:D8").Interior.Color MsgBox Range("C12:D17").Cells(4).Interior.Color MsgBox Cells(3, 6).Interior.Color End Sub |
Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.
Использование предопределенных констант
В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:
| Предопределенная константа | Наименование цвета |
|---|---|
| vbBlack | Черный |
| vbBlue | Голубой |
| vbCyan | Бирюзовый |
| vbGreen | Зеленый |
| vbMagenta | Пурпурный |
| vbRed | Красный |
| vbWhite | Белый |
| vbYellow | Желтый |
| xlNone | Нет заливки |
Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:
Пример кода 3:
|
1 |
Range("A1").Interior.Color = vbGreen |
Цветовая модель RGB
Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.
Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:

Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.
Пример кода 4:
|
1 |
Range("A1").Interior.Color = RGB(100, 150, 200) |
Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.
Очистка ячейки (диапазона) от заливки
Для очистки ячейки (диапазона) от заливки используется константа xlNone:
|
1 |
Range("A1").Interior.Color = xlNone |
Свойство .Interior.ColorIndex объекта Range
До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:
Пример кода 5:
|
1 2 |
Range("A1").Interior.ColorIndex = 8 MsgBox Range("A1").Interior.ColorIndex |
Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Пример кода 6:
|
1 2 3 4 5 6 |
Sub ColorIndex() Dim i As Byte For i = 1 To 56 Cells(i, 1).Interior.ColorIndex = i Next End Sub |
Номера строк активного листа от 1 до 56 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.
Подробнее о стандартной палитре Excel смотрите в статье: Стандартная палитра из 56 цветов, а также о том, как добавить узор в ячейку.
Здравствуйте! Как определить составляющие цвета: Красный, Зеленый, Синий у закрашенной ячейки?
Здравствуйте, Михаил!
Ответ в статье VBA Excel. Конвертация цвета из Long в RGB.
Возможно ли с помощью функции (без обращения к разделу «Условное форматирование») интерактивно менять цвет заливки в ячейке? Пример: у меня в ячейке записано 100, и цвет заливки жёлтый. Я изменяю значение ячейки на 120, и цвет заливки меняется на красный. Повторю: через условное форматирование я это могу описать, но тогда придётся назначать правила каждой ячейке таблицы, где это необходимо. А можно ли это сделать в виде функции, чтобы потом применить подобное к диапазону ячеек разом?
Михаил, вам не нужно назначать правила каждой ячейке, назначьте сразу всей таблице:
Также вы можете выбрать для назначения правила не всю таблицу сразу, а в виде нескольких нужных диапазонов. Они будут записаны в одну строку через точку с запятой (;).
Здравствуйте! а как вывести на экран название цвета листа, а не его индекс?
Здравствуйте, Ольга!
Вы можете использовать конструкцию с оператором Select Case, чтобы по значению ColorIndex выводить название цвета. Соответствие названий цветов числовым индексам вы можете взять из статьи Стандартная палитра из 56 цветов.
Обсуждение закрыто.