Меню

Vba как менять цвет ячеек



Использование макроса VBA для изменения фона ячейки — 2021

Free Excel VBA Course #5 — Writing your first VBA Macro Code

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

  • Читатель хотел сравнить текущее значение ячейки с предыдущим значением. Это означало, что предыдущее значение должно быть где-то сохранено.
  • Изменение цвета фона требует использования некоторых констант «магического числа». Они разные в Excel.
  • Код события, основанный на изменении таблицы, создаст бесконечный цикл, если у кода нет способа предотвратить это.

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

Сравнение текущего значения ячейки с предыдущим значением

Когда пользователь вводит новое значение в ячейку B2, старое значение исчезает, поэтому старое значение должно где-то храниться. Самый простой способ сделать это — сохранить значение в некоторой удаленной части рабочего листа. Я выбрал Клетки (999,999). Это может привести к неприятностям, потому что пользователь может очистить или перезаписать ячейку. Кроме того, наличие значения в этой ячейке создаст проблемы для некоторых операций, таких как поиск «последней» ячейки. Эта ячейка обычно будет «последней» ячейкой. Если что-то из этого является проблемой для вашего кода, вы можете сохранить значение в небольшом файле, который создается при загрузке электронной таблицы.

В оригинальной версии этого Quick Tip я попросил другие идеи. Я получил несколько! Я добавил их в конце.

Изменение цвета фона

Код здесь, изменяющий цвет фона ячейки, может быть изменен значением цвета Selection.Interior.ThemeColor. Это новое в Excel 2007. Microsoft добавила эту функцию во все программы Office 2007, чтобы они могли обеспечить совместимость между ними с идеей «Темы».

У Microsoft есть отличная страница, объясняющая темы Office на их сайте. Так как я не был знаком с темами Office, но знал, что они будут создавать красивый затененный фон, я сначала попытался изменить цвет фона на код:

Selection.Interior.ThemeColor = vbRed

Неправильно! Это не работает здесь. VBA выдает ошибку «индекс вне диапазона». Какой индекс? Не все цвета представлены в Темах. Чтобы получить определенный цвет, вы должны добавить его, и vbRed не оказалось доступным. Использование тем в Office может отлично работать в пользовательском интерфейсе, но это значительно усложняет кодирование макросов. В Excel 2007 все документы имеют тему. Если вы не назначаете один, то используется значение по умолчанию.

Этот код создаст сплошной красный фон:

Selection.Interior.Color = vbRed

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

С выбором. Интерьер .Pattern = xlSolid .PatternColorIndex = xlAutomatic .ThemeColor = xlThemeColorAccent1 .TintAndShade = 0.599963377788629 .PatternTintAndShade = 0Конец с

Я всегда говорю: «Если сомневаешься, пусть система сделает всю работу».

Как избежать бесконечного цикла

Это, безусловно, самая интересная проблема для решения.

Код для выполнения всего, что мы сделали до сих пор (с некоторым кодом для простоты):

Читайте также:  Что такое цвет объяснение для ребенка

Private Sub Workbook_SheetChange (…Range ( «B2»). ВыберитеIf Cells (999, 999)

Источник

Свойство Font. Color (Excel) Font.Color property (Excel)

Возвращает или задает основной цвет объекта, как показано в таблице в разделе «Примечания». Returns or sets the primary color of the object, as shown in the table in the remarks section. Используйте функцию RGB для создания значения цвета. Use the RGB function to create a color value. Для чтения и записи, Variant. Read/write Variant.

Синтаксис Syntax

Expression. Color (цвет ) expression.Color

Expression (выражение ) Выражение, возвращающее объект Font . expression An expression that returns a Font object.

Примечания Remarks

Object Object Цвет Color
Border Border Цвет границы. The color of the border.
Borders Borders Цвет всех четырех границ диапазона. The color of all four borders of a range. Если они не имеют одинаковый цвет, то Color возвращает 0 (ноль). If they’re not all the same color, Color returns 0 (zero).
Font Font Цвет шрифта. The color of the font.
Interior Interior Цвет заливки ячейки или цвет заливки графического объекта. The cell shading color or the drawing object fill color.
Tab Tab Цвет вкладки. The color of the tab.

Пример Example

В этом примере показано, как задать цвет подписей делений на оси значений в диаграммы Chart1. This example sets the color of the tick-mark labels on the value axis on Chart1.

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

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

Предопределенная константа Наименование цвета
vbBlack Черный
vbBlue Голубой
vbCyan Бирюзовый
vbGreen Зеленый
vbMagenta Пурпурный
vbRed Красный
vbWhite Белый
vbYellow Желтый
xlNone Нет заливки

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

45 комментариев для “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 ? (или я сморозил…).
Заранее спасибо за ответ.

Источник