Vba for 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 / 1 / 0

Регистрация: 10.12.2011

Сообщений: 7

1

Закрасить ячейки определенным цветом в зависимости от содержимого

26.10.2012, 10:09. Показов 83405. Ответов 23


Студворк — интернет-сервис помощи студентам

Здравствуйте. Я не могу разобраться в создании программы.
Мне нужно в определённом диапазоне: ячейки с текстовым символами — залить красным цветом, ячейки с цифрами — жёлтым цвет, а пустые зелёным.
Нужен код программный.
HELP ME!!!



1



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

26.10.2012, 10:25

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Fill_Color(Rg as Range)
Dim cel as Range
      For each cel in Rg
           v=cel.Value
           If isEmpty(v) then
              cel.interior.color=Qbcolor(10)
           elseIf isNumeric(v) then
              cel.interior.color=Qbcolor(14)
           else
              cel.interior.color=Qbcolor(12)
           end if
      Next
End Sub



2



1 / 1 / 0

Регистрация: 10.12.2011

Сообщений: 7

26.10.2012, 10:32

 [ТС]

3

Catstail, а можно по-подробнее? Описать каждую строчку) А то ещё сплю на ходу)



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.10.2012, 10:33

4

Условное форматирование не подойдет?

Вложения

Тип файла: xls УФ.xls (14.0 Кб, 848 просмотров)



0



1 / 1 / 0

Регистрация: 10.12.2011

Сообщений: 7

26.10.2012, 10:40

 [ТС]

5

Цитата
Сообщение от Казанский
Посмотреть сообщение

Условное форматирование не подойдет?

Извините, но нет.

Хотя мб и пойдёт, мне нужен код. Я не давно начал изучать VBA, и поэтому желательно с пояснениями.



0



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

26.10.2012, 11:57

6

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Fill_Color(Rg as Range)  ' на вход процедуре подается параметр - диапазон ячеек
Dim cel as Range                ' рабочая переменная (которая будет пробегать по диапазону)
      For each cel in Rg        ' цикл по всем ячейкам диапазона (у ячейки тип - тоже Range)
           v=cel.Value            ' берем значение очередной ячейки
           If isEmpty(v) then                    ' если ячейка пуста -
              cel.interior.color=Qbcolor(10)   ' заливаем зеленым (код 10)
           elseIf isNumeric(v) then             ' если в ячейке число -
              cel.interior.color=Qbcolor(14)   ' заливаем желтым (код 14)
           else                                       ' иначе
              cel.interior.color=Qbcolor(12)   ' заливаем желтым (код 10)
           end if
      Next
End Sub

Вот запускающая процедура:

Visual Basic
1
2
3
4
5
Sub Start()
 
    Fill_Color Range("A1:B5")
 
End Sub



1



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

26.10.2012, 12:03

7

Вот и картинка:

Изображения

 



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

26.10.2012, 13:16

8

Visual Basic
1
2
3
4
5
6
7
Sub tt()
    With Range("A1:B5")
        .SpecialCells(xlCellTypeBlanks).Interior.Color = vbGreen
        .SpecialCells(xlCellTypeConstants, 1).Interior.Color = vbYellow
        .SpecialCells(xlCellTypeConstants, 2).Interior.Color = vbRed
    End With
End Sub

Добавлено через 9 минут
Либо тоже самое короче, но непонятнее:

Visual Basic
1
2
3
4
5
6
7
Sub tt()
    With Range("A1:B5")
        .SpecialCells(4).Interior.Color = vbGreen
        .SpecialCells(2, 1).Interior.Color = vbYellow
        .SpecialCells(2, 2).Interior.Color = vbRed
    End With
End Sub



4



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

26.10.2012, 14:39

9

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Либо тоже самое короче, но непонятнее:

— а если числа и строки будут расположены по-другому, Ваш код раскрасит их правильно (в соотв. с заданием TC)?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

26.10.2012, 15:35

10

Цитата
Сообщение от Dels
Посмотреть сообщение

— Условное форматирование не подойдет?
— Извините, но нет. Хотя мб и пойдёт, мне нужен код.

Код для применения УФ к выделенному диапазону. Получен правкой кода макрорекордера:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Макрос1()
Dim a$
a = ActiveCell.Address(0, 0)
With Selection.FormatConditions
    .Delete
    .Add Type:=xlExpression, Formula1:="=ЕТЕКСТ(" & a & ")"
    .Item(1).Interior.ColorIndex = 3
    .Add Type:=xlExpression, Formula1:="=ЕЧИСЛО(" & a & ")"
    .Item(2).Interior.ColorIndex = 27
    .Add Type:=xlExpression, Formula1:="=" & a & "="""""
    .Item(3).Interior.ColorIndex = 4
End With
End Sub

В файле поста #4 было 2 условия УФ, т.е. ячейки изначально имели зеленый фон. Здесь я добавил зеленую заливку в условие УФ. Теперь ячейки, содержащие значение ошибки (это не число, не текст и не пусто) будут оставаться неокрашенными.

Добавлено через 10 минут

Цитата
Сообщение от Catstail
Посмотреть сообщение

— а если числа и строки будут расположены по-другому, Ваш код раскрасит их правильно (в соотв. с заданием TC)?

Да. С кодом Hugo121 другие проблемы:
1. Надо добавить on error resume next, иначе будет ошибка, если в диапазоне не найдется ячеек указанного типа.
2. Этот метод выбирает только ячейки с константами. Для ячеек с формулами надо дописать такие же команды

Visual Basic
1
2
.SpecialCells(xlCellTypeFormulas, 1).Interior.Color = vbYellow
.SpecialCells(xlCellTypeFormulas, 2).Interior.Color = vbRed



1



1 / 1 / 0

Регистрация: 10.12.2011

Сообщений: 7

30.10.2012, 23:17

 [ТС]

11

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

Приложен файл. Лучше всего писать коды в нём. Заранее благодарю



0



1177 / 419 / 106

Регистрация: 31.03.2012

Сообщений: 1,138

31.10.2012, 10:34

12

А что мешает поставить правильную задачу в соответствии правилами форума, в частности с п. 4.1
Если стандартный поиск по форуму не дал результатов, то даю наВодку, как искать по форуму с помощью гугла на этом или любом другом сайте. В поисковой строке вбиваем: site:сyberforum.ru(пробел)искомый_текст

Цитата
Сообщение от Dels
Посмотреть сообщение

Приложен файл. Лучше всего писать коды в нём.

Куда приложен?, где лучше писАть коды?

Не по теме:

PS. никак не смог избавиться от цитирования cyberforum.ru в качестве ссылки для указания в качестве поисковой строки, потому использовал вместо настоящего пробела — это слово в скобках



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

31.10.2012, 11:48

13

Никогда не пользуюсь поиском на этом форуме, т.к. невозможно ничего найти.
Всегда использую Гугл или Яндекс. Кстати через Гугл и Яндекс и находятся темы на этом форуме, поэтому считаю, что в названия тем нужно добавлять название языка программирования, например:
Как сделать то-то в VBA.
Просто по правилам форума нельзя указывать название языка программирования в теме, если тема находится в определённом разделе форума, связанном с этим языком программирования.



0



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

31.10.2012, 12:18

14

Цитата
Сообщение от Казанский
Посмотреть сообщение

Да. С кодом Hugo121 другие проблемы:

Да??? Я про вот этот код:

Visual Basic
1
2
3
4
5
6
7
Sub tt()
    With Range("A1:B5")
        .SpecialCells(4).Interior.Color = vbGreen
        .SpecialCells(2, 1).Interior.Color = vbYellow
        .SpecialCells(2, 2).Interior.Color = vbRed
    End With
End Sub

Хотя, действительно ДА. Я неправ…



0



1 / 1 / 0

Регистрация: 10.12.2011

Сообщений: 7

31.10.2012, 12:44

 [ТС]

15

Вот он(файл)



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

27.05.2015, 13:34

16

Catstail, пожалуйста, можно палитру цветов с кодами (если их много)
Буду очень признательна



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

27.05.2015, 14:24

17



1



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

27.05.2015, 14:24

18

Так это же иконки, а мне нужна заливка ячеек



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

27.05.2015, 14:26

19

Цитата
Сообщение от Оксана33
Посмотреть сообщение

Так это же иконки, а мне нужна заливка ячеек

смотрите лист КОДЫ левее иконок.



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

27.05.2015, 16:27

20

нашла, спасибо. открывала коды-0

Добавлено через 1 час 54 минуты
хочу у вас уточнить, та таблица с цветами не имеет отношение к вышеизложенному коду
cel.interior.color=Qbcolor(12)
так как этот код прописывается colorindex=…
а что это Qbcolor и почему Qb?
кажется я это искала https://msdn.microsoft.com/en-… s.90).aspx



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

27.05.2015, 16:27

20

Содержание

  • Условное форматирование Excel
  • Условное форматирование в VBA
  • Практическое использование условного форматирования в VBA
  • Простой пример создания условного формата для диапазона

Условное форматирование Excel позволяет определять правила, определяющие форматирование ячеек.

Например, вы можете создать правило, выделяющее ячейки, соответствующие определенным критериям. Примеры включают:

  • Числа, попадающие в определенный диапазон (например, меньше 0).
  • 10 первых пунктов списка.
  • Создание «тепловой карты».
  • «Формульные» правила практически для любого условного форматирования.

В Excel условное форматирование можно найти на ленте в разделе Главная> Стили (ALT> H> L).

Чтобы создать собственное правило, нажмите «Новое правило», и откроется новое окно:

Условное форматирование в VBA

Доступ ко всем этим функциям условного форматирования можно получить с помощью VBA.

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

Правила условного форматирования также сохраняются при сохранении рабочего листа.

Правила условного форматирования применяются конкретно к определенному листу и определенному диапазону ячеек. Если они нужны где-то еще в книге, то они также должны быть настроены на этом листе.

Практическое использование условного форматирования в VBA

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

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

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

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

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

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

Простой пример создания условного формата для диапазона

В этом примере настраивается условное форматирование для диапазона ячеек (A1: A10) на листе. Если число в диапазоне от 100 до 150, то цвет фона ячейки будет красным, в противном случае он не будет иметь цвета.

1234567891011121314 Sub ConditionalFormattingExample ()‘Определить диапазонDim MyRange As RangeУстановите MyRange = Range («A1: A10»)‘Удалить существующее условное форматирование из диапазонаMyRange.FormatConditions.Delete‘Применить условное форматированиеMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)Конец подписки

Обратите внимание, что сначала мы определяем диапазон MyRange применить условное форматирование.

Затем мы удаляем любое существующее условное форматирование для диапазона. Это хорошая идея, чтобы предотвратить добавление одного и того же правила при каждом запуске кода (конечно, это не подходит для всех обстоятельств).

Цвета представлены числовыми значениями. Для этого рекомендуется использовать обозначение RGB (красный, зеленый, синий). Для этого можно использовать стандартные цветовые константы, например. vbRed, vbBlue, но вы можете выбрать один из восьми цветов.

Доступно более 16,7 млн ​​цветов, и с помощью RGB можно получить доступ ко всем. Это намного проще, чем пытаться вспомнить, какое число соответствует какому цвету. Каждый из трех номеров цветов RGB составляет от 0 до 255.

Обратите внимание, что параметр «xlBetween» является включительным, поэтому значения ячеек 100 или 150 будут удовлетворять условию.

Многовариантное форматирование

Вы можете настроить несколько условных правил в пределах своего диапазона данных, чтобы все значения в диапазоне охватывались разными условиями:

12345678910111213141516171819 Sub MultipleConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)’Добавить второе правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlLess, _Formula1: = «= 100″MyRange.FormatConditions (2) .Interior.Color = vbBlue’Добавить третье правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlGreater, _Formula1: = «= 150″MyRange.FormatConditions (3) .Interior.Color = vbYellowКонец подписки

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

Затем добавляются еще два правила. Если значение ячейки меньше 100, то цвет ячейки синий, а если больше 150, то цвет ячейки желтый.

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

Если в этом диапазоне находятся пустые ячейки, они будут отображаться синим цветом, потому что Excel по-прежнему считает их имеющими значение меньше 100.

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

1234567891011121314151617181920212223 Sub MultipleConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlExpression, Formula1: = _»= LEN (TRIM (A1)) = 0″MyRange.FormatConditions (1) .Interior.Pattern = xlNone’Добавить второе правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (2) .Interior.Color = RGB (255, 0, 0)’Добавить третье правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlLess, _Formula1: = «= 100″MyRange.FormatConditions (3) .Interior.Color = vbBlue’Добавить четвертое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlGreater, _Formula1: = «= 150″MyRange.FormatConditions (4) .Interior.Color = RGB (0, 255, 0)Конец подписки

При этом используется тип xlExpression, а затем используется стандартная формула Excel, чтобы определить, является ли ячейка пустой, а не числовым значением.

Объект FormatConditions является частью объекта Range. Он действует так же, как коллекция с индексом, начинающимся с 1. Вы можете перебирать этот объект, используя цикл For… Next или For… Each.

Удаление правила

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

12345678910111213 Sub DeleteConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)’Удалить правилоMyRange.FormatConditions (1) .DeleteКонец подписки

Этот код создает новое правило для диапазона A1: A10, а затем удаляет его. Вы должны использовать правильный номер индекса для удаления, поэтому проверьте «Управление правилами» в интерфейсе Excel (это покажет правила в порядке выполнения), чтобы убедиться, что вы получили правильный номер индекса. Обратите внимание, что в Excel нет возможности отмены, если вы удаляете правило условного форматирования в VBA, в отличие от того, если вы делаете это через интерфейс Excel.

Изменение правила

Поскольку правила представляют собой набор объектов на основе указанного диапазона, вы можете легко вносить изменения в определенные правила с помощью VBA. Фактические свойства после добавления правила доступны только для чтения, но вы можете использовать метод Modify для их изменения. Доступны для чтения / записи такие свойства, как цвета.

123456789101112131415 Sub ChangeConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить первое правилоMyRange.FormatConditions.Add Тип: = xlCellValue, оператор: = xlBetween, _Formula1: = «= 100», Formula2: = «= 150″MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)’Изменить правилоMyRange.FormatConditions (1) .Modify xlCellValue, xlLess, «10»‘Изменить цвет правилаMyRange.FormatConditions (1) .Interior.Color = vbGreenКонец подписки

Этот код создает объект диапазона (A1: A10) и добавляет правило для чисел от 100 до 150. Если условие истинно, цвет ячейки меняется на красный.

Затем код изменяет правило на числа меньше 10. Если условие истинно, цвет ячейки теперь меняется на зеленый.

Использование градуированной цветовой схемы

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

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

1234567891011121314151617181920212223242526272829 Sub GraduatedColors ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Определить тип шкалыMyRange.FormatConditions.AddColorScale ColorScaleType: = 3’Выберите цвет для наименьшего значения в диапазонеMyRange.FormatConditions (1) .ColorScaleCriteria (1) .Type = _xlConditionValueLowestValueС MyRange.FormatConditions (1) .ColorScaleCriteria (1) .FormatColor.Color = 7039480.Конец с’Выберите цвет для средних значений в диапазонеMyRange.FormatConditions (1) .ColorScaleCriteria (2) .Type = _xlConditionValuePercentileMyRange.FormatConditions (1) .ColorScaleCriteria (2) .Value = 50’Выберите цвет для средней точки диапазонаС MyRange.FormatConditions (1) .ColorScaleCriteria (2) .FormatColor.Color = 8711167.Конец с’Выберите цвет для максимального значения в диапазонеMyRange.FormatConditions (1) .ColorScaleCriteria (3) .Type = _xlConditionValueHighestValueС MyRange.FormatConditions (1) .ColorScaleCriteria (3) .FormatColor.Color = 8109667.Конец сКонец подписки

Когда этот код запускается, он будет градуировать цвета ячеек в соответствии с возрастающими значениями в диапазоне A1: A10.

Это очень впечатляющий способ отображения данных, который наверняка привлечет внимание пользователей.

Условное форматирование значений ошибок

Когда у вас огромный объем данных, вы можете легко пропустить значение ошибки в различных таблицах. Если это будет представлено пользователю без разрешения, это может привести к большим проблемам, и пользователь потеряет уверенность в цифрах. Это использует тип правила xlExpression и функцию Excel IsError для оценки ячейки.

Вы можете создать код, чтобы все ячейки с ошибками имели красный цвет:

1234567891011 Sub ErrorConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить правило ошибкиMyRange.FormatConditions.Add Тип: = xlExpression, Formula1: = «= IsError (A1) = true»‘Установить красный цвет салона.MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)Конец подписки

Условное форматирование дат в прошлом

У вас могут быть импортированные данные там, где вы хотите выделить даты, которые были в прошлом. Примером этого может быть отчет по дебиторам, в котором вы хотите выделить любые старые даты в счетах-фактурах старше 30 дней.

Этот код использует тип правила xlExpression и функцию Excel для оценки дат.

1234567891011 Подложка DateInPastConditionalFormattingExample ()Dim MyRange As Range’Создать объект диапазона на основе столбца датУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить правило ошибки для прошлых датMyRange.FormatConditions.Add Тип: = xlExpression, Formula1: = «= Now () — A1> 30″‘Установить красный цвет салона.MyRange.FormatConditions (1) .Interior.Color = RGB (255, 0, 0)Конец подписки

Этот код принимает диапазон дат в диапазоне A1: A10 и устанавливает красный цвет ячейки для любой даты, прошедшей более 30 дней.

В формуле, используемой в условии, Now () указывает текущую дату и время. Это будет продолжать пересчитывать каждый раз, когда рабочий лист пересчитывается, поэтому форматирование будет меняться от одного дня к другому.

Использование панелей данных в условном форматировании VBA

Вы можете использовать VBA для добавления гистограмм к диапазону чисел. Это почти как мини-диаграммы, и они дают мгновенное представление о том, насколько велики числа по отношению друг к другу. Принимая значения по умолчанию для гистограмм, код очень легко писать.

123456 Sub DataBarFormattingExample ()Dim MyRange As RangeУстановите MyRange = Range («A1: A10»)MyRange.FormatConditions.DeleteMyRange.FormatConditions.AddDatabarКонец подписки

Ваши данные на листе будут выглядеть так:

Использование значков в условном форматировании VBA

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

12345678910111213141516171819202122232425 Sub IconSetsExample ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить набор иконок в объект FormatConditionsMyRange.FormatConditions.AddIconSetCondition’Установите набор иконок в стрелки — условие 1С MyRange.FormatConditions (1).IconSet = ActiveWorkbook.IconSets (xl3Arrows)Конец с’установить критерии значка для требуемого процентного значения — условие 2С MyRange.FormatConditions (1) .IconCriteria (2).Type = xlConditionValuePercent.Значение = 33.Operator = xlGreaterEqualКонец с’установить критерии значка для требуемого процентного значения — условие 3С MyRange.FormatConditions (1) .IconCriteria (3).Type = xlConditionValuePercent.Значение = 67.Operator = xlGreaterEqualКонец сКонец подписки

Это даст мгновенное представление, показывающее, высокое или низкое число. После запуска этого кода ваш рабочий лист будет выглядеть так:

Использование условного форматирования для выделения пятерки лучших

Вы можете использовать код VBA, чтобы выделить 5 первых чисел в диапазоне данных. Вы используете параметр под названием «AddTop10», но вы можете настроить номер ранга в коде на 5. Пользователь может захотеть увидеть самые высокие числа в диапазоне без предварительной сортировки данных.

1234567891011121314151617181920212223 Sub Top5Example ()Dim MyRange As Range’Создать объект диапазонаУстановите MyRange = Range («A1: A10»)’Удалить предыдущие условные форматыMyRange.FormatConditions.Delete’Добавить условие Top10MyRange.FormatConditions.AddTop10С MyRange.FormatConditions (1)’Установить параметр сверху вниз.TopBottom = xlTop10Top’Установить только топ 5.Ранг = 5Конец сС MyRange.FormatConditions (1) .Font’Установить цвет шрифта.Color = -16383844.Конец сС MyRange.FormatConditions (1) .Interior’Установить цвет фона ячейки.Color = 13551615Конец сКонец подписки

Данные на вашем листе после запуска кода будут выглядеть так:

Обратите внимание, что значение 145 появляется дважды, поэтому выделяются шесть ячеек.

Значение параметров StopIfTrue и SetFirstPriority

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

По умолчанию для этого параметра установлено значение True, но вы можете изменить его, если хотите, чтобы учитывались все остальные правила для этой ячейки:

1 MyRange. FormatConditions (1) .StopIfTrue = False

Параметр SetFirstPriority указывает, будет ли это правило условия оцениваться первым, если для этой ячейки существует несколько правил.

1 MyRange. FormatConditions (1) .SetFirstPriority

Это перемещает позицию этого правила в позицию 1 в наборе условий форматирования, а любые другие правила будут перемещены вниз с измененными номерами индексов. Будьте осторожны, если вы вносите какие-либо изменения в правила в коде, используя порядковые номера. Вам необходимо убедиться, что вы изменяете или удаляете правильное правило.

Вы можете изменить приоритет правила:

1 MyRange. FormatConditions (1) .Priority = 3

Это изменит относительное положение любых других правил в списке условного формата.

Использование условного форматирования для ссылки на другие значения ячеек

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

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

Следующий код выполнит поиск по вашему списку чисел, отыщет в соседней ячейке форматирование текста, а затем отформатирует число, как требуется:

123456789101112131415161718192021 Sub ReferToAnotherCellForConditionalFormatting ()’Создайте переменные для хранения количества строк для табличных данныхDim Row as long, N as long’Захватить количество строк в диапазоне табличных данныхRRow = ActiveSheet.UsedRange.Rows.Count’Перебрать все строки в диапазоне табличных данныхДля N = 1 в ряд’Используйте оператор Select Case для оценки форматирования на основе столбца 2Выберите Case ActiveSheet.Cells (N, 2) .Value.’Преврати цвет салона в синийКорпус «Синий»ActiveSheet.Cells (N, 1) .Interior.Color = vbBlue’Преврати цвет салона в красныйКейс «Красный»ActiveSheet.Cells (N, 1) .Interior.Color = vbRed’Преврати цвет салона в зеленыйКорпус «Зеленый»ActiveSheet.Cells (N, 1) .Interior.Color = vbGreenКонец ВыбратьСледующий NКонец подписки

После того, как этот код был запущен, ваш рабочий лист теперь будет выглядеть так:

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

Операторы, которые можно использовать в операторах условного форматирования

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

Существует ряд этих операторов, которые можно использовать в зависимости от того, как вы хотите указать критерии правила.

Имя Ценить Описание
xlBetween 1 Между. Может использоваться только при наличии двух формул.
xlEqual 3 Равный.
xlGreater 5 Больше чем.
xlGreaterEqual 7 Больше или равно.
xl Меньше 6 Меньше, чем.
xlLessEqual 8 Меньше или равно.
xlNotBetween 2 Не между. Может использоваться только при наличии двух формул.
xlNotEqual 4 Не равный.

Excel vba изменить цвет ячейки

Можно ещё и так …

Кстати, использование функции RGB в этом примере, вообще не имеет смысла, т.к. для того, чтобы создать собственный цвет, необходимо сначала изменить стандартный, например :

Примечание : создание нового цвета автоматически приведёт к изменению цвета всех ячеек текущей рабочей книге, где был использован старый цвет (в данном примере это индиго)

Range(«A1»).Interior.Color = vbRed ‘255

Попробовал но почемуто меняет и цвет бордюра
Можно не меняя его?

Столкнулся с новой ещё более проблемной задачей

Выделяю группу ячеек по горизонтали на уровн 3 ячейки
Лист1.Range(«A3:AD3»).Interior.Color = vbWhite

а мне нужно чтобы заместо 3 ячейки была переменная x то есть Ax:ADx
как это можно нормально записать?
Компилятор ругается

Можно ещё и так, однако при выборе подобного способа, желательно учитывать, что Offset учитывает об’единённые ячейки.

Поэтому, я бы порекомендовал использовать следующий вариант, который отличается от уже предложенного тем, что не вызовет ошибки в случае, если в момент выполнения этой инструкции — активным окажется лист, имя/кодовое имя которого окажется отличным от Лист1

Добавлено 06.06.08, 11:00
newland, Да, и кроме всего вышеперечисленного, Вы можете использовать ещё и такой вариант :

Защита ячеек в зависимости от цвета

Многие при работе с таблицами любят их окрашивать в различные цвета по «категориям»: красный — прогул; синий — больничный; желтый — коммандировка и т.д. и т.п. Это вполне может быть визуально наглядно и красиво, но в последствии хочется по подобной боевой раскраске осуществить с ячейками какие-то иные операции, чем просто полюбоваться. Например: подсчитать количество ячеек определенного цвета, отфильтровать по цвету и т.п. Сегодня я хочу рассказать, как можно защитить ячейки в зависимости от цвета заливки, шрифта. Один из случаев, когда закраска ячеек может быть оправдана — можно каким-то определенным цветом отметить ячейки с формулами, а потом их защитить кодом ниже.
В принципе это можно сделать руками: выделить все ячейки нужного цвета, правая кнопка мыши —Формат ячеекЗащитаЗащищаемая ячейка. После чего защитить лист. Подробнее можно прочитать в статье Как разрешить изменять только выбранные ячейки? и в статье Защита листов и ячеек в MS Excel. Но если ячеек много, да еще они разбросаны по листу, то такой метод довольно утомителен. Однако это очень просто сделать при помощи кода ниже:

‘————————————————————————————— ‘ Module : mLockCells ‘ DateTime : 15.04.2014 12:18 ‘ Author : The_Prist(Щербаков Дмитрий) ‘ WebMoney — R298726502453; Яндекс.Деньги — 41001332272872 ‘ http://www.excel-vba.ru ‘ Purpose : http://www.excel-vba.ru/chto-umeet-excel/zashhita-yacheek-v-zavisimosti-ot-cveta/ ‘————————————————————————————— Option Explicit ‘————————————————————————————— ‘ Procedure : PrCellsByInterior ‘ Purpose : Вызываем процедуру защиты ячеек в зависимости от цвета заливки ‘————————————————————————————— Sub PrCellsByInterior() Call Protect_Cells(True) End Sub ‘————————————————————————————— ‘ Procedure : PrCellsByFont ‘ Purpose : Вызываем процедуру защиты ячеек в зависимости от цвета шрифта ‘————————————————————————————— Sub PrCellsByFont() Call Protect_Cells(False) End Sub ‘————————————————————————————— ‘ Procedure : Protect_Cells ‘ Purpose : Основная процедура защиты ячеек ‘ Не учитываем ячейки с цветом, установленным при помощи Условного форматирования ‘————————————————————————————— Sub Protect_Cells(bInterior As Boolean) Dim rCell As Range, rRange As Range, rCr As Range Dim bLock As Boolean ActiveSheet.Unprotect «1234» On Error Resume Next ‘указываем диапазон ячеек, в которых изменяем защиту ячеек. ‘если выбран диапазон A1:B10 — ячейки с выбранным цветом будут защищены только в этом диапазоне. Set rRange = Application.InputBox(«Выберите диапазон ячеек для изменения атрибута Защищаемая ячейка», «www.excel-vba.ru», Type:=8) If rRange Is Nothing Then MsgBox «Неверный диапазон», vbCritical, «Ошибка»: Exit Sub ‘указываем ячейку-образец с цветом заливки/шрифта. ‘именно ячейки этого цвета будут защищены(или наоборот — только в них будет разрешен ввод) Set rCr = Application.InputBox(«Выберите ячейку с образцом цвета», «www.excel-vba.ru», Type:=8) If rRange Is Nothing Then MsgBox «Неверный диапазон», vbCritical, «Ошибка»: Exit Sub ‘определяем, защитить ячейки выбранного цвета или наоборот — рарешить ввод только в них bLock = (MsgBox(«Да — Защитить ячейки указанного цвета;» & vbNewLine & «Нет — Разрешить ввод только в ячейки указанного цвета.», vbQuestion + vbYesNo, «www.excel-vba.ru») = vbYes) ‘меняем параметры защиты всех остальных ячеек rRange.Locked = Not bLock ‘применяем параметры защиты к ячейкам For Each rCell In rRange If bInterior Then ‘по цвету заливки If rCell.Interior.Color = rCr.Interior.Color Then rCell.Locked = bLock Else ‘по цвету шрифта If rCell.Font.Color = rCr.Font.Color Then rCell.Locked = bLock End If Next rCell ‘защищаем лист, установив пароль 1234 ActiveSheet.Protect «1234» End Sub

Как использовать код в своей книге: копируем код выше, в нужной книге переходим в редактор VBA( Alt + F11 ) —InsertModule. В появившееся окно вставляем скопированный код.
Теперь выделяем все ячейки на листе, среди которых есть те, которые надо защитить -нажимаем сочетание клавиш Alt + F8 и выбираем из списка PrCellsByInterior , если надо защищать ячейки на основании цвета заливки или PrCellsByFont , если защищать надо в зависимости от цвета шрифта.
Защищать ячейки с конкретным цветом получилось, но что делать, если окрашены как раз те ячейки, защищать которые не надо? Да еще и ячейки окрашены разными цветами? Все просто: для защиты выбираем весь диапазон значимых ячеек, а в качестве ячейки-образца с заливкой указываем любую ячейку без заливки. Вот и все. Все ячейки без заливки будут защищены, а с заливкой — разрешены для ввода.

Скачать пример кода в файле:

Tips_Macro_LockCellByColor.xls (48,0 KiB, 1 116 скачиваний)

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

Статья помогла? Поделись ссылкой с друзьями!

Поиск по меткам

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум

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

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

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

Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).

Заливка ячейки цветом в VBA Excel

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

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

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

Проверено в Excel 2016.

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

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

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

Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.

Использование предопределенных констант

В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:

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

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

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

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

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

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

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

Очистка ячейки (диапазона) от заливки

Для очистки ячейки (диапазона) от заливки используется константа xlNone :

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

До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:

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

Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:

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

Номера строк активного листа от 1 до 56 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.

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

31 комментарий для “VBA Excel. Цвет ячейки (заливка, фон)”

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

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

как проверить наличие фона?

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

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

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

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

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

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

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

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

а как можно закрасить только пустые ячейки ?

Лев, закрасить пустые ячейки можно с помощью цикла For Each… Next:

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

Евгений, день добрый.
Подскажите пожалуйста, как назначить ячейке цвет через значение RGB, которое в ней записано. Или цвет другой ячейки.

Привет, Александр!
Используйте функцию InStr, чтобы найти положение разделителей, а дальше функции Left и Mid. Смотрите пример с пробелом в качестве разделителя:

Или еще проще с помощью функции Split:

Добрый день!
подскажите, пожалуйста, как можно выводить из таблицы (150 столбцов х 150 строк) адрес ячеек (списком), если они имеют заливку определенного цвета.
Заранее спасибо!

Привет, Валентина!
Используйте два цикла For…Next. Определить числовой код цвета можно с помощью выделения одной из ячеек с нужным цветом.

добрый день! подскажите, пожалуйста, как сделать, чтобы результаты выводились на отдельный лист ?
заранее спасибо!

Валентина, замените в коде имя “Лист2” на имя своего листа.

Евгений. Долгое время мучаюсь реализацией следующего сценария: в таблице Excel, которая является базой данных пациентов отделения есть столбец “G” в котором лаборанты отмечают исследования выполненные с контрастом “(С+)” и без “(C-)” и далее в столбце “N” они отмечаются количество использованного контраста “от 50мл до 200мл”; для удобства ввода и уменьшения числа непреднамеренных ошибок в столбцах реализована функция проверки данных что бы сотрудники могли выбирать уже готовые значения из списка и если ошибутся то выскочит ошибка; тем не менее сотрудники умудряются при заполнении таблицы не вносить количество использованного контраста. Вопрос заключается в том, как подкрасить ячейку для ввода количества контраста красным цветом при условии, что в ячейке столбца G фигурирует (С+) с целью акцентировать на этом внимание.
Заранее спасибо за ответ.

Добрый день, Алексей!
Примените условное форматирование:

1 Выберите столбец “N”.
2 На вкладке ленты «Главная» перейдите по ссылкам «Условное форматирование» «Создать правило».
3 В открывшемся окне выберите тип правила: «Использовать формулу для определения форматируемых ячеек».
4 В строку формул вставьте =И(ЕСЛИ(G1=»(C+)»;1);ЕСЛИ(N1=»»;1)) . Буква “C” должна быть из одной раскладки (ENG или РУС) в формуле и в ячейке.
5 Нажмите кнопку «Формат» и на вкладке «Заливка» выберите красный цвет.
6 Закройте все окна, нажимая «OK».

Если в ячейке столбца “G” будет выбрано “(С+)”, то ячейка той же строки в столбце “N” подкрасится красным цветом. После ввода значения в ячейку столбца “N”, ее цвет изменится на первоначальный.

Спасибо Евгений! Ваш пример многое прояснил (в т.ч надо читать Уокенбаха и не филонить). Мне удалось заставить работать этот сценарий не так изящно как у Вас т.е создал для каждой отдельной переменной свое правило: пр. для ГМ. (С+) –> =ЕСЛИ(И(G5066=”ГМ. (С+)”;N5066=””);”Истина”;”Ложь”)
МТ. (С+) –> =ЕСЛИ(И(G5066=”МТ. (С+)”;N5066=””);”Истина”;”Ложь”) и т.д всего 8 правил для каждого конкретного случая.
И применил их всех для столбца N:N

Ячейку G взял произвольно и в дальнейшем вообще убрал ее на лист метаданных (диапазоны переменных типа ГМ. (С+), МТ. (С+)…)
Еще раз благодарю за помощь! а есть возможность тоже самое сделать цикличным скриптом VBA ? (или я сморозил…).
Заранее спасибо за ответ.

Установка цвета ячейки при помощи vba. VBA Excel. Цвет ячейки (заливка, фон)

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

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

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

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

Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства.Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).

Заливка ячейки цветом в VBA Excel

Cells(3, 6).Interior.Color = 12659

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

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

Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.

Использование предопределенных констант

В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:

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

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

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

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

Открывается в новом окне

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

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

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

До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства.Interior.ColorIndex.

Цвет фона ячейки в 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. Переключитесь на 2-ой лист, а потом снова на 1-ый. В итоге цвет фона первой ячейки на первом листе должен стать желтоватым.

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

Защита ячеек в зависимости от цвета

Многие при работе с таблицами любят их окрашивать в различные цвета по «категориям»: красный — прогул; синий — больничный; желтый — коммандировка и т.д. и т.п. Это вполне может быть визуально наглядно и красиво, но в последствии хочется по подобной боевой раскраске осуществить с ячейками какие-то иные операции, чем просто полюбоваться. Например: подсчитать количество ячеек определенного цвета, отфильтровать по цвету и т.п. Сегодня я хочу рассказать, как можно защитить ячейки в зависимости от цвета заливки, шрифта. Один из случаев, когда закраска ячеек может быть оправдана — можно каким-то определенным цветом отметить ячейки с формулами, а потом их защитить кодом ниже.
В принципе это можно сделать руками: выделить все ячейки нужного цвета, правая кнопка мыши —Формат ячеекЗащитаЗащищаемая ячейка. После чего защитить лист. Подробнее можно прочитать в статье Как разрешить изменять только выбранные ячейки? и в статье Защита листов и ячеек в MS Excel. Но если ячеек много, да еще они разбросаны по листу, то такой метод довольно утомителен. Однако это очень просто сделать при помощи кода ниже:

‘————————————————————————————— ‘ Module : mLockCells ‘ DateTime : 15.04.2014 12:18 ‘ Author : The_Prist(Щербаков Дмитрий) ‘ WebMoney — R298726502453; Яндекс.Деньги — 41001332272872 ‘ http://www.excel-vba.ru ‘ Purpose : http://www.excel-vba.ru/chto-umeet-excel/zashhita-yacheek-v-zavisimosti-ot-cveta/ ‘————————————————————————————— Option Explicit ‘————————————————————————————— ‘ Procedure : PrCellsByInterior ‘ Purpose : Вызываем процедуру защиты ячеек в зависимости от цвета заливки ‘————————————————————————————— Sub PrCellsByInterior() Call Protect_Cells(True) End Sub ‘————————————————————————————— ‘ Procedure : PrCellsByFont ‘ Purpose : Вызываем процедуру защиты ячеек в зависимости от цвета шрифта ‘————————————————————————————— Sub PrCellsByFont() Call Protect_Cells(False) End Sub ‘————————————————————————————— ‘ Procedure : Protect_Cells ‘ Purpose : Основная процедура защиты ячеек ‘ Не учитываем ячейки с цветом, установленным при помощи Условного форматирования ‘————————————————————————————— Sub Protect_Cells(bInterior As Boolean) Dim rCell As Range, rRange As Range, rCr As Range Dim bLock As Boolean ActiveSheet.Unprotect «1234» On Error Resume Next ‘указываем диапазон ячеек, в которых изменяем защиту ячеек. ‘если выбран диапазон A1:B10 — ячейки с выбранным цветом будут защищены только в этом диапазоне. Set rRange = Application.InputBox(«Выберите диапазон ячеек для изменения атрибута Защищаемая ячейка», «www.excel-vba.ru», Type:=8) If rRange Is Nothing Then MsgBox «Неверный диапазон», vbCritical, «Ошибка»: Exit Sub ‘указываем ячейку-образец с цветом заливки/шрифта. ‘именно ячейки этого цвета будут защищены(или наоборот — только в них будет разрешен ввод) Set rCr = Application.InputBox(«Выберите ячейку с образцом цвета», «www.excel-vba.ru», Type:=8) If rRange Is Nothing Then MsgBox «Неверный диапазон», vbCritical, «Ошибка»: Exit Sub ‘определяем, защитить ячейки выбранного цвета или наоборот — рарешить ввод только в них bLock = (MsgBox(«Да — Защитить ячейки указанного цвета;» & vbNewLine & «Нет — Разрешить ввод только в ячейки указанного цвета.», vbQuestion + vbYesNo, «www.excel-vba.ru») = vbYes) ‘меняем параметры защиты всех остальных ячеек rRange.Locked = Not bLock ‘применяем параметры защиты к ячейкам For Each rCell In rRange If bInterior Then ‘по цвету заливки If rCell.Interior.Color = rCr.Interior.Color Then rCell.Locked = bLock Else ‘по цвету шрифта If rCell.Font.Color = rCr.Font.Color Then rCell.Locked = bLock End If Next rCell ‘защищаем лист, установив пароль 1234 ActiveSheet.Protect «1234» End Sub

Как использовать код в своей книге: копируем код выше, в нужной книге переходим в редактор VBA( Alt + F11 ) —InsertModule. В появившееся окно вставляем скопированный код.
Теперь выделяем все ячейки на листе, среди которых есть те, которые надо защитить -нажимаем сочетание клавиш Alt + F8 и выбираем из списка PrCellsByInterior , если надо защищать ячейки на основании цвета заливки или PrCellsByFont , если защищать надо в зависимости от цвета шрифта.
Защищать ячейки с конкретным цветом получилось, но что делать, если окрашены как раз те ячейки, защищать которые не надо? Да еще и ячейки окрашены разными цветами? Все просто: для защиты выбираем весь диапазон значимых ячеек, а в качестве ячейки-образца с заливкой указываем любую ячейку без заливки. Вот и все. Все ячейки без заливки будут защищены, а с заливкой — разрешены для ввода.

Скачать пример кода в файле:

Tips_Macro_LockCellByColor.xls (48,0 KiB, 1 116 скачиваний)

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

Статья помогла? Поделись ссылкой с друзьями!

Поиск по меткам

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум

Like this post? Please share to your friends:
  • Vba macros for excel access
  • Vba for excel для начинающих
  • Vba looping in excel
  • Vba for excel ввод даты
  • Vba lock cell excel