Заливка ячейки цветом в 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
Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений 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 цветов, а также о том, как добавить узор в ячейку.
Содержание
- Выделение активной ячейки, строки или столбца
- Выделение активной ячейки
- Выделение всей строки и столбца, содержащих активную ячейку
- Выделение строки и столбца, содержащих активную ячейку, в текущей области
- Об участнике
- Поддержка и обратная связь
- Выделение строки цветом vba excel
- Выделение строки цветом vba excel
Выделение активной ячейки, строки или столбца
В следующих примерах кода показаны способы выделения активной ячейки или строк и столбцов, содержащих активную ячейку. В этих примерах используется событие SelectionChange объекта Worksheet.
Пример кода предоставил: Том Уртис, Atlas Programming Management
Выделение активной ячейки
В следующем примере кода показано, как удалить цвет во всех ячейках листа, присвоив свойству ColorIndex значение 0, а затем выделить активную ячейку, присвоив свойству ColorIndex значение 8 (бирюзовый).
Выделение всей строки и столбца, содержащих активную ячейку
В следующем примере кода показано, как удалить цвет во всех ячейках листа, присвоив свойству ColorIndex значение 0, а затем выделить всю строку и столбец, содержащие активную ячейку, с помощью свойств EntireRow и EntireColumn.
Выделение строки и столбца, содержащих активную ячейку, в текущей области
В следующем примере кода показано, как удалить цвет во всех ячейках листа, присвоив свойству ColorIndex значение 0, а затем в текущей области выделить строку и столбец, содержащие активную ячейку, используя свойство CurrentRegion объекта Range.
Об участнике
Том Уртис, MVP — основатель компании Atlas Programming Management, создающей полноценные бизнес-решения для Microsoft Office и Excel в Кремниевой долине. Том обладает больше чем 25 годами опыта управления бизнесом и разработки приложений для Microsoft Office, а также является соавтором книги «Holy Macro! It’s 2,500 Excel VBA Examples».
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Выделение строки цветом vba excel
Добрый вечер, знатоки макросов!
Подскажите пожалуйста, что нужно добавить в существующий макрос, чтобы было не просто выделение активных строки/столбца, а выделение цветом?
код макроса выделения такой:
[vba]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range
If Target.Cells.Count > 1 Then Exit Sub ‘если выделено больше 1 ячейки — выходим
Application.ScreenUpdating = False
Set WorkRange = Range(«A11:BX7300») ‘адрес рабочего диапазона, в пределах которого видно выделение
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select ‘формируем крестообразный диапазон и выделяем
Target.Activate
Добрый вечер, знатоки макросов!
Подскажите пожалуйста, что нужно добавить в существующий макрос, чтобы было не просто выделение активных строки/столбца, а выделение цветом?
код макроса выделения такой:
[vba]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range
If Target.Cells.Count > 1 Then Exit Sub ‘если выделено больше 1 ячейки — выходим
Application.ScreenUpdating = False
Set WorkRange = Range(«A11:BX7300») ‘адрес рабочего диапазона, в пределах которого видно выделение
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select ‘формируем крестообразный диапазон и выделяем
Target.Activate
Сообщение Добрый вечер, знатоки макросов!
Подскажите пожалуйста, что нужно добавить в существующий макрос, чтобы было не просто выделение активных строки/столбца, а выделение цветом?
код макроса выделения такой:
[vba]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range
If Target.Cells.Count > 1 Then Exit Sub ‘если выделено больше 1 ячейки — выходим
Application.ScreenUpdating = False
Set WorkRange = Range(«A11:BX7300») ‘адрес рабочего диапазона, в пределах которого видно выделение
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select ‘формируем крестообразный диапазон и выделяем
Target.Activate
Kuzmich | Дата: Пятница, 20.09.2019, 22:35 | Сообщение № 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
You can use the following methods in VBA to highlight rows:
Method 1: Highlight Active Row
Sub HighlightActiveRow()
ActiveCell.EntireRow.Interior.Color = vbYellow
End Sub
This particular macro will highlight the currently active row.
Method 2: Highlight Specific Row
Sub HighlightSpecificRow()
Rows("4:4").Interior.Color = vbYellow
End Sub
This particular macro will highlight row 4 in the current sheet.
Method 3: Highlight Several Specific Rows
Sub HighlightSpecificRows()
Range("2:2,4:4,6:6,8:8").Interior.Color = vbYellow
End Sub
This particular macro will highlight rows 2, 4, 6, and 8 in the current sheet.
Note: To highlight all rows between 2 and 8, you can type Range(“2:8”) instead.
The following examples show how to use each method in practice.
Example 1: Highlight Active Row
Suppose we currently have cell B3 selected.
We can create the following macro to highlight each cell in the currently active row
Sub HighlightActiveRow()
ActiveCell.EntireRow.Interior.Color = vbYellow
End Sub
When we run this macro, we receive the following output:
Notice that each cell in row three is highlighted and all other rows are simply left untouched.
Example 2: Highlight Specific Row
Suppose we would like to highlight row four only.
We can create the following macro to do so:
Sub HighlightSpecificRow()
Rows("4:4").Interior.Color = vbYellow
End Sub
When we run this macro, we receive the following output:
Notice that each cell in row four is highlighted and all other rows are simply left untouched.
Example 3: Highlight Several Specific Rows
Suppose we would like to highlight rows 2, 4, 6, and 8 in the current sheet.
We can create the following macro to do so:
Sub HighlightSpecificRows()
Range("2:2,4:4,6:6,8:8").Interior.Color = vbYellow
End Sub
When we run this macro, we receive the following output:
Notice that rows 2, 4, 6, and 8 are all highlighted and all other rows are left untouched.
Note: In each example we chose to use yellow (vbYellow) as the highlight color, but you can choose a different color such as vbRed, vbGreen, vbBlue, etc.
Additional Resources
The following tutorials explain how to perform other common tasks in VBA:
VBA: How to Highlight Cells
VBA: How to Apply Conditional Formatting to Cells
VBA: How to Apply Conditional Formatting to Duplicate Values
This macro will highlight the row and column of the active cell. This will fill the row of the active cell with a solid background color and remove the color when a different cell is selected within the excel spreadsheet. Anytime you select a different cell, the new column and row will be highlighted. This is a great macro for zeroing in on a specific cell during a presentation or just when working in a really big spreadsheet. Also, if you remove the gridlines from the spreadsheet, it can be hard to determine which row or column a cell is in and this will allow you to figure that out much quicker.
This macro will overwrite any previous color in the selected cell and row. That means that if you have a worksheet with a lot of background colors and you use this macro and start selecting cells, the previous background colors will disappear.
To change the color of the highlight change the number in this line of code .ColorIndex = 6.
Where to install the macro: Worksheet
Highlight the Row of the Selected Cell
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Static rr
If rr <> "" Then
With Rows(rr).Interior
.ColorIndex = xlNone
End With
End If
r = Selection.Row
rr = r
With Rows(r).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End Sub
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Similar Content on TeachExcel
Make a UserForm in Excel
Tutorial: Let’s create a working UserForm in Excel.
This is a step-by-step tutorial that shows you e…
Excel VBA MsgBox — Message Box Macro
Tutorial: Create a pop-up message box in Excel using VBA Macros. This allows you to show a message t…
Pass Arguments to a Macro Called from a Button or Sheet in Excel
Tutorial: How to pass arguments and values to macros called from worksheets, buttons, and anything e…
Select Ranges in the Worksheet from a UserForm
Tutorial: Select a range in Excel from a UserForm and have that range input into the form so that yo…
NPER Function — Calculate Number of Periods Needed for a Set of Payments in Excel
Tutorial: How to calculate the number of periods required for an investment in order to get the desi…
Count the Occurrences of the Largest or Smallest Value in a Range
Tutorial:
How to count the occurrence of the largest or smallest value in a range; basically, how m…
How to Install the Macro
- Select and copy the text from within the grey box above.
- Open the Microsoft Excel file in which you would like the Macro to function.
- Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
Or For other ways to get there, Click Here. - On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
- If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
- Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
- You are now ready to run the macro.
Similar Content
Make a UserForm in Excel
Tutorial: Let’s create a working UserForm in Excel.
This is a step-by-step tutorial that shows you e…
Excel VBA MsgBox — Message Box Macro
Tutorial: Create a pop-up message box in Excel using VBA Macros. This allows you to show a message t…
Pass Arguments to a Macro Called from a Button or Sheet in Excel
Tutorial: How to pass arguments and values to macros called from worksheets, buttons, and anything e…
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Video
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Уважаемые форумчане. Код: Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target.EntireRow.Interior Код: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Возможны ли такие действия: Т.е. раскраска листа должна оставаться неизменной. А подсвечивание должно помогать только ориентироваться в записях и давать возможность работать в режиме копирование/вставка. |
|
Я встречал надстройку, которая выделяет строку и столбец активной ячейки четырьмя прямыми линиями, как бы продолжая границы ячейки во все стороны. |
|
vikttur Пользователь Сообщений: 47199 |
Где-то близко по смыслу — «Координатное выделение»: http://www.planetaexcel.ru/tip.php?aid=61 |
vikttur, {quote}{login=vikttur}{date=18.01.2011 12:29}{thema=}{post}Где-то близко по смыслу — «Координатное выделение»: http://www.planetaexcel.ru/tip.php?aid=61 {/post}{/quote} Здесь не работает копирование ячеек. Т.е. после копирования значения и перехода на новую ячейку в меню (Excel — Правка) Вставка не подсвечена (пропадает ее активация). Хотя в буфере скопированное значение еще есть. Вопрос в том и состоит — как оставить функцию Вставка из меню Excel? |
|
nilem Пользователь Сообщений: 837 |
Вот посмотрите такой примерчик (автор неизвестен). |
1) использованная вами конструкция для Private Sub Worksheet_SelectionChange(ByVal Target As Range) 2) Назначение условного форматирования для строк выбранных ячеек |
|
{quote}{login=Sergey11222}{date=18.01.2011 10:46}{thema=Re: }{post} Собственно, по моим догадкам, тредстартера мучает вопрос:: Какие команды VBA в модуле ????????????????????????????????????????????????????????? |
|
{quote}{post} |
|
{quote}{post} Какие команды VBA в модуле dl, |
|
Нечто похожее видел. |
|
Казанский, спасибо за отклик. Внизу на сайте есть заметка: Несколько пользователей, прежде всего пользователи с европейскими версиями Excel, сообщили, что RowLiner приводит Excel к отказу. Причина этого неизвестна. Я работал с инженерами службы поддержки Microsoft, чтобы разрешить эту проблему, но Microsoft не может определить природу или причину катастрофического отказа. А у Вас есть рекомендации по использованию этой программы? Или Ваши рекомендации? |
|
Есть еще одно небольшое ограничение: RowLiner отключит опцию Отмены. Это — ограничение, наложенное базовой конструкцией Excel, и не может быть изменено. Уважаемые форумчане, а есть ли вообще таковая возможность в Excel? Подсветить строку и скопировать/вставить из ячеки значение? |
|
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
Sergey11222, смущает вот что: Вам нужно после процедуры посдветки/копирования/вставки — вернуть в строку «старое» форматирование. А для этого нужно запомнить куда-то значение заливки (как минимум) для каждой (КАЖДОЙ) ячейки строки. Оно того стоит? |
Юрий М, |
|
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
Вы сами себе противоречите: |
Так Вы попробовали RowLiner, или пребываете в сомнениях и раздумиях? |
|
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
Ещё — смотрели ли файл, который предложил nilem? |
Не совсем так. При копировании и последующем переходе на новую ячейку формат строки восстанавливается. |
|
Казанский, спасибо за рекомендацию. |
|
{quote}{login=Sergey11222}{date=19.01.2011 10:26}{thema=Re: canpaste = могу_вставить? Уточнение вопроса…..}{post}{quote}{post} Какие команды VBA в модуле dl, ТОЖДЕСТВЕННО РАВНО ВАШЕМУ на пальцах |
|
Казанский |
|
{quote}{login=Sergey11222}{date=20.01.2011 11:52}{thema=}{post}В дополнение{/post}{/quote} режим вставки у меня работает. |
|
dl {quote}{login=dl}{date=19.01.2011 09:50}{thema=target в event процедурах}{post}1) использованная вами конструкция для Private Sub Worksheet_SelectionChange(ByVal Target As Range) 2) Назначение условного форматирования для строк выбранных ячеек Тогда не получилось сделать Вставку и сейчас не получается. Dim RSMin As Integer |
|
то что получилось у меня вместо вашего кода ‘удаление всего условного форматирования If Target.Cells.Count <= 2500 Then Else |
|
на рисунке показано что у меня (правда это 2010) |
|
Нет в 2003 не работает. |
|
dl Гость |
#30 20.01.2011 17:13:23 у меня всё работает |