Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства .Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра. Очистка фона ячейки.
Свойство .Interior.Color объекта Range
Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).
Заливка ячейки цветом в VBA Excel
Пример кода 1:
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) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:
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:
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:
Range(«A1»).Interior.Color = vbGreen |
Цветовая модель RGB
Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.
Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:
Палитра Excel
Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.
Пример кода 4:
Range(«A1»).Interior.Color = RGB(100, 150, 200) |
Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.
Очистка ячейки (диапазона) от заливки
Для очистки ячейки (диапазона) от заливки используется константа xlNone
:
Range(«A1»).Interior.Color = xlNone |
Свойство .Interior.ColorIndex объекта Range
До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:
Пример кода 5:
Range(«A1»).Interior.ColorIndex = 8 MsgBox Range(«A1»).Interior.ColorIndex |
Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Пример кода 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 цветов, а также о том, как добавить узор в ячейку.
У Вас лишняя буква r прицепилась
.Interior.Color = vbRed
.Interior.Color = RGB(255, 0, 0)
.Interior.Color = 255
Работа с объектами листа медленная. Если ячеек много и заливать нужно не целым диапазоном, можно обработать в памяти и залить ячейки одной командой.
Sub PaintCells()
Dim r1 As Range, r2 As Range
Dim c As Range
Set r1 = Range("A1:C10") ' диапазон в переменную
r1.Interior.Pattern = xlNone ' убираем заливку
' r1.Interior.ColorIndex = 0 ' или так
For Each c In r1 ' цикл по ячейкам диапазона
If c.Value = 25 Then ' если условие выполняется
If r2 Is Nothing Then ' диапазон еще пустой
Set r2 = c ' формируем диапазон
Else
Set r2 = Union(r2, c) ' пополняем диапазон
End If
End If
Next c
If Not r2 Is Nothing Then r2.Interior.Color = 255 ' заливаем
Set r1 = Nothing: Set r2 = Nothing ' освобождаем память
End Sub
Залить строки по условию в ячейке:
For i = 1 To r1.Rows.Count ' цикл по строкам диапазона
If r1(i, 1).Value = 25 Then ' если левая ячейка диапазона...
If r2 Is Nothing Then ' диапазон еще пустой
Set r2 = Range(Cells(i, 1), Cells(i, 3)) ' формируем диапазон
Else
Set r2 = Union(r2, Range(Cells(i, 1), Cells(i, 3))) ' пополняем диапазон
End If
End If
Next i
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub FindAndSelect() Dim Rng As Range Dim n With Worksheets("general_report") Set Rng = .Range("A2:G100") For Each n In Rng Select Case n Case "WAIT FOR RELEASE" n.Interior.Color = RGB(146, 208, 80) Case "UAT" n.Interior.Color = RGB(255, 255, 0) Case "In Progress" n.Interior.Color = RGB(255, 255, 0) Case "ANALYTICS" n.Interior.Color = RGB(255, 255, 0) Case "IN QUEUE" n.Interior.Color = RGB(255, 204, 255) Case "ESTIMATION" n.Interior.Color = RGB(155, 194, 230) Case "Closed" n.Interior.Color = RGB(242, 242, 242) End Select Next n End With lLastRow = Sheets("general_report").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To lLastRow If Cells(i, 6).Interior.Color = RGB(146, 208, 80) Then Range(Cells(i, 1), Cells(i, 7)).Interior.Color = RGB(146, 208, 80) If Cells(i, 6).Interior.Color = RGB(255, 255, 0) Then Range(Cells(i, 1), Cells(i, 7)).Interior.Color = RGB(255, 255, 0) If Cells(i, 6).Interior.Color = RGB(255, 204, 255) Then Range(Cells(i, 1), Cells(i, 7)).Interior.Color = RGB(255, 204, 255) If Cells(i, 6).Interior.Color = RGB(155, 194, 230) Then Range(Cells(i, 1), Cells(i, 7)).Interior.Color = RGB(155, 194, 230) If Cells(i, 6).Interior.Color = RGB(242, 242, 242) Then Range(Cells(i, 1), Cells(i, 7)).Interior.Color = RGB(242, 242, 242) Next i End Sub |
alcnwndrlnd Пользователь Сообщений: 44 |
#1 08.12.2015 10:03:45 Всем привет!
Уж больно здесь красиво, жди беды.. |
|
vdovin_sg Пользователь Сообщений: 58 |
А почему бы не воспользоваться условным форматированием? Можно выделить нужный столбец и задать в разделе условное форматирование нужные условия. Сколько необходимо! |
vdovin_sg, хотелось бы макросом как-то автоматизировать процесс, нажатием одной кнопки, так сказать, а условное форматирование каждый раз добавлять. Уж больно здесь красиво, жди беды.. |
|
vdovin_sg Пользователь Сообщений: 58 |
alcnwndrlnd, Ясно, в макросах я не силен, сам только учусь. |
vdovin_sg, вот и я тоже, пока что но все еще впереди Уж больно здесь красиво, жди беды.. |
|
vdovin_sg Пользователь Сообщений: 58 |
#6 08.12.2015 10:29:55 а если попробовать использовать цикл for a=1 to 500
|
||
vdovin_sg, идея хорошая, а что делать с проверкой нескольких значений? в разных else if — ах расписать только если Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
#8 08.12.2015 10:52:25
|
||
k61 Пользователь Сообщений: 2441 |
#9 08.12.2015 10:56:17
|
||
Kuzmich, k61, тааак, спасибо, сейчас поразбираюсь.. в принципе реально вставить вместо «1» и «2» текстовые значения? Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
|
alcnwndrlnd Пользователь Сообщений: 44 |
#12 08.12.2015 11:27:25 Kuzmich, в таком случае, подскажите, пожалуйста, синтаксис. Как-то надо сослаться на текстовое значение? Ох уж этот ВБА, с++ и то легче.. голова уже кругом
Изменено: alcnwndrlnd — 08.12.2015 11:27:44 Уж больно здесь красиво, жди беды.. |
||
Kuzmich Пользователь Сообщений: 7998 |
А что не получается. Строку с «раму» видимо надо посветить другим цветом (6 заменить) |
Kuzmich, да, проблема была именно в этом, макрос просто не выполнялся что ж, всем большое спасибо и огромный «+» в карму! vdovin_sg, k61, Kuzmich Уж больно здесь красиво, жди беды.. |
|
alcnwndrlnd Пользователь Сообщений: 44 |
#15 08.12.2015 11:47:50 Kuzmich, и, наверное, последний вопрос.. Возможно, глупый: как проверить несколько значений и раскрасить одним цветом:
Изменено: alcnwndrlnd — 08.12.2015 11:48:18 Уж больно здесь красиво, жди беды.. |
||
Kuzmich Пользователь Сообщений: 7998 |
#16 08.12.2015 11:51:05
|
||
Kuzmich, «а ларчик просто открывался» спасибо еще раз, огромное Уж больно здесь красиво, жди беды.. |
|
alcnwndrlnd Пользователь Сообщений: 44 |
#18 08.12.2015 12:08:28 Kuzmich, потревожу Вас еще раз. Не получается добавить просмотр следующего интересующего меня столбца, после прохождения первого
так? Уж больно здесь красиво, жди беды.. |
||
Михаил Лебедев Пользователь Сообщений: 2855 |
#19 08.12.2015 12:22:39 попробуйте так:
Изменено: Михаил Лебедев — 10.12.2015 11:57:00 Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||
Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
#21 08.12.2015 12:42:39
|
||
Kuzmich, пробовала, второй столбец не красит, но и ошибку не выдает Уж больно здесь красиво, жди беды.. |
|
Kuzmich Пользователь Сообщений: 7998 |
#23 08.12.2015 12:46:23
|
||
Файл выложите. И/или поменяйте строку в моем коде, как предложил «кузмич» (я в своем предыдущем — поменял) Изменено: Михаил Лебедев — 08.12.2015 13:04:02 Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
|
Kuzmich Пользователь Сообщений: 7998 |
#25 08.12.2015 13:04:42
Какой столбец? Когда подсвечивается вся строка. |
||
Kuzmich Пользователь Сообщений: 7998 |
Cells(i,2) — это будет второй столбец |
Михаил Лебедев Пользователь Сообщений: 2855 |
#27 08.12.2015 13:20:58
Изменено: Михаил Лебедев — 08.12.2015 13:21:20 Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
alcnwndrlnd и vdovin_sg, код следует оформлять тегом — ищите такую кнопку (см. скрин). |
alcnwndrlnd Пользователь Сообщений: 44 |
#29 08.12.2015 13:46:53
Да, по условию. Сейчас попробую с исправлениями Уж больно здесь красиво, жди беды.. |
||
alcnwndrlnd Пользователь Сообщений: 44 |
#30 08.12.2015 14:39:05 Михаил Лебедев, спасибо! Kuzmich, и снова, еще раз спасибо! во всем разобралась, все работает, как надо
Изменено: alcnwndrlnd — 08.12.2015 14:39:41 Уж больно здесь красиво, жди беды.. |
||
Закрашивание строки цветом исходя из активной ячейки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |