Progress-servis55.ru

Новости из мира ПК
7 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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

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 цветов можете посмотреть здесь.

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

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

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

Читать еще:  Как открыть формат xml в 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».

Читать еще:  Датчик случайных чисел в excel

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

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

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

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. Но если ячеек много, да еще они разбросаны по листу, то такой метод довольно утомителен. Однако это очень просто сделать при помощи кода ниже:

Читать еще:  1с active document 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 115 скачиваний)

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

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

Ссылка на основную публикацию
Adblock
detector