Как узнать цвет ячейки excel. Заливка ячейки согласно содержимому - VBA

Заливка ячейки цветом в 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 цветов можете посмотреть .

Заливка ячейки цветом в 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

Поместите пример кода в свой программный модуль и нажмите кнопку на панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть внутри выполняемой программы. На активном листе Excel ячейки и диапазон, выбранные в коде, окрасятся в соответствующие цвета.

Есть один интересный нюанс: если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:

Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как 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.

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