Excel цвет ячейки программно

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

Палитра 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 цветов, а также о том, как добавить узор в ячейку.


As part of a VBA program, I have to set the background colors of certain cells to green, yellow or red, based on their values (basically a health monitor where green is okay, yellow is borderline and red is dangerous).

I know how to set the values of those cells, but how do I set the background color.

asked Dec 13, 2008 at 11:39

paxdiablo's user avatar

paxdiablopaxdiablo

844k233 gold badges1565 silver badges1937 bronze badges

You can use either:

ActiveCell.Interior.ColorIndex = 28

or

ActiveCell.Interior.Color = RGB(255,0,0)

answered Dec 13, 2008 at 11:43

Vinko Vrsalovic's user avatar

Vinko VrsalovicVinko Vrsalovic

328k53 gold badges332 silver badges370 bronze badges

2

This is a perfect example of where you should use the macro recorder. Turn on the recorder and set the color of the cells through the UI. Stop the recorder and review the macro. It will generate a bunch of extraneous code, but it will also show you syntax that works for what you are trying to accomplish. Strip out what you don’t need and modify (if you need to) what’s left.

answered Apr 18, 2012 at 2:34

Jon Crowell's user avatar

Jon CrowellJon Crowell

21.5k14 gold badges88 silver badges110 bronze badges

Do a quick ‘record macro’ to see the color number associated with the color you’re looking for (yellow highlight is 65535). Then erase the code and put

Sub Name()
Selection.Interior.Color = 65535 '(your number may be different depending on the above)
End Sub

answered Mar 4, 2020 at 15:07

Matt G's user avatar

1

or alternatively you could not bother coding for it and use the ‘conditional formatting’ function in Excel which will set the background colour and font colour based on cell value.

There are only two variables here so set the default to yellow and then overwrite when the value is greater than or less than your threshold values.

answered Dec 30, 2008 at 12:34

It doesn’t work if you use Function, but works if you Sub. However, you cannot call a sub from a cell using formula.

answered Mar 22, 2015 at 18:08

user4700453's user avatar

0

Содержание

  1. Описание работы функции
  2. Пример использования
  3. Свойство .Interior.Color объекта Range
  4. Заливка ячейки цветом в VBA Excel
  5. Вывод сообщений о числовых значениях цветов
  6. Форматирование диапазона
  7. Нажатие кнопки Enter
  8. Вставка символа
  9. Добавление дополнительного символа
  10. Коды различных цветов в MS Excel 2003

Описание работы функции

Функция =ЦВЕТЗАЛИВКИ(ЯЧЕЙКА) возвращает код цвета заливки выбранной ячейки. Имеет один обязательный аргумент:

  • ЯЧЕЙКА – ссылка на ячейку, для которой необходимо применить функцию.

Ниже представлен пример, демонстрирующий работу функции.

Следует обратить внимание на тот факт, что функция не пересчитывается автоматически. Это связано с тем, что изменение цвета заливки ячейки Excel не приводит к пересчету формул. Для пересчета формулы необходимо пользоваться сочетанием клавиш Ctrl+Alt+F9

Пример использования

Так как заливка ячеек значительно упрощает восприятие данных, то пользоваться ей любят практически все пользователи. Однако есть и большой минус – в стандартном функционале Excel отсутствует возможность выполнять операции на основе цвета заливки. Нельзя просуммировать ячейки определенного цвета, посчитать их количество, найти максимальное и так далее.

С помощью функции ЦВЕТЗАЛИВКИ все это становится выполнимым. Например, “протяните” данную формулу с цветом заливки в соседнем столбце и производите вычисления на основе числового кода ячейки.

Свойство .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

Вывод сообщений о числовых значениях цветов

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

Форматирование диапазона

Самый известный способ поставить прочерк в ячейке – это присвоить ей текстовый формат. Правда, этот вариант не всегда помогает.

  1. Выделяем ячейку, в которую нужно поставить прочерк. Кликаем по ней правой кнопкой мыши. В появившемся контекстном меню выбираем пункт «Формат ячейки». Можно вместо этих действий нажать на клавиатуре сочетание клавиш Ctrl+1.
  2. Запускается окно форматирования. Переходим во вкладку «Число», если оно было открыто в другой вкладке. В блоке параметров «Числовые форматы» выделяем пункт «Текстовый». Жмем на кнопку «OK».

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

Существует ещё один вариант переформатирования ячейки в текстовый вид. Для этого, находясь во вкладке «Главная», нужно кликнуть по выпадающему списку форматов данных, который расположен на ленте в блоке инструментов «Число». Открывается перечень доступных видов форматирования. В этом списке нужно просто выбрать пункт «Текстовый».

Нажатие кнопки Enter

Но данный способ не во всех случаях работает. Зачастую, даже после проведения этой процедуры при вводе символа «-» вместо нужного пользователю знака появляются все те же ссылки на другие диапазоны. Кроме того, это не всегда удобно, особенно если в таблице ячейки с прочерками чередуются с ячейками, заполненными данными. Во-первых, в этом случае вам придется форматировать каждую из них в отдельности, во-вторых, у ячеек данной таблицы будет разный формат, что тоже не всегда приемлемо. Но можно сделать и по-другому.

  1. Выделяем ячейку, в которую нужно поставить прочерк. Жмем на кнопку «Выровнять по центру», которая находится на ленте во вкладке «Главная» в группе инструментов «Выравнивание». А также кликаем по кнопке «Выровнять по середине», находящейся в том же блоке. Это нужно для того, чтобы прочерк располагался именно по центру ячейки, как и должно быть, а не слева.
  2. Набираем в ячейке с клавиатуры символ «-». После этого не делаем никаких движений мышкой, а сразу жмем на кнопку Enter, чтобы перейти на следующую строку. Если вместо этого пользователь кликнет мышкой, то в ячейке, где должен стоять прочерк, опять появится формула.

Данный метод хорош своей простотой и тем, что работает при любом виде форматирования. Но, в то же время, используя его, нужно с осторожностью относиться к редактированию содержимого ячейки, так как из-за одного неправильного действия вместо прочерка может опять отобразиться формула.

Вставка символа

Ещё один вариант написания прочерка в Эксель – это вставка символа.

  1. Выделяем ячейку, куда нужно вставить прочерк. Переходим во вкладку «Вставка». На ленте в блоке инструментов «Символы» кликаем по кнопке «Символ».
  2. Находясь во вкладке «Символы», устанавливаем в окне поля «Набор» параметр «Символы рамок». В центральной части окна ищем знак «─» и выделяем его. Затем жмем на кнопку «Вставить».

После этого прочерк отразится в выделенной ячейке.

Существует и другой вариант действий в рамках данного способа. Находясь в окне «Символ», переходим во вкладку «Специальные знаки». В открывшемся списке выделяем пункт «Длинное тире». Жмем на кнопку «Вставить». Результат будет тот же, что и в предыдущем варианте.

Данный способ хорош тем, что не нужно будет опасаться сделанного неправильного движения мышкой. Символ все равно не изменится на формулу. Кроме того, визуально прочерк поставленный данным способом выглядит лучше, чем короткий символ, набранный с клавиатуры. Главный недостаток данного варианта – это потребность выполнить сразу несколько манипуляций, что влечет за собой временные потери.

Добавление дополнительного символа

Кроме того, существует ещё один способ поставить прочерк. Правда, визуально этот вариант не для всех пользователей будет приемлемым, так как предполагает наличие в ячейке, кроме собственно знака «-», ещё одного символа.

  1. Выделяем ячейку, в которой нужно установить прочерк, и ставим в ней с клавиатуры символ «‘». Он располагается на той же кнопке, что и буква «Э» в кириллической раскладке. Затем тут же без пробела устанавливаем символ «-».
  2. Жмем на кнопку Enter или выделяем курсором с помощью мыши любую другую ячейку. При использовании данного способа это не принципиально важно. Как видим, после этих действий на листе был установлен знак прочерка, а дополнительный символ «’» заметен лишь в строке формул при выделении ячейки.

Существует целый ряд способов установить в ячейку прочерк, выбор между которыми пользователь может сделать согласно целям использования конкретного документа. Большинство людей при первой неудачной попытке поставить нужный символ пытаются сменить формат ячеек. К сожалению, это далеко не всегда срабатывает. К счастью, существуют и другие варианты выполнения данной задачи: переход на другую строку с помощью кнопки Enter, использование символов через кнопку на ленте, применение дополнительного знака «’». Каждый из этих способов имеет свои достоинства и недостатки, которые были описаны выше. Универсального варианта, который бы максимально подходил для установки прочерка в Экселе во всех возможных ситуациях, не существует.

Коды различных цветов в MS Excel 2003

Коды различных цветов при использовании конструкции типа .Interior.ColorIndex. Бесцветный код: -4142

Источники

  • https://micro-solution.ru/projects/addin_vba-excel/color_interior
  • https://vremya-ne-zhdet.ru/vba-excel/tsvet-yacheyki-zalivka-fon/
  • http://word-office.ru/kak-sdelat-chtoby-vmesto-nulya-byl-procherk-v-excel.html
  • http://aqqew.blogspot.com/2011/03/ms-excel-2003.html
 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

Здравствуйте.
    Подскажите, пожалуйста, как получить в макросе код цвета ячейки?

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#2

28.04.2021 15:03:33

попробуйте так

Код
MsgBox ActiveCell.Interior.ColorIndex

Изменено: New28.04.2021 15:03:49

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

#3

28.04.2021 15:06:27

Цитата
New написал:
попробуйте так

А если мне нужен цвет конкретной ячейки, а не активной?

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#4

28.04.2021 15:11:18

Код
MsgBox конкретнаяячейка.Interior.ColorIndex

По вопросам из тем форума, личку не читаю.

 

Marat Ta

Пользователь

Сообщений: 440
Регистрация: 11.02.2021

Ну наверное так Cells(1,1)…..

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

БМВ,
Медведь на форум, видимо, посмеяться ходит.
Marat Ta,
А если мне номер строки надо буквой i прописать для цикла For?

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#7

28.04.2021 15:14:04

Код
MsgBox Range("A10").Interior.ColorIndex

в цикле так

Код
Sub test()
Dim i As Long
    
    For i = 1 To 5
        MsgBox Cells(i, "A").Interior.ColorIndex
    Next i
End Sub

Изменено: New28.04.2021 15:15:47

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

Очень выручили! Огромнейшее спасибо.
А если я хочу в макросе назначить цвет ячейке, как будет выглядеть код?

БМВ, Хотя с Range(A1) пройдёт, наверное и Ваш вариант.

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#9

28.04.2021 15:17:07

Код
Range("A10").Interior.Color = 255 'красный

Код
Range("A10").Interior.ColorIndex = 3 'красный

Изменено: New28.04.2021 15:23:25

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#10

28.04.2021 15:19:03

Код
Cells(i, "A").Interior.ColorIndex=6
 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

Всем Огромнейшее спасибо!
А если мне надо задать в коже цвет шрифта, как тогда будет выглядеть код? И как в коде задать жирный шрифт?

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#13

28.04.2021 15:32:39

Код
 Range("A1").Font.Bold = True

P.S. Вам надо научится включать «Запись макроса», делать желаемые действия на листе, а потом смотреть записанный программой код.

Прикрепленные файлы

  • Screenshot_1.png (40.5 КБ)

Изменено: New28.04.2021 15:34:48

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

New,  Большое спасибо.
хочется же поизящнее, чем это делает макрорекордер  :)
А если мне надо задать в коже цвет шрифта, как тогда будет выглядеть код?

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#15

28.04.2021 15:36:37

Код
Range("A1").Font.Color = -16776961

Как вы думаете я пишу все эти коды, которые я показал вам в каждом своём сообщении?
Включаю запись макроса, меняю цвет ячейки, останавливаю макрос, корректирую его и выкладываю вам на форум
и так уже 5-й раз за вас

Изменено: New28.04.2021 15:38:07

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

New,
Ну просто огромнейшее человеческое Вам спасибище!

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

#17

28.04.2021 15:39:14

Цитата
New написал:
корректирую его

Ключевое слово-то вот. Боюсь, у меня пока слишком мало опыта, чтобы правильно скорректировать  :(

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Пиркафф, зато у Вас уже огромный опыт по троллингу форумов

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

в записи макроса я заменяю слово Selection на Range(«A1»). Это не сложно и для вас

Изменено: New28.04.2021 15:42:47

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

vikttur, Вы ошибаетесь. Просто я пишу код в эксель аналогичный тому, который я писал также не без помощи в Опенофис.

Изменено: Шарик28.04.2021 15:43:36

 

Шарик

Пользователь

Сообщений: 25
Регистрация: 28.04.2021

New, Ещё раз Огромнейшее Спасибо!

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#22

28.04.2021 16:22:16

Цитата
Шарик написал:
Хотя с Range(A1) пройдёт, наверное и Ваш вариант.

с этим точно не пройдет, но вроде я и не высмеивал, написал как есть.

Цитата
vikttur написал:
Пиркафф, зато у Вас уже огромный опыт по троллингу форумов

Если оно так , то почему еще жив?

По вопросам из тем форума, личку не читаю.

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#23

28.04.2021 16:32:31

Никогда не использую нелатинские буквы для идентификаторов, но: :)

Код
Sub test()
  Dim конкретнаяячейка As Range
  Set конкретнаяячейка = Range("A1")
  MsgBox конкретнаяячейка.Interior.ColorIndex
End Sub

Владимир

 

Евгений Смирнов

Пользователь

Сообщений: 539
Регистрация: 18.02.2021

#24

28.04.2021 19:03:40

Обучение прошло успешно. Ура!!!

Популярные ответы

  • Как в Эксель закрепить строки?
  • Где можно бесплатно проверить отдельный файл или весь компьютер антивирусом онлайн (online)?
  • Что такое патч (patch)?
  • Где найти шрифты, доступные по свободным лицензиям?
  • Какая максимальная длина кабеля типа «витая пара» (UTP) в локальной компьютерной сети?
  • Что такое JMS?
  • Как извлечь текст из файла в формате PDF?
  • Как узнать сетевые настройки (IP-адрес, MAC-адрес модема и IP-адрес шлюза провайдера)?
  • Какими способами можно активировать профиль maven?
  • Какие операции языка SQL реализуют набор CRUD?

Цвет фона ячейки в Microsoft Office Excel определяется свойством ColorIndex объекта Interior этой ячейки.

Например цвет ячейки A1 можно установить так: Cells(1, 1).Interior.ColorIndex = 6 (желтый)
Соответственно считать цвет ячейки можно так: ColorVar = Cells(1, 1).Interior.ColorIndex

Самая простая последовательность действий для понимания этого примера следующая.

1. Откройте Excel.

2. Нажмите Alt + F11

3. Справа введите следующий код:

    Private Sub Worksheet_Activate()
        Cells(1, 1).Interior.ColorIndex = 6
    End Sub

4. Переключитесь обратно в Excel.

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

Цвет текста задается не в каком-либо формате (RGB, CMYK и т.д.), а номером, под которым он находится в палитре Excel. Всего в палитре присутствует 55 цветов и одно значение отводиться под автоцвет. Итого при помощи свойства ColorIndex() можно задать 56 значений цвета. Эти 55 цветов находятся в коллекции Colors объекта ActiveWorkbook, так что их можно при желании изменить:

ActiveWorkbook.Colors(1) = RGB(153, 202, 60)

Cells(1, 1).Interior.ColorIndex = 1

Like this post? Please share to your friends:
  • Excel цвет ячейки при приближении даты
  • Excel цвет ячейки по умолчанию
  • Excel цвет ячейки по образцу
  • Excel цвет ячейки от значения соседней ячейки
  • Excel цвет ячейки команда