Заливка ячейки цветом в 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 цветов, а также о том, как добавить узор в ячейку.
Доброго времени суток, Друзья! |
|
Bema Пользователь Сообщений: 6750 |
Алексей, добрый и Вам. Обязательно нужен макрос? Можно и при помощи УФ такое сделать. Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
Bema
, и Вам доброго….без макроса никуда к сожалению |
|
Bema Пользователь Сообщений: 6750 |
Дело хозяйское Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
А если бы в макросе были бы еще комментарии что за что отвечает и счетчик сколько то или иное условие встречалось ранее(вывод счетчика в той же окрашенной ячейки), то этот макрос был бы очень хорошим) |
|
Kuzmich Пользователь Сообщений: 7998 |
Сделайте небольшой пример |
Kuzmich
, возможности сделать хотя бы очень маленький пример не имею т.к. незнаю как… |
|
Kuzmich Пользователь Сообщений: 7998 |
#8 05.07.2017 21:36:15 Макрос (в модуль листа) срабатывает на изменение значений в ячейках столбцов H:O
|
||
Kuzmich
, спасибо большое, но у меня чего-то не работает)))) Kuzmich , скажите, а этот счетчик можно вывести именно в ту ячейку которая должна окрасится? Изменено: Aleksey.g84 — 05.07.2017 21:54:57 |
|
Kuzmich Пользователь Сообщений: 7998 |
#10 05.07.2017 22:23:05
Скопируйте и вставьте код при русской раскладке клавиатуры |
||
Kuzmich
, не помогает смена раскладки…. |
|
Kuzmich Пользователь Сообщений: 7998 |
|
Kuzmich
, грешу все таки на то, что у меня макбук… |
|
Kuzmich Пользователь Сообщений: 7998 |
#14 05.07.2017 23:11:29 Сравните ваши строки в макросе
И то, что у меня в примере Изменено: Kuzmich — 05.07.2017 23:27:50 |
||
Aleksey.g84 Пользователь Сообщений: 80 |
#15 05.07.2017 23:14:30 совершенно идентичны…
|
||
Kuzmich Пользователь Сообщений: 7998 |
У вас в коде «_7», «_4» и «_10» |
И все же Kuzmich продолжаю грешить на то, что у меня макбук….сделал как вы сказали…скопировал прямо из книги в редактор…сохранил и ничего))) |
|
Kuzmich Пользователь Сообщений: 7998 |
Мой пример из сообщения 12 у вас работает? |
Kuzmich
, к сожалению нет…. |
|
vikttur Пользователь Сообщений: 47199 |
Для MAC есть отдельная ветка форума. |
Kuzmich Пользователь Сообщений: 7998 |
#21 05.07.2017 23:37:30
Не надо ничего нажимать. Sub iSumma() это от другого примера |
||
vikttur
, прекрасно вас понимаю…но на данный момент это похоже на расизм….аааа…у тебя мак…пошел вон от сюда… |
|
Aleksey.g84 Пользователь Сообщений: 80 |
#23 05.07.2017 23:42:56 Kuzmich
, немного поменял код…
получилось ничего) Прикрепленные файлы
|
||
Kuzmich Пользователь Сообщений: 7998 |
Вы сделали то, что я вам говорил в #16 ? |
Obelisk Пользователь Сообщений: 49 |
У меня так получилось, все работает: |
vikttur Пользователь Сообщений: 47199 |
#26 05.07.2017 23:49:36
Да при чем здесь рассизм?! MAC имеет отличия в работе с VBA |
||
Kuzmich
, совершенно верно….сейчас еще раз повторил…. |
|
vikttur
, не принимайте близко))) |
|
Kuzmich Пользователь Сообщений: 7998 |
#29 05.07.2017 23:56:38 Obelisk
Ваш макрос только для первой строки
|
||
Obelisk Пользователь Сообщений: 49 |
#30 05.07.2017 23:58:27
я так понял.. |
||
1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
|
1 |
|
Добавить текст ячейки в зависимости от цвета ячейки12.02.2017, 12:30. Показов 8199. Ответов 16
Здравствуйте. Я не могу разобраться в написании формулы или макроса. Нужен код для VBA excel.
0 |
aequit 223 / 134 / 45 Регистрация: 08.09.2012 Сообщений: 283 Записей в блоге: 1 |
||||
12.02.2017, 14:22 |
2 |
|||
Файл нужно прикладывать со своими наработками, что не получилось…
0 |
Xiaohny 1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
||||||||
13.02.2017, 11:46 [ТС] |
3 |
|||||||
в ячейке D9 находиться пример цвета.
Добавлено через 17 часов 20 минут
Файл нужно прикладывать со своими наработками, что не получилось… Разве можно задать в словном форматировании условие определения цвета?
0 |
223 / 134 / 45 Регистрация: 08.09.2012 Сообщений: 283 Записей в блоге: 1 |
|
13.02.2017, 14:40 |
4 |
Да, условным форматированием данную задачу нельзя сделать (или я не знаю как)… Вариант условия из первого поста «если ячейка желтого цвета, то в ячейке справа должен появиться текст «желтый», если красного -«красный» можно реализовать циклом по ячейкам из диапазона «справа» и в зависимости от результата в ячейках «слева» писать текст. Для этого в коде нужно запрограммировать соответствие 65535 = «Желтый» и т.д. Например, используя Select Case.
0 |
Xiaohny 1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
||||||
13.02.2017, 16:33 [ТС] |
5 |
|||||
Изменил формулу, в результате в ячейке результат «#ЗНАЧ!»
Вложения
0 |
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
13.02.2017, 16:38 |
6 |
Что может быть не так в моей формуле? А функции-то и нет.
0 |
1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
|
13.02.2017, 16:40 [ТС] |
7 |
Прикрепить файл с макросом не могу, пардоньте
0 |
3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,928 |
|
13.02.2017, 16:51 |
8 |
заархивируйте тогда прицепится.
0 |
1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
|
13.02.2017, 16:54 [ТС] |
9 |
Готово.
0 |
Vlad999 3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,928 |
||||
13.02.2017, 16:58 |
10 |
|||
Решениедля начала так. файл не смотрел
2 |
1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
|
13.02.2017, 17:19 [ТС] |
11 |
Работает, спасибо!
0 |
aequit 223 / 134 / 45 Регистрация: 08.09.2012 Сообщений: 283 Записей в блоге: 1 |
||||
13.02.2017, 17:20 |
12 |
|||
Так тоже можно функцию сделать без создания вспомогательных ячеек. Циферки кодов цветов я выше в файле кидал
0 |
Xiaohny 1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
||||
14.02.2017, 15:21 [ТС] |
13 |
|||
Функция работает только при вводе вручную, но при автозаполнении результатов не дает.
0 |
Vlad999 3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,928 |
||||
14.02.2017, 16:00 |
14 |
|||
добавьте второй строкой
0 |
1 / 1 / 0 Регистрация: 12.02.2017 Сообщений: 52 |
|
14.02.2017, 16:27 [ТС] |
15 |
Не работает
0 |
3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,928 |
|
14.02.2017, 17:52 |
16 |
вы опять не правильно пишите ф-цию. у вас в ф-ции должна быть строка examV2=….., а у вас её нет.
0 |
1062 / 506 / 137 Регистрация: 27.02.2013 Сообщений: 1,451 |
|
14.02.2017, 19:34 |
17 |
РешениеXiaohny, посмотрите файл.Я когда-то занимался подобной проблемой.Там я привел пример как вам надо используя функции ClosestRGBConstantColorName() и CellColor(),объединив их.
2 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
14.02.2017, 19:34 |
Помогаю со студенческими работами здесь Изменение цвета строки(ячейки) в зависимости от свойств реквизита спрв Изменение цвета ячейки в таблице Excel в зависимости от сегодняшней даты Как задать значение для ячейки в зависимости от значения другой ячейки Изменения формата ячейки Excel средствами VBA в зависимости от значения другой ячейки
Изменения формата ячейки в зависимости от значения другой ячейки Задача, которая в принципе решается средствами… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 17 |
I don’t know how to code in VBA but am trying to automate an if/then calculation based on cell color.
So I have many cells that are filled in with the RGB color code RGB (255, 235, 156). What I would like to do is take every cell from the range A1:G10000 and if they are filled in with this color, I would like to have them turn bold, italics, red, and have the cell’s fill color to turn to white. I have playing around with the code and so far have found that to this code will make the font red, bold and italics:
Selection.Font.Bold = True
Selection.Font.Italic = True
With Selection.Font
.Color = -16776961
.TintAndShade = 0
However, I have tried using parts of the code from other discussions to make this work in the IF function, and have not yet been able to. I would greatly appreciate if anyone is able to help me write this code. Thank you so much