Заливка ячейки цветом в 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 цветов, а также о том, как добавить узор в ячейку.
В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.
VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк
В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:
Необходимо сбросить форматирование ячеек и сделать так чтобы на всех таблицах планов выполнения работ были одинаковые форматы отображения данных. Формат ячеек для исходной таблицы должен быть закреплен за шаблоном, чтобы можно было сделать сброс и применять заданный стиль оформления в дальнейшем.
Чтобы выполнять такие задачи вручную можно попытаться облегчить процесс настройки множества опций форматирования для многих диапазонов ячеек на разных листах и рабочих книгах. Плюс к о всему можно ошибиться и применить несколько другие настройки форматирования.
Макросы Excel прекрасно справляются с форматированием ячеек на рабочих листах. Кроме того, делают это быстро и в полностью автоматическом режиме. Воспользуемся этими преимуществами и для решения данной задачи напишем свой код VBA-макроса. Он поможет нам быстро и безопасно сбрасывать форматы на исходный предварительно заданный в шаблоне главной таблицы.
Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:
В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:
Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub
Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:
Таблица приобрела формат, который определен макросом. Таким образом код VBA нам позволяет сбросить любые изменения формата ячеек на предустановленный автором отчета.
Описание VBA-макроса для формата ячеек таблицы Excel
Первая инструкция в коде, проверяет выделены ли ячейки диапазоном. Если перед выполнением макроса выделил другой элемент листа, например, график, тогда макрос закрывается и дальнейшие инструкции выполняться не будут. В противные случаи будут форматироваться все выделенные ячейки по очереди в соответствии с определенными настройками форматирования:
- Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
- Включен построчный перенос текста.
- Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
- Сброс цвета шрифта на авто.
- Удаляется любая заливка ячеек.
- Ширина столбцов автоматически настраивается под текст в ячейках.
- Автоматически настроить высоту строк по содержимому ячеек.
Модификация исходного кода макроса для форматирования
Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:
.HorizontalAlignment = xlHAlignRight.
Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.
Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:
Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.
Если нужно применить для границ ячеек толстую и пунктирную линию в синем цвете, смодифицируйте инструкцию, отвечающую за формат линий:
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:
- xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
- xlDouble – рисует двойную линию;
- xlHairLine – рисует тонкую линию;
- xlThick – для рисования очень толстой линии.
Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:
- vbBlack – черный;
- vbWhite – белый;
- vbRed – красный;
- vbGreen –зеленый;
- vbBlue – синий;
- vbYellow – желтый;
- vbMagenta – алый;
- vbCyan – голубой.
Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.
Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:
.BorderAround xlContinuous, xlMedium, vbBlack
Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.
Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
Если хотите присвоить такой же формат для не только для первой строки, но и для первого столбца выделенного диапазона, тогда скопируйте и вставьте ниже эти 3 строчки кода. После в последних трех строках измените свойство Rows на Columns.
.Columns (1).Font.Bold = True
.Columns (1).Font.Italic = True
.Columns (1).Interior.Color = vbCyan
Если нужно задать особенный формат для экспонирования последней строки выделенного диапазона, тогда измените число 1 в аргументе свойства Rows на число всех выделенных строк .Rows.Count. Например, добавьте в конец кода еще такую строку:
.Rows(.Rows.Count).Font.Bold = True
Полная версия модифицированного кода макроса выглядит так:
Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub
Пример работы измененного кода VBA-макроса:
В данном примере вы ознакомились с базовыми возможностями форматирования с помощью VBA-макросов. Уверен, что теперь вы сможете самостоятельно найти практическое применение этим исходным кодам.
Доброго времени суток, Друзья! |
|
Bema Пользователь Сообщений: 6761 |
Алексей, добрый и Вам. Обязательно нужен макрос? Можно и при помощи УФ такое сделать. Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
Bema
, и Вам доброго….без макроса никуда к сожалению |
|
Bema Пользователь Сообщений: 6761 |
Дело хозяйское Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл |
А если бы в макросе были бы еще комментарии что за что отвечает и счетчик сколько то или иное условие встречалось ранее(вывод счетчика в той же окрашенной ячейки), то этот макрос был бы очень хорошим) |
|
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 Excel. Фон ячейки. Свойства
.Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная
палитра из 56 цветов.
- Свойство .Interior.Color объекта Range
- Заливка ячейки цветом в VBA Excel
- Вывод сообщений о числовых значениях цветов
- Использование предопределенных констант
- Цветовая модель RGB
- Свойство .Interior.ColorIndex объекта Range
Свойство .Interior.Color объекта Range
Начиная с Excel 2007 основным способом заливки диапазона или
отдельной ячейки цветом (зарисовки, добавления, изменения фона) является
использование свойства .Interior.Color объекта Range путем присваивания
ему значения цвета в виде десятичного числа от 0 до 16777215 (всего
16777216 цветов).
Заливка ячейки цветом в VBA Excel
Пример кода 1:
1 2 3 4 5 6 |
|
Поместите пример кода в свой программный модуль и нажмите кнопку на
панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть
внутри выполняемой программы. На активном листе Excel ячейки и
диапазон, выбранные в коде, окрасятся в соответствующие цвета.
Есть один интересный нюанс: если присвоить свойству .Interior.Color
отрицательное значение от -16777215 до -1, то цвет будет
соответствовать значению, равному сумме максимального значения палитры
(16777215) и присвоенного отрицательного значения. Например, заливка
всех трех ячеек после выполнения следующего кода будет одинакова:
1 2 3 4 5 |
|
Проверено в Excel 2016.
Вывод сообщений о числовых значениях цветов
Числовые значения цветов запомнить невозможно, поэтому часто
возникает вопрос о том, как узнать числовое значение фона ячейки.
Следующий код VBA Excel выводит сообщения о числовых значениях
присвоенных ранее цветов.
Пример кода 2:
1 2 3 4 5 6 |
|
Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.
Использование предопределенных констант
В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:
Предопределенная константа | Наименование цвета |
vbBlack | Черный |
vbBlue | Голубой |
vbCyan | Бирюзовый |
vbGreen | Зеленый |
vbMagenta | Пурпурный |
vbRed | Красный |
vbWhite | Белый |
vbYellow | Желтый |
Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:
Пример кода 3:
1 |
|
Цветовая модель RGB
Цветовая система RGB представляет собой комбинацию различных по
интенсивности основных трех цветов: красного, зеленого и синего. Они
могут принимать значения от 0 до 255. Если все значения равны 0 — это
черный цвет, если все значения равны 255 — это белый цвет.
Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:
Открывается в новом окне
Чтобы можно было присвоить ячейке или диапазону цвет с помощью
значений RGB, их необходимо перевести в десятичное число, обозначающее
цвет. Для этого существует функция VBA Excel, которая так и называется
— RGB.
Пример кода 4:
1 |
|
Свойство .Interior.ColorIndex объекта Range
До появления Excel 2007 существовала только ограниченная палитра для
заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в
настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до
56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с
помощью свойства .Interior.ColorIndex:
Пример кода 5:
1 2 |
|
Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Пример кода 6:
1 2 3 4 5 6 |
|
Номера строк активного листа от 1 до 56 будут соответствовать индексу
цвета, а ячейка в первом столбце будет залита соответствующим индексу
фоном.
Готовую стандартную палитру из 56 цветов можете посмотреть здесь .
Skip to content
На чтение 2 мин. Просмотров 1k.
Что делает макрос: Полосатый эффект представляет собой явление, где каждая строка набора данных раскрашена в чередующуюся гамму оттенков. Как правило, применяется чередование цвета, когда необходимо проанализировать каждую строку данных.
Цвет окантовки облегчает чтение. Этот макрос позволяет автоматически применить дополнительный цвет заливки к каждой строке в выбранном диапазоне.
Содержание
- Как макрос работает
- Как этот код работает
- Как использовать
Как макрос работает
В этом макросе, мы, по существу, используем две переменные объекта Range. Одна из переменных отражает объем данных, с которым мы работаем, в то время как другая используется для хранения каждой отдельной ячейки. Когда каждая строка находится в фокусе, мы используем свойство Offset для оценки показателя цвета предыдущего ряда. Если индекс белого цвета, мы используем альтернативный зеленый индекс цвета.
Sub CheredovanieCvetaStrok() 'Шаг 1: Объявляем переменные Dim MyRange As Range Dim MyRow As Range 'Шаг 2: Определение целевого диапазона Set MyRange = Selection 'Шаг 3: Запуск цикла через диапазон For Each MyRow In MyRange.Rows 'Шаг 4: Поверьте, является ли номер строки четным листом If MyRow.Row Mod 2 = 0 Then 'Шаг 5: Примените соответствующий альтернативный цвет MyRow.Interior.ColorIndex = 35 Else MyRow.Interior.ColorIndex = 2 End If 'Шаг 6: Возвращаемся назад, чтобы получить следующую строку Next MyRow End Sub
Как этот код работает
- Сначала мы объявляем две переменные объекта Range. Одна из них, называется MyRange, держит весь целевой диапазон. Другая называется MyCell, держит каждую ячейку в диапазоне, так как макрос проходит через них один за другим.
- Шаг 2 заполняет переменную MyRange с целевым диапазоном. В этом примере мы используем Выбранный диапазон — диапазон, который был выбран в электронной таблице. Вы можете легко установить переменную MyRange в определенном диапазоне, таких как Range («A1: Z100»). Кроме того, если ваш целевой диапазон является именованный диапазон, можно просто ввести свое имя: Range («MyNamedRange»).
- На этом этапе, макрокоманда начинается через каждую ячейку в целевом диапазоне, активизируя каждую ячейку.
- Когда ячейка активирована, мы определяем, является ли номер текущей строки четным.
- Если номер строки четный, используем альтернативный зеленый цвет — индекс 35, если нет, то он используем индекс цвета 2.
- На шаге 6 макрос возвращается назад, чтобы получить следующую ячейку. После того, как все клетки в целевом диапазоне активируются, макрос останавливается.
Как использовать
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши personal.xlb в окне Project.
- Выберите Insert➜Module.
- Введите или вставьте код.