Заливка ячейки цветом в 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 цветов, а также о том, как добавить узор в ячейку.
Здравствуйте, помогите пожалуйста. Нужен макрос, который в большой таблице будет проходиться по каждой строке и если в ней нет залитой ячейки (без учёта условного форматирования) |
|
buchlotnik Пользователь Сообщений: 3863 Excel 365 Бета-канал |
#2 17.07.2019 09:05:52
Соблюдение правил форума не освобождает от модераторского произвола |
||
Прошу прощения, мне необходимо чтобы строки в которых нет цвета скрывались. Я убрал Not , но работает неккоректно |
|
buchlotnik Пользователь Сообщений: 3863 Excel 365 Бета-канал |
#4 17.07.2019 09:34:18
в чём проявляется некорректность? вы же все ячейки листа проверяете — зачем? опишите задачу конкретнее Соблюдение правил форума не освобождает от модераторского произвола |
||
Вот конкретная задача, начиная с 3й строки и до конца, проверять целиком строку на наличие в ней ячеек залитых цветом, если таковых не имеется (если в строке нет залитых цветом ячеек) то скрывать эту строку(или лучше вообще удалять строки в которых нет ячеек залитых цветом). Изменено: Dbogik — 17.07.2019 09:39:33 |
|
Александр Моторин Пользователь Сообщений: 958 |
#6 17.07.2019 09:40:32 попробуй сравнивать не цвет, а индекс. Нет заливки это не белый цвет
Изменено: Александр Моторин — 17.07.2019 09:40:59 |
||
vikttur Пользователь Сообщений: 47199 |
#7 17.07.2019 09:46:49 В названии темы
В сообщении:
В названии
В сообщении:
Вы уж определитесь… |
||||||||
Dbogik Гость |
#8 17.07.2019 09:50:20
Вы же сами видите что в дальнейшем пишу про то чтобы скрыть строки без цвета. Дважды уже написал это. Скрыть и еще раз скрыть если нет залитых ячеек в строке, если так более понятно будет |
||
vikttur Пользователь Сообщений: 47199 |
У меня нет времени перечитывать все сообщения во всех темах. Есть замечание. есть реакция. |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 17.07.2019 10:00:21 Думаю, такой код будет более быстрым:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Боже мне просто необходима помощь в том чтобы из 2000 строк остались только те строки, в которых хотя бы одна ячейка залита цветом. |
|
Прекрасно, работает на ура, спасибо большое, на сколько будет сложно сделать, чтоб была возможность выбрать файлы (или папку в которой они лежат, например файлы 1,2,3), и происходило формирование одного файла, в котором остануться только строки с цветом из файлов 1+2+3 |
|
vikttur Пользователь Сообщений: 47199 |
#13 17.07.2019 10:12:10
А мне необходимо, чтобы в темах был порядок. Ознакомьтесь с правилами форума и на будущее: если есть замечание, прошу без особых препирательств и рассуждений устранять их. |
||
Makroshka 0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
||||||||
1 |
||||||||
Поиск ячеек без заливки03.10.2016, 11:39. Показов 9607. Ответов 10 Метки нет (Все метки)
В одном документе были выделенны дублирующиеся значения этим кодом
Следующим кодом мне необходимо найти ячейки без заливки и скопировать из строки данные в другой документ, но высвечивает постоянно ошибку If Cell.Interior.ColorIndex = 0 Then. Что я делаю неправильно?
0 |
Michael99 190 / 59 / 20 Регистрация: 16.07.2013 Сообщений: 234 |
||||
03.10.2016, 12:16 |
2 |
|||
что это за ячейка без адреса? в фор иче было бы понятно, но в таком цикле нет
0 |
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
03.10.2016, 12:35 [ТС] |
3 |
А как правильно отобразить ячейку без заливки? Interior.Color=0 тоже пробывала и все также выдает ошибку
0 |
Заблокирован |
||||
03.10.2016, 12:37 |
4 |
|||
?
0 |
Michael99 190 / 59 / 20 Регистрация: 16.07.2013 Сообщений: 234 |
||||
03.10.2016, 12:41 |
5 |
|||
1 |
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
03.10.2016, 12:46 [ТС] |
6 |
Код теперь ошибки не выдает, но нужной цели не достигает. Мне кажется это из-за того, что если окрашивание дублирующих значений идет через условное форматирование, то окрашивание идет как-то по другому. Добавлено через 3 минуты
0 |
190 / 59 / 20 Регистрация: 16.07.2013 Сообщений: 234 |
|
03.10.2016, 12:54 |
7 |
Лучше файл пришлите, гадать дольше получится
0 |
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
03.10.2016, 13:04 [ТС] |
8 |
Копирование из файла «Пример03_10_16» в «123»
0 |
Michael99 190 / 59 / 20 Регистрация: 16.07.2013 Сообщений: 234 |
||||
03.10.2016, 13:30 |
10 |
|||
0 |
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
03.10.2016, 13:34 [ТС] |
11 |
Спасибо Michael99, заработало
0 |
As part of a VBA program, I have to set the background colors of certain cells to green, yellow or red, based on their values (basically a health monitor where green is okay, yellow is borderline and red is dangerous).
I know how to set the values of those cells, but how do I set the background color.
asked Dec 13, 2008 at 11:39
paxdiablopaxdiablo
844k233 gold badges1565 silver badges1937 bronze badges
You can use either:
ActiveCell.Interior.ColorIndex = 28
or
ActiveCell.Interior.Color = RGB(255,0,0)
answered Dec 13, 2008 at 11:43
Vinko Vrsalovic♦Vinko Vrsalovic
328k53 gold badges332 silver badges370 bronze badges
2
This is a perfect example of where you should use the macro recorder. Turn on the recorder and set the color of the cells through the UI. Stop the recorder and review the macro. It will generate a bunch of extraneous code, but it will also show you syntax that works for what you are trying to accomplish. Strip out what you don’t need and modify (if you need to) what’s left.
answered Apr 18, 2012 at 2:34
Jon CrowellJon Crowell
21.5k14 gold badges88 silver badges110 bronze badges
Do a quick ‘record macro’ to see the color number associated with the color you’re looking for (yellow highlight is 65535). Then erase the code and put
Sub Name()
Selection.Interior.Color = 65535 '(your number may be different depending on the above)
End Sub
answered Mar 4, 2020 at 15:07
1
or alternatively you could not bother coding for it and use the ‘conditional formatting’ function in Excel which will set the background colour and font colour based on cell value.
There are only two variables here so set the default to yellow and then overwrite when the value is greater than or less than your threshold values.
answered Dec 30, 2008 at 12:34
It doesn’t work if you use Function, but works if you Sub. However, you cannot call a sub from a cell using formula.
answered Mar 22, 2015 at 18:08
0
Заливка ячеек по двойному клику |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |