Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства .Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра. Очистка фона ячейки.
Свойство .Interior.Color объекта Range
Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).
Заливка ячейки цветом в VBA Excel
Пример кода 1:
1 2 3 4 5 6 |
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) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:
1 2 3 4 5 |
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:
1 2 3 4 5 6 |
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:
1 |
Range("A1").Interior.Color = vbGreen |
Цветовая модель RGB
Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.
Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:
Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.
Пример кода 4:
1 |
Range("A1").Interior.Color = RGB(100, 150, 200) |
Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.
Очистка ячейки (диапазона) от заливки
Для очистки ячейки (диапазона) от заливки используется константа xlNone
:
1 |
Range("A1").Interior.Color = xlNone |
Свойство .Interior.ColorIndex объекта Range
До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:
Пример кода 5:
1 2 |
Range("A1").Interior.ColorIndex = 8 MsgBox Range("A1").Interior.ColorIndex |
Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Пример кода 6:
1 2 3 4 5 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 цветов, а также о том, как добавить узор в ячейку.
А полностью код можно? Чтобы загрузить в модуль и пользоваться формулой.
Не знаком с написанием VBA от слова совсем…
Игорь, вы можете найти исполнителя на бирже фриланса.
Добрый день. Очень нужна помощь. Мне необходимо изменить цвет ячеек по столбцу, в зависимости от цвета заливки ячеек предыдущего столбца. Столбцы на листе — это декады месяца (это я про то, что таких интервалов на листе предостаточно в диапазоне 2х лет). Надеюсь на вашу помощь
Привет, Евгения!
Если структура столбцов одинаковая по объединенным ячейкам и шрифту, вы можете воспользоваться инструментом «Формат по образцу».
Добрый день! Подскажите как сделать данное задание: Напишите программу, которая заполняет четные строки зеленым цветом, а нечетные – желтым цветом. Количество строк и столбцов введите с клавиатуры (не менее 20).
Привет, Галина!
Это задание можно решить так:
Здравствуйте.
Пишу игрушку-обучалку для ребенка. Нужно научиться закрашивать ячейку цветом, соответствующим длине волны (в нанометрах), которая записана в этой ячейке.
Т.е. если в ячейке записано 450, то красить ее синим, 520 — зеленым, 570- желтым, и т.д.
Что-то можно придумать?
Спасибо большое!
Привет, Игорь!
Используйте условное форматирование ячейки или диапазона ячеек. Создайте отдельное правило для каждой длины волны:
Добрый день. Прошу помочь.
Есть 2 строки с закрашенными ячейками.Нужно вывести количество значений, по которым обе строки закрашены в определенные цвета (например, если в строке А ячейка А12 закрашен в красный а в строке В ячейка В12 закрашена в зеленый, то в результат +1) Грубо говоря функция СЧЕТЕСЛИМН, но в условиях не значения, а цвета. Заранее спасибо.
Здравствуйте, Василий!
Посчитать окрашенные ячейки можно только с помощью цикла. Так как циклы с перебором ячеек работают достаточно медленно, лучше указывать не целые строки, а их диапазоны в пределах таблицы.
Добрый день!
Подскажите, пожалуйста, какой макрос использовать в сводных таблицах для заливки ячеек?
Что хотела: отфильтровала в столбце A сводной таблицы значения от A до Z и хотела выполнить градиентную заливку столбца А (скажем от желтого цвета к красному).
Спасибо большое. Очень хороший сайт. Постоянно пользуюсь. Много полезной информации. Изучаю VBA только примерно месяц, но уже начало что-то получаться. Даже сделал свою надстройку.
Код цвета иногда и правда нужно узнавать.
Сделал свой простенький макрос, вначале надо выделить несколько ячеек, там где есть ячейки, чей цвет следует определить, а потом запустить следующий макрос:
получается универсальный способ и быстрый узнать код цвета ячейки.
Есть ли команда(макрос) для заливки ВЫДЕЛЕННОЙ ячейки?
Здравствуйте, помогите решить задачу в VBA((
С помощью функции rnd() заполнить область А1:E15 случайными целыми числами от 1 до 10. Выделить желтым фоном каждый столбец, начиная с первого А1:А5, содержащий по крайней мере одну единицу (1) и одну девятку (9) одновременно.
Привет, Рафия!
Я еще добавил программную очистку ячеек от заливки, если столбец не содержит хотя бы по одной единице и девятке, чтобы можно было запускать процедуру повторно.
Здравствуйте! Подскажите как макросом закрашивать лист при изменении значений в диапазоне ячеек?
Например если значение одной из строк 5 — ярлык листа зеленый.
Привет, Владислав!
Если 6 строка заполнена числом 5, тогда ярлык в зеленый цвет закрашиваем так:
Доброго времени суток. Мне нужно закрасить ячейки выделенного диапазона, значения которых попадают в различные категории. Типо 4= красный; 2= зелёный и т.д.
Добрый день, Тихон!
Для вашего примера решение такое:
Здравствуйте!
А нет ли макроса для замены условного форматирования
(как я понял, оно забирает достаточно много ресурсов)?
Например, есть таблица и если ячейка в столбце B содержат дубликаты ([b3].value=[b11].value),
то красить фон всех строчек с дубликатами в красный цвет,
а если пользователь после этого убирает дубликаты
(или меняет значения на недублирующиеся), то убирать окраску?
Спасибо!
Добрый день!
Ответил в статье Поиск повторяющихся значений (дубликатов).
Добрый день! Если такое возможно, помогите написать макрос.
Есть некая сводная таблица. по вертикали обозначается продукты, по горизонтали обозначаются года. В ячейках указаны цены. Ячейки на некоторых пересечениях закрашены красным (условным форматированием). Нужно чтобы на НОВЫЙ лист стягивались название продукта и год, где ячейки закрашены красным.
Пытался разобраться сам, но все тщетно. Спасибо.
Добрый день, подскажите новичку
Сценарий таков, ячейки на листе закрещены разными цветами. Надо что бы при клике на ячейку цвет становился, например, желтый, а при уходе с ячейки, цвет прошлой возвращался обратно.
Заранее спасибо
Добрый день, Даниэль!
Разместите следующий код в модуле листа:
У этого кода есть один недостаток: при закрытии сохраненной книги, последняя желтая ячейка сохранит желтый цвет.
Спасибо, Евгений.
А что если нужно такое же проделывать с N кол-вом ячеек разного цвета. Selection и Target выделяют и окрашивают зону в нужный цвет, но как вернуть каждой ячейке свой цвет который был.
P.s
Прочитал выше ваши ответы. Вам памятник ставить надо за такую помощь всем.
Не знаю, получится или нет, но вы можете попробовать записать адрес объекта Selection в переменную adres1, потом циклом переписать исходные значения Interior.Color и Interior.Pattern в массивы color1() и patt1(). При смене Selection, так же циклом, вернуть исходные значения предыдущему диапазону по записанным ранее адресу и параметрам.
Здравствуйте необходима помощь, как с помощью кода, написать названия цветов которые выдает палитра от 1 до 56
пример должно быть на листе эксель 3 столбца, первый столбец-индекс цвета, второй столбец-заливка ячеек, третий столбец — названия цвета
Добрый день, Алина!
Запустите код и по выведенным цветам продлите ряд их названий в списке аргументов функции Choose:
Алина, если еще актуально, названия цветов можете взять из новой статьи: Стандартная палитра из 56 цветов.
Подскажите как задать закрашивание ячейки по нажатию кнопки, но надо не выделенную ячейку, а ту, значение которой указано в другой ячейке
Вот например есть список из 100 человек, и у каждого свой порядковый номер от 1 до 100. В первой ячейке номер во второй фамилия. Надо чтоб при указании в отдельной ячейке номера от 1 до 100 и нажатии кнопки закрашиваось 2 ячейки в таблице, то есть порядковый номер и фамилия.
Привет, Михаил!
Допустим в первой строке расположены заголовки столбцов таблицы, а номера от 1 до 100 начинаются со 2 строки. Номера — в столбце A, фамилии — в столбце B. Искомый номер — в ячейке K3. Тогда код будет таким:
Спасибо, все работает, очень благодарен, а можно сделать так чтоб при повторном нажатии цвет менялся обратно на белый, ну то есть убирало выделение?
Здравствуйте, Михаил!
Объявите переменную уровня модуля типа Boolean. При открытии файла, она будет иметь значение False. Пример кода:
И ещё один вопрос, как быть, если фамилии и номера будут не только в столбцах А и В, если надо разместить всех в 3-4 столбца, чтоб умещались на мониторе
Пример кода для номеров, размещенных в трех столбцах: A, C и E
Добрый день.
Подскажите пожалуйста, как в данном случае просто вернуть код цвета в соседнюю ячейку?
Ячейка окрашена в оттенок, надо перенести его в др файл. Планировал изначально вывести цветовой код, а затем окрасить по коду, соответственно. Возможно использовать Ваш пример?
Спасибо!
Здравствуйте, Владислав!
Возврат числового значения цвета фона активной ячейки в соседнюю ячейку справа:
Копирование цвета заливки сразу в другую книгу:
ActiveCell
вы можете заменить наCells(строка, столбец)
илиRange("A1")
с указанием нужной ячейки.Здравствуйте!
Подскажите, пожалуйста, как лучше реализовать макрос. Мне нужно сравнить два значения из разных книг. Если они совпадают, то окрасить строку в цвет, который был в книге 1.
Допустим в «книга 1», столбец B — содержит уникальные ключи. А столбцы C,D,E,F,G — имеют различные заливки.
Как перенести эти заливки в «книга 2»?
Здравствуйте. Подскажите, пожалуйста, как решить задачу.
У меня есть таблица-переводчик, которая берет выгрузку и формирует её в отчет. Затем отчет копируется во внешний файл с заменой формул на результат.
Строки отчета красятся условным форматированием на основе значения ячейки, которая не попадает в сам отчет. Если копировать только значения, цвет не передаётся. Если копировать формат, копируется условное форматирование с ссылкой на ячейку, которой в отчете нет.
Как можно быстро перевести цвет условного форматирования в статичный цвет, чтобы перенести в другой документ?
Здравствуйте, Даниил!
Вам нужно по отдельности копировать значения ячеек и значения их цветов:
Здравствуйте, подскажите как реализовать: если ячейка окрашена например в желтый, то соседней ячейке справа присвоить либо текст либо число?
Добрый вечер, Роман!
При выборе желтой ячейки, в соседнюю ячейку справа записывается число 777:
Обсуждение закрыто.