Заливка ячейки цветом в 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 / 1 / 0 Регистрация: 10.12.2011 Сообщений: 7 |
|
1 |
|
Закрасить ячейки определенным цветом в зависимости от содержимого26.10.2012, 10:09. Показов 83405. Ответов 23
Здравствуйте. Я не могу разобраться в создании программы.
1 |
Catstail Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 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 Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 13 |
||||||||
26.10.2012, 11:57 |
6 |
|||||||
Вот запускающая процедура:
1 |
Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 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 |
Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 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 Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 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 |
Модератор 34706 / 19227 / 4039 Регистрация: 12.02.2012 Сообщений: 32,183 Записей в блоге: 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,930 |
|
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 |
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
В этой статье говорится об автоматическом изменении значения ячейки в зависимости от цвета фона в Excel. Например, если выделенные ячейки заполняются красным цветом фона, заполните эти ячейки номером 1, а для ячеек с синим цветом фона заполните номер 0.
Изменить значение в зависимости от цвета ячейки с кодом VBA
Изменить значение в зависимости от цвета ячейки с кодом VBA
Вы можете запустить приведенный ниже код VBA, чтобы изменить значение в зависимости от цвета ячейки в Excel. Пожалуйста, сделайте следующее.
1. Выберите диапазон, в котором вам нужно изменить значения в зависимости от цвета фона, затем нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.
Код VBA: изменение значения в зависимости от цвета ячейки в Excel
Sub ChangeValueBasedOnCellColor()
Dim rg As Range
Dim xRg As Range
Set xRg = Selection.Cells
Application.DisplayAlerts = False
For Each rg In xRg
With rg
Select Case .Interior.Color
Case Is = 255 'Red
.Value = 1
Case Is = 15773696 'Blue
.Value = 0
End Select
End With
Next
Application.DisplayAlerts = False
End Sub
3. нажмите F5 Чтобы запустить код, вы увидите, что все красные ячейки в выбранном диапазоне заполнены цифрой 1, а синие ячейки заполнены цифрой 0, как показано на скриншоте ниже.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (11)
Оценок пока нет. Оцените первым!