Заливка ячейки цветом в 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
я так понял.. |
||
Закрасить ячейки по условию VBA |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
1 / 1 / 0 Регистрация: 10.12.2011 Сообщений: 7 |
|
1 |
|
Закрасить ячейки определенным цветом в зависимости от содержимого26.10.2012, 10:09. Показов 83356. Ответов 23
Здравствуйте. Я не могу разобраться в создании программы.
1 |
Catstail Модератор 34702 / 19224 / 4037 Регистрация: 12.02.2012 Сообщений: 32,180 Записей в блоге: 13 |
||||
26.10.2012, 10:25 |
2 |
|||
2 |
1 / 1 / 0 Регистрация: 10.12.2011 Сообщений: 7 |
|
26.10.2012, 10:32 [ТС] |
3 |
Catstail, а можно по-подробнее? Описать каждую строчку) А то ещё сплю на ходу)
0 |
15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||
26.10.2012, 10:33 |
4 |
|
Условное форматирование не подойдет? Вложения
0 |
1 / 1 / 0 Регистрация: 10.12.2011 Сообщений: 7 |
|
26.10.2012, 10:40 [ТС] |
5 |
Условное форматирование не подойдет? Извините, но нет. Хотя мб и пойдёт, мне нужен код. Я не давно начал изучать VBA, и поэтому желательно с пояснениями.
0 |
Catstail Модератор 34702 / 19224 / 4037 Регистрация: 12.02.2012 Сообщений: 32,180 Записей в блоге: 13 |
||||||||
26.10.2012, 11:57 |
6 |
|||||||
Вот запускающая процедура:
1 |
Модератор 34702 / 19224 / 4037 Регистрация: 12.02.2012 Сообщений: 32,180 Записей в блоге: 13 |
|
26.10.2012, 12:03 |
7 |
Вот и картинка: Изображения
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||
26.10.2012, 13:16 |
8 |
|||||||
Добавлено через 9 минут
4 |
Модератор 34702 / 19224 / 4037 Регистрация: 12.02.2012 Сообщений: 32,180 Записей в блоге: 13 |
|
26.10.2012, 14:39 |
9 |
Либо тоже самое короче, но непонятнее: — а если числа и строки будут расположены по-другому, Ваш код раскрасит их правильно (в соотв. с заданием TC)?
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||
26.10.2012, 15:35 |
10 |
|||||||
— Условное форматирование не подойдет? Код для применения УФ к выделенному диапазону. Получен правкой кода макрорекордера:
В файле поста #4 было 2 условия УФ, т.е. ячейки изначально имели зеленый фон. Здесь я добавил зеленую заливку в условие УФ. Теперь ячейки, содержащие значение ошибки (это не число, не текст и не пусто) будут оставаться неокрашенными. Добавлено через 10 минут
— а если числа и строки будут расположены по-другому, Ваш код раскрасит их правильно (в соотв. с заданием TC)? Да. С кодом Hugo121 другие проблемы:
1 |
1 / 1 / 0 Регистрация: 10.12.2011 Сообщений: 7 |
|
30.10.2012, 23:17 [ТС] |
11 |
Всем доброго времени суток. Не могу понять, что написать для того что бы закрашивались ячейки, в зависимости от содержимого. Приложен файл. Лучше всего писать коды в нём. Заранее благодарю
0 |
1177 / 419 / 106 Регистрация: 31.03.2012 Сообщений: 1,138 |
|
31.10.2012, 10:34 |
12 |
А что мешает поставить правильную задачу в соответствии правилами форума, в частности с п. 4.1
Приложен файл. Лучше всего писать коды в нём. Куда приложен?, где лучше писАть коды? Не по теме: PS. никак не смог избавиться от цитирования cyberforum.ru в качестве ссылки для указания в качестве поисковой строки, потому использовал вместо настоящего пробела — это слово в скобках
0 |
5468 / 1148 / 50 Регистрация: 15.09.2012 Сообщений: 3,514 |
|
31.10.2012, 11:48 |
13 |
Никогда не пользуюсь поиском на этом форуме, т.к. невозможно ничего найти.
0 |
Catstail Модератор 34702 / 19224 / 4037 Регистрация: 12.02.2012 Сообщений: 32,180 Записей в блоге: 13 |
||||
31.10.2012, 12:18 |
14 |
|||
Да. С кодом Hugo121 другие проблемы: Да??? Я про вот этот код:
Хотя, действительно ДА. Я неправ…
0 |
1 / 1 / 0 Регистрация: 10.12.2011 Сообщений: 7 |
|
31.10.2012, 12:44 [ТС] |
15 |
Вот он(файл)
0 |
1 / 1 / 0 Регистрация: 03.12.2014 Сообщений: 329 |
|
27.05.2015, 13:34 |
16 |
Catstail, пожалуйста, можно палитру цветов с кодами (если их много)
0 |
Модератор 34702 / 19224 / 4037 Регистрация: 12.02.2012 Сообщений: 32,180 Записей в блоге: 13 |
|
27.05.2015, 14:24 |
17 |
1 |
1 / 1 / 0 Регистрация: 03.12.2014 Сообщений: 329 |
|
27.05.2015, 14:24 |
18 |
Так это же иконки, а мне нужна заливка ячеек
0 |
3827 / 2254 / 751 Регистрация: 02.11.2012 Сообщений: 5,928 |
|
27.05.2015, 14:26 |
19 |
Так это же иконки, а мне нужна заливка ячеек смотрите лист КОДЫ левее иконок.
0 |
1 / 1 / 0 Регистрация: 03.12.2014 Сообщений: 329 |
|
27.05.2015, 16:27 |
20 |
нашла, спасибо. открывала коды-0 Добавлено через 1 час 54 минуты
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
27.05.2015, 16:27 |
20 |
в синий, согласна некому условию. В совокупности желтая строка с набором синих строк является отобранным блоком данных (рис .1.).
3) При определении незакрашенной строки, начать выполнения макроса с отбора следующего блока данных, т.е. закрашивания строки в желтый и подбору к ней строк в соответствии с неким условием попутно закрашивая их в синий, но при этом избегая уже использованных данных.
4) Отобранный блок данных копируется на отдельную страницу, в то время как поиск блоком данных продолжается.
Конкретно меня интересует, можно ли при помощи условия if отследить ячейки по цвету, т.е. пункт 2.
Благодарю за информацию, также прилагаю пример данной задачи, где мне необходимо добавить условие из пункта 2.
[vba]
Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long
‘строки’
‘1’
b = InputBox(«Введите номер строки»)
‘2’
d = 8
‘определение последней заполненной ячеки’
f = Sheets(«Ф1»).UsedRange.Row + Sheets(«Ф1»).UsedRange.Rows.Count — 1
LastRow1 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1
Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)
Sheets(«Ф1»).Range(Cells(b, 1), Cells(b, 17)).Copy Sheets(«1»).Cells(LastRow1, 1)
If Not b = d Then
N_nd = Abs(Cells(b, 3) — Cells(d, 3))
N_vd = Abs(Cells(b, 4) — Cells(d, 4))
N_ct1 = Abs(Cells(b, 5) — Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) — Cells(d, 6))
N_ct3 = Abs(Cells(b, 5) — Cells(b, 6))
N_ct4 = Abs(Cells(d, 5) — Cells(d, 6))
Tg_ct1 = Abs(Cells(b, 9) — Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) — Cells(d, 15))
Tg_ct3 = Abs(Cells(b, 9) — Cells(b, 15))
Tg_ct4 = Abs(Cells(d, 9) — Cells(d, 15))
Tvh_OK = Abs(Cells(b, 10) — Cells(d, 10))
Pza_KVD = Abs(Cells(b, 13) — Cells(d, 13))
LastRow2 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1
в синий, согласна некому условию. В совокупности желтая строка с набором синих строк является отобранным блоком данных (рис .1.).
3) При определении незакрашенной строки, начать выполнения макроса с отбора следующего блока данных, т.е. закрашивания строки в желтый и подбору к ней строк в соответствии с неким условием попутно закрашивая их в синий, но при этом избегая уже использованных данных.
4) Отобранный блок данных копируется на отдельную страницу, в то время как поиск блоком данных продолжается.
Конкретно меня интересует, можно ли при помощи условия if отследить ячейки по цвету, т.е. пункт 2.
Благодарю за информацию, также прилагаю пример данной задачи, где мне необходимо добавить условие из пункта 2.
[vba]
Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long
‘строки’
‘1’
b = InputBox(«Введите номер строки»)
‘2’
d = 8
‘определение последней заполненной ячеки’
f = Sheets(«Ф1»).UsedRange.Row + Sheets(«Ф1»).UsedRange.Rows.Count — 1
LastRow1 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1
Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)
Sheets(«Ф1»).Range(Cells(b, 1), Cells(b, 17)).Copy Sheets(«1»).Cells(LastRow1, 1)
If Not b = d Then
N_nd = Abs(Cells(b, 3) — Cells(d, 3))
N_vd = Abs(Cells(b, 4) — Cells(d, 4))
N_ct1 = Abs(Cells(b, 5) — Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) — Cells(d, 6))
N_ct3 = Abs(Cells(b, 5) — Cells(b, 6))
N_ct4 = Abs(Cells(d, 5) — Cells(d, 6))
Tg_ct1 = Abs(Cells(b, 9) — Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) — Cells(d, 15))
Tg_ct3 = Abs(Cells(b, 9) — Cells(b, 15))
Tg_ct4 = Abs(Cells(d, 9) — Cells(d, 15))
Tvh_OK = Abs(Cells(b, 10) — Cells(d, 10))
Pza_KVD = Abs(Cells(b, 13) — Cells(d, 13))
LastRow2 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1
в синий, согласна некому условию. В совокупности желтая строка с набором синих строк является отобранным блоком данных (рис .1.).
3) При определении незакрашенной строки, начать выполнения макроса с отбора следующего блока данных, т.е. закрашивания строки в желтый и подбору к ней строк в соответствии с неким условием попутно закрашивая их в синий, но при этом избегая уже использованных данных.
4) Отобранный блок данных копируется на отдельную страницу, в то время как поиск блоком данных продолжается.
Конкретно меня интересует, можно ли при помощи условия if отследить ячейки по цвету, т.е. пункт 2.
Благодарю за информацию, также прилагаю пример данной задачи, где мне необходимо добавить условие из пункта 2.
[vba]
Dim b As Long, d As Long, _
N_nd As Long, _
N_ct1 As Long, N_ct2 As Long, N_ct3 As Long, N_ct4 As Long, _
Tg_ct1 As Long, Tg_ct2 As Long, Tg_ct3 As Long, Tg_ct4 As Long, _
Tvh_OK As Long, Pza_KVD As Long, _
LastRow2 As Long, LastRow1 As Long, f As Long, _
N_vd As Long
‘строки’
‘1’
b = InputBox(«Введите номер строки»)
‘2’
d = 8
‘определение последней заполненной ячеки’
f = Sheets(«Ф1»).UsedRange.Row + Sheets(«Ф1»).UsedRange.Rows.Count — 1
LastRow1 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1
Range(Cells(b, 1), Cells(b, 17)).Interior.Color = RGB(246, 249, 135)
Sheets(«Ф1»).Range(Cells(b, 1), Cells(b, 17)).Copy Sheets(«1»).Cells(LastRow1, 1)
If Not b = d Then
N_nd = Abs(Cells(b, 3) — Cells(d, 3))
N_vd = Abs(Cells(b, 4) — Cells(d, 4))
N_ct1 = Abs(Cells(b, 5) — Cells(d, 5))
N_ct2 = Abs(Cells(b, 6) — Cells(d, 6))
N_ct3 = Abs(Cells(b, 5) — Cells(b, 6))
N_ct4 = Abs(Cells(d, 5) — Cells(d, 6))
Tg_ct1 = Abs(Cells(b, 9) — Cells(d, 9))
Tg_ct2 = Abs(Cells(b, 15) — Cells(d, 15))
Tg_ct3 = Abs(Cells(b, 9) — Cells(b, 15))
Tg_ct4 = Abs(Cells(d, 9) — Cells(d, 15))
Tvh_OK = Abs(Cells(b, 10) — Cells(d, 10))
Pza_KVD = Abs(Cells(b, 13) — Cells(d, 13))
LastRow2 = Sheets(«1»).Cells(3, 3).Row + Sheets(«1»).UsedRange.Rows.Count — 1
If N_nd Автор — KaminoontY
Дата добавления — 08.10.2018 в 13:31
Источник
Adblock
detector