Vba excel цвет фона ячейки. Как в VBA программно найти цвет фона ячейки в Microsoft Office Excel? Цветовая модель RGB

07.03.2019

Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства.Interior.Color и.Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра из 56 цветов. Предопределенные константы.

Свойство.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 есть предопределенные константы часто используемых цветов для заливки ячеек:

Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:

Пример кода 3:

Range("A1").Interior.Color = vbGreen

Цветовая модель RGB

Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 - это черный цвет, если все значения равны 255 - это белый цвет.

Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:

Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется - RGB.

Пример кода 4:

Range("A1").Interior.Color = RGB(100, 150, 200)

Свойство.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 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.

Готовую стандартную палитру из 56 цветов можете посмотреть .

Textual Sub Procedure_1() "Создаём в оперативной памяти компьютера "поименованную область - массив "myColor". "Массив состоит из трёх строк и двух столбцов. "Если надо искать более трёх слов, то нужно изменить "здесь количество строк: сделать не 1 To 3, а например 1 to 4. "Число столбцов изменять не надо. Dim myColor(1 To 3, 1 To 2) As String Dim rngSearch As Excel.Range Dim rngFind As Excel.Range, myAddress As String Dim i As Long "1. Помещаем в массив "myColor" в первый столбец текст, "который будет искаться в ячейках Excel. "Во второй столбец помещаем номер цвета, который нужно "будет применить. "Номер цвета можно узнать так: "1) переходите в Excel; "2) делаете активной ячейку, у которой нужно узнать цвет; "3) переходите в VBA; "4) View - Immediate Window. Откроется окно. В это окно вставьте "этот код и нажмите клавишу "Enter". Будет получен номер цвета. "print activecell.Interior.Color "5) Есть ещё "ColorIndex". Определённым цветам даны "определённые номера. В справке в VBA (Excel 2010) если "в верхнем правом углу вставить текст "ColorIndex" "и нажать клавишу "Enter", то появится список статей. "Выберите статью "ColorIndex Property". В ней показано, "какому цвету, какой номер назначен. "Числа заключаю в кавычки, т.к. я дал массиву тип данных "Текст". myColor(1, 1) = "GR": myColor(1, 2) = "5287936" myColor(2, 1) = "RD": myColor(2, 2) = "255" myColor(3, 1) = "Y": myColor(3, 2) = "65535" "2. Для удобства написания кода, даём имя "rngSearch" диапазону ячеек, где "нужно закрашивать ячейки. Через это имя будем обращаться "к нужному диапазону ячеек. Set rngSearch = ActiveSheet.Range("A1:D25") "С помощью цикла с "i" просматриваем все строки в массиве "myColor". "UBound(myColor, 1) - это порядковый номер последней строки в массиве "myColor". For i = 1 To UBound(myColor, 1) Step 1 "3. Быстрее использовать не просмотр каждой ячейки, а быстрее вести поиск. "LookAt:=xlWhole - ищется полное совпадение. Set rngFind = rngSearch.Find(What:=myColor(i, 1), LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) "Если найдено, то ячейке, в которой находится найденный текст, "даётся имя "rngFind". И через это имя можно обращаться к ячейке. "Если не найдено, то в переменной "rngFind" будет текст "Nothing". If rngFind Is Nothing Then "4. Если не найдено, то переходим к поиску следующего текста. GoTo metka End If "Если найдено. "5. Запоминаем адрес ячейки, где было первый раз найдено, "чтобы потом остановить поиск. myAddress = rngFind.Address "С помощью цикла "Do ... Loop" продолжаем поиск. Do "6. Окрашиваем ячейку нужным цветом. "Число у нас содержится в виде текста. С помощью "CLng" "делаем число числом. rngFind.Interior.Color = CLng(myColor(i, 2)) "7. Продолжаем поиск. Set rngFind = rngSearch.FindNext(rngFind) Loop While rngFind.Address <> myAddress metka: Next i "8. Сообщение, что работа кода завершена. MsgBox "Работа кода завершена!", vbInformation End Sub

Иногда возникает необходимость изменить, определить цвет ячейки для копирования, закрасить определенную область, придав тем самым неповторимые и выразительные черты таблице данных.

В этой статье мы рассмотрим как вручную можно менять цвет ячейки, а так же как прописать в VBA изменение цвета диапазона ячеек или одной выделенной ячейки.

Начнем с простого. На главной панели инструментов ленты находится панель Формата Ячеек:

Для того, чтобы изменить цвет ячейки (диапазона ячеек) нам необходимо выделить ее, после чего на Панели инструментов выбрать необходимый цвет. Так же можно задать другие цвета, выбрав их из палитры. Панель инструментов меняет так же цвет текста, размер шрифта и формат границы ячейки.

Теперь зададим формат ячейки пользуясь контекстным меню, для чего кликнем правой кнопкой мыши на ячейке и в открывшемся списке выберем «Формат Ячеек»:

На вкладке «Заливка» можно выбрать цвет фона и узор.

Рассмотрим несколько иную ситуацию. Допустим вы хотите скопировать цвет ячейки (и формат) с существующей и применить к своим ячейкам. Воспользуемся кнопкой на главной панели «Формат по образцу» («метелочка»):

Таким образом, для того, чтобы скопировать формат необходимо выделить интересующую нас ячейку, нажать на «метелочку» и кликнуть по ячейке, формат которой мы хотим задать.

Аналогичные операции можно описать и в Макросах. Если есть необходимость вставить в код условие, по которому будет меняться формат ячейки или проводиться суммирование ячеек с определенным цветом или шрифтом, то проведя операции копирования формата с записью макроса, можно увидеть что:

Задать цвет ячейке (A1 окрашивается в Желтый):

Sub Макрос2() Range("A1").Select With Selection.Interior .Color = 65535 End With End Sub

Скопировать формат ячейки (формат A1 копируется на A3):

Sub Макрос1() Range("A1").Select Selection.Copy Range("A3").Select Selection.PasteSpecial Application.CutCopyMode = False End Sub

Теперь комбинируя формат с операторами условия можно написать вычисления (например, суммирование) по условию цвета.

Будем благодарны, если Вы нажмете +1 и/или Мне нравится внизу данной статьи или поделитесь с друзьями с помощью кнопок ниже.