Перейти к содержимому

VBA Excel. Цвет ячейки (заливка, фон)

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

  1. Свойство .Interior.Color объекта Range
  2. Свойство .Interior.ColorIndex объекта Range

Свойство .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 Желтый

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

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

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

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

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

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

Палитра Excel
Палитра 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. Цвет ячейки (заливка, фон): 10 комментариев

  1. Виктор

    Спасибо, наконец то разобрался во всех перипетиях заливки и цвета шрифта.

  2. Евгений (автор статьи)

    Пожалуйста, Виктор. Очень рад, что статья пригодилась.

  3. Евгений (автор статьи)

    Привет, Надежда!
    Фон у ячейки есть всегда, по умолчанию - белый. Отсутствие цветного фона можно определить, проверив, является ли цвет ячейки белым:

    Sub Primer()
      If Cells(1, 1).Interior.Color = 16777215 Then
        MsgBox "Цвет ячейки - белый"
      Else
        MsgBox "Цвет ячейки отличается от белого"
      End If
    End Sub
    
  4. Иван

    Подскажите пожалуйста, как можно посчитать количество залитых определенным цветом ячеек в таблице?

  5. Евгений (автор статьи)

    Привет, Иван!
    Посчитать ячейки с одинаковым фоном можно с помощью цикла.
    Для реализации этого примера сначала выбираем в таблице ячейку с нужным цветом заливки. Затем запускаем код, который определяет цветовой индекс фона активной ячейки, диапазон таблицы вокруг нее и общее количество ячеек с такой заливкой в таблице.

    Sub Primer()
    Dim tsvet As Long, myCell As Range, n As Long
    tsvet = ActiveCell.Interior.Color
      For Each myCell In ActiveCell.CurrentRegion
        If myCell.Interior.Color = tsvet Then
          n = n + 1
        End If
      Next
    MsgBox n
    End Sub
    
  6. Фарин

    Каким образом можно использовать не в процедуре, а именно в пользовательской функции VBA свойство .Interior.Color?
    Скажем, проверять функцией значение какой-то ячейки и подкрашивать ячейку в зависимости от этого.

  7. Евгений (автор статьи)

    Фарин, пользовательская функция VBA предназначена только для возврата вычисленного значения в ячейку, в которой она расположена. Она не позволяет внутри себя менять формат своей ячейки, а также значения и форматы других ячеек.

    Однако, с помощью пользовательской функции VBA можно вывести значения свойств ячейки, в которой она размещена:

    Function Test()
    Test = Application.ThisCell.Address
    'Test = Application.ThisCell.Row
    'Test = Application.ThisCell.Column
    'Test = Application.ThisCell.Interior.ColorIndex
    End Function
    

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

    Для подкрашивания ячейки в зависимости от ее значения используйте процедуру Sub или штатный инструмент Excel – условное форматирование.

  8. Фарин

    Евгений, спасибо за ссылку на интересный прием.

Добавить комментарий

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