Строку в цвет excel vba

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


 

alcnwndrlnd

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

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

#1

08.12.2015 10:03:45

Всем привет!
Помогите, пожалуйста, с макросом для Excel, уже облазила все, что только можно
Нужно сделать так, чтобы макрос «пробегал» значения в определенном столбце и раскрашивал строки в соответствии с НЕСКОЛЬКИМИ условиями. Пока получается проверять только одно и запускать макрос приходится по нескольку раз, потому что останавливается. Код под спойлером:

Скрытый текст

Уж больно здесь красиво, жди беды..

 

vdovin_sg

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

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

А почему бы не воспользоваться условным форматированием? Можно выделить нужный столбец и задать в разделе условное форматирование нужные условия. Сколько необходимо!

 

vdovin_sg, хотелось бы макросом как-то автоматизировать процесс, нажатием одной кнопки, так сказать, а условное форматирование каждый раз добавлять.

Уж больно здесь красиво, жди беды..

 

vdovin_sg

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

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

alcnwndrlnd, Ясно, в макросах я не силен, сам только учусь.

 

vdovin_sg, вот и я тоже, пока что :) но все еще впереди

Уж больно здесь красиво, жди беды..

 

vdovin_sg

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

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

#6

08.12.2015 10:29:55

а если попробовать использовать цикл for a=1 to 500

Код
Sub Start()
Fill_Color Range("A1:A500")
End Sub

Sub Fill_Color(Rg As Range)
Dim cel As Range
For Each cel In Rg
a = cel.Value
[B]For a = 1 To 500[/B]
If a = 1 Then
cel.EntireRow.Interior.Color = QBColor(5)
ElseIf a = 2 Then
cel.EntireRow.Interior.Color = QBColor(3)
End If
[B]Next a[/B]
Next
End Sub
 

vdovin_sg, идея хорошая, а что делать с проверкой нескольких значений? в разных else if — ах расписать только если

Уж больно здесь красиво, жди беды..

 

Kuzmich

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

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

#8

08.12.2015 10:52:25

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = 1 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = 2 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
Next
End Sub
 

k61

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

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

#9

08.12.2015 10:56:17

Код
Sub Fill_Color_2()
Dim cel As Range
Cells.Interior.ColorIndex = xlNone
For Each cel In Columns(1).SpecialCells(2, 1)
If cel = 1 Or cel = 2 Then cel.EntireRow.Interior.Color = QBColor(7 - cel.Value * 2)
Next
End Sub
 

Kuzmich, k61, тааак, спасибо, сейчас поразбираюсь.. в принципе реально вставить вместо «1» и «2» текстовые значения?

Уж больно здесь красиво, жди беды..

 

Kuzmich

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

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

 

alcnwndrlnd

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

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

#12

08.12.2015 11:27:25

Kuzmich, в таком случае, подскажите, пожалуйста, синтаксис. Как-то надо сослаться на текстовое значение? Ох уж этот ВБА, с++ и то легче.. голова уже кругом

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = "мама" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = "мыла" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
 If Cells(i, 1) = "раму" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6

Next
End Sub

Изменено: alcnwndrlnd08.12.2015 11:27:44

Уж больно здесь красиво, жди беды..

 

Kuzmich

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

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

А что не получается. Строку с «раму» видимо надо посветить другим цветом (6 заменить)

 

Kuzmich, да, проблема была именно в этом, макрос просто не выполнялся :) что ж, всем большое спасибо и огромный «+» в карму! vdovin_sg, k61, Kuzmich

Уж больно здесь красиво, жди беды..

 

alcnwndrlnd

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

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

#15

08.12.2015 11:47:50

Kuzmich, и, наверное, последний вопрос.. Возможно, глупый: как проверить несколько значений и раскрасить одним цветом:

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = "мама" Or "мыла" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = "абракадабра" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
 If Cells(i, 1) = "раму" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 8
Next
End Sub

Изменено: alcnwndrlnd08.12.2015 11:48:18

Уж больно здесь красиво, жди беды..

 

Kuzmich

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

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

#16

08.12.2015 11:51:05

Код
If Cells(i, 1) = "мама" Or Cells(i, 1) ="мыла" Then
 

Kuzmich, «а ларчик просто открывался»  :D спасибо еще раз, огромное

Уж больно здесь красиво, жди беды..

 

alcnwndrlnd

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

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

#18

08.12.2015 12:08:28

Kuzmich, потревожу Вас еще раз. Не получается добавить просмотр следующего интересующего меня столбца, после прохождения первого

Код
Range("A1:A500", "B1:B500").EntireRow.Interior.ColorIndex = -4142

так?

Уж больно здесь красиво, жди беды..

 

Михаил Лебедев

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

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

#19

08.12.2015 12:22:39

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

Код
Sub Fill_Color()
Dim rng As Range
Dim rng2 As Range
Set rng = Range("A1:B500")
rng.EntireRow.Interior.ColorIndex = -4142
For Each rng2 In rng
 If rng2 = "мама" Or "мыла" Then rng2.EntireRow.Interior.ColorIndex = 4
 If rng2 = "абракадабра" Then rng2.EntireRow.Interior.ColorIndex = 6
 If rng2 = "раму" Then rng2.EntireRow.Interior.ColorIndex = 8
Next
Set rng = Nothing
End Sub

Изменено: Михаил Лебедев10.12.2015 11:57:00
(исправил диапазон (спасибо Kuzmich-у))

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Уж больно здесь красиво, жди беды..

 

Kuzmich

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

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

#21

08.12.2015 12:42:39

Код
Range("A1:B500").EntireRow.Interior.ColorIndex = -4142
 

Kuzmich, пробовала, второй столбец не красит, но и ошибку не выдает

Уж больно здесь красиво, жди беды..

 

Kuzmich

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

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

#23

08.12.2015 12:46:23

Код
Range("A1:A500,B1:B500")
 

Файл выложите. И/или поменяйте строку в моем коде, как предложил «кузмич» (я в своем предыдущем — поменял)

Изменено: Михаил Лебедев08.12.2015 13:04:02

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Kuzmich

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

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

#25

08.12.2015 13:04:42

Цитата
второй столбец не красит

Какой столбец? Когда подсвечивается вся строка.
Или не красит по условию второго столбца?

 

Kuzmich

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

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

Cells(i,2) — это будет второй столбец

 

Михаил Лебедев

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

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

#27

08.12.2015 13:20:58

Код
Sub Fill_Color()
    Dim rng As Range
    Dim rng2 As Range
    Set rng = Range("A1:B10")
    rng.EntireRow.Interior.ColorIndex = -4142
    For Each rng2 In rng
        If rng2.Value2 = "мама" Or rng2.Value2 = "мыла" Then Cells(rng2.Row, 1).EntireRow.Interior.ColorIndex = 4
        If rng2.Value2 = "абракадабра" Then Cells(rng2.Row, 1).EntireRow.Interior.ColorIndex = 6
        If rng2.Value2 = "раму" Then Cells(rng2.Row, 1).EntireRow.Interior.ColorIndex = 8
    Next
    Set rng = Nothing
End Sub

Изменено: Михаил Лебедев08.12.2015 13:21:20

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Юрий М

Модератор

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

Контакты см. в профиле

alcnwndrlnd и vdovin_sg, код следует оформлять тегом — ищите такую кнопку (см. скрин).
alcnwndrlnd,  поменяйте, пожалуйста, в своём профиле отображаемое имя — сейчас оно с нарушением Правил. Спасибо!

 

alcnwndrlnd

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

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

#29

08.12.2015 13:46:53

Цитата
Kuzmich написал:
Какой столбец? Когда подсвечивается вся строка.
Или не красит по условию второго столбца?

Да, по условию. Сейчас попробую с исправлениями

Уж больно здесь красиво, жди беды..

 

alcnwndrlnd

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

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

#30

08.12.2015 14:39:05

Михаил Лебедев, спасибо! Kuzmich, и снова, еще раз спасибо! во всем разобралась, все работает, как надо

Код
Sub Fill_Color()
Dim i As Long
Range("A1:A500, B1:B500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 5000
 If Cells(i, 1) = "а" Or Cells(i, 1) = б" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 2) = "в" Or Cells(i, 2) = "г" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 5
 If Cells(i, 1) = "д" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
 If Cells(i, 1) = "е" Then Cells(i, 1).EntireRow.Interior.ColorIndex = 8
 
Next
End Sub

Изменено: alcnwndrlnd08.12.2015 14:39:41

Уж больно здесь красиво, жди беды..

I have a Userform that populates a ListBox with data from a table. What I would like it to do is if there is any missing data, make that row red.

enter image description here

This is the code for the Userform but I don’t know where to start for the row colours.

Dim iRow As Long

DeclareVars

iRow = Backtable.ListRows.Count + 1 ' idetifying the last row. + 1 added due to the form not shopwing the last line in table

With frmform

    .txtID.value = ""
    .txtArea.value = ""
    .txtSupplier.value = ""
    .txtItemDetails.value = ""
    .txtContactDetails.value = ""
    .txtConRenewalDate.value = "dd/mm/yyyy"
    .txtFreq.value = "e.g. 4 for 4 times per year"
    .txtNextService.value = "dd/mm/yyyy"
    .txtRisk.value = "'Y' or 'N'"
    
    '--------------------------------
    
    'Default Color
    .txtID.BackColor = vbWhite
    .txtArea.BackColor = vbWhite
    .txtSupplier.BackColor = vbWhite
    .txtItemDetails.BackColor = vbWhite
    .txtContactDetails.BackColor = vbWhite
    .txtConRenewalDate.BackColor = vbWhite
    .txtFreq.BackColor = vbWhite
    .txtNextService.BackColor = vbWhite
    .txtRisk.BackColor = vbWhite
    
    '-----------------------------------------------
    
    .lstDatabase.ColumnCount = Backtable.ListColumns.Count
    .lstDatabase.ColumnHeads = True
    
    .lstDatabase.ColumnWidths = "30,60,75,55,60,45,30,70,70"
    
    If iRow > 1 Then
        .lstDatabase.RowSource = "Database!A2:I" & iRow
    Else
        .lstDatabase.RowSource = "Database!A2:I2"
    End If
    
    '-----------------------------------------------
    
End With

Содержание

  1. Выделение активной ячейки, строки или столбца
  2. Выделение активной ячейки
  3. Выделение всей строки и столбца, содержащих активную ячейку
  4. Выделение строки и столбца, содержащих активную ячейку, в текущей области
  5. Об участнике
  6. Поддержка и обратная связь
  7. Выделение строки цветом vba excel
  8. Выделение строки цветом 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
grh1 Дата: Суббота, 21.09.2019, 08:05 | Сообщение № 3

Kuzmich, спасибо, но немного не то. Так я тоже делал, но цвет накладывается на выделение и получается искажение цвета — хочу желтый, получаю грязно-оранжевый.

Вот код Н. Павлова, который:
1. не убивает ранее установленное цветовое форматирование на листе;
2. цвет выделения активной строки/столбца является оригинальным.
(выставил светло-зеленый цвет, он и выделяет этим цветом)

Но как сделать в этом коде, чтобы он постоянно был включен на листе, без кнопки ДОБАВИТЬ ВЫДЕЛЕНИЕ или вызова макроса на включение.

Kuzmich, спасибо, но немного не то. Так я тоже делал, но цвет накладывается на выделение и получается искажение цвета — хочу желтый, получаю грязно-оранжевый.

Вот код Н. Павлова, который:
1. не убивает ранее установленное цветовое форматирование на листе;
2. цвет выделения активной строки/столбца является оригинальным.
(выставил светло-зеленый цвет, он и выделяет этим цветом)

Но как сделать в этом коде, чтобы он постоянно был включен на листе, без кнопки ДОБАВИТЬ ВЫДЕЛЕНИЕ или вызова макроса на включение. grh1

Сообщение Kuzmich, спасибо, но немного не то. Так я тоже делал, но цвет накладывается на выделение и получается искажение цвета — хочу желтый, получаю грязно-оранжевый.

Вот код Н. Павлова, который:
1. не убивает ранее установленное цветовое форматирование на листе;
2. цвет выделения активной строки/столбца является оригинальным.
(выставил светло-зеленый цвет, он и выделяет этим цветом)

Но как сделать в этом коде, чтобы он постоянно был включен на листе, без кнопки ДОБАВИТЬ ВЫДЕЛЕНИЕ или вызова макроса на включение. Автор — grh1
Дата добавления — 21.09.2019 в 08:05

gling Дата: Суббота, 21.09.2019, 08:32 | Сообщение № 4
grh1 Дата: Суббота, 21.09.2019, 09:22 | Сообщение № 5
Kuzmich Дата: Суббота, 21.09.2019, 09:41 | Сообщение № 6
grh1 Дата: Суббота, 21.09.2019, 10:03 | Сообщение № 7
grh1 Дата: Суббота, 21.09.2019, 10:24 | Сообщение № 8
Pelena Дата: Суббота, 21.09.2019, 11:35 | Сообщение № 9
«Черт возьми, Холмс! Но как. »
Ю-money 41001765434816

Ответить

grh1 Дата: Суббота, 21.09.2019, 12:47 | Сообщение № 10

Да, конечно.
Код на выделение активной строки/столбца Н. Павлова, убрано вкл/выкл макроса — работает постоянно
[vba]

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range, CrossRange As Range
Set WorkRange = Range(«A11:CC7300»)
If Target.Count > 1 Then Exit Sub

Application.ScreenUpdating = False
If Not Intersect(Target, WorkRange) Is Nothing Then
Set CrossRange = Intersect(WorkRange, Target.EntireRow) ‘это окрас строк+столбец Set CrossRange = Intersect(WorkRange, Union(Target.EntireRow, Target.EntireColumn))
WorkRange.FormatConditions.Delete ‘эта строка делает так, чтобы выделение не оставалось
CrossRange.FormatConditions.Add Type:=xlExpression, Formula1:=»=1″
CrossRange.FormatConditions(1).Interior.ColorIndex = 35
Target.FormatConditions.Delete ‘эта строка убирает заливку в активной ЯЧЕЙКЕ (она становится белой)
End If
End Sub

Не убивает форматирование на листе

Да, конечно.
Код на выделение активной строки/столбца Н. Павлова, убрано вкл/выкл макроса — работает постоянно
[vba]

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range, CrossRange As Range
Set WorkRange = Range(«A11:CC7300»)
If Target.Count > 1 Then Exit Sub

Application.ScreenUpdating = False
If Not Intersect(Target, WorkRange) Is Nothing Then
Set CrossRange = Intersect(WorkRange, Target.EntireRow) ‘это окрас строк+столбец Set CrossRange = Intersect(WorkRange, Union(Target.EntireRow, Target.EntireColumn))
WorkRange.FormatConditions.Delete ‘эта строка делает так, чтобы выделение не оставалось
CrossRange.FormatConditions.Add Type:=xlExpression, Formula1:=»=1″
CrossRange.FormatConditions(1).Interior.ColorIndex = 35
Target.FormatConditions.Delete ‘эта строка убирает заливку в активной ЯЧЕЙКЕ (она становится белой)
End If
End Sub

Не убивает форматирование на листе grh1

Да, конечно.
Код на выделение активной строки/столбца Н. Павлова, убрано вкл/выкл макроса — работает постоянно
[vba]

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range, CrossRange As Range
Set WorkRange = Range(«A11:CC7300»)
If Target.Count > 1 Then Exit Sub

Application.ScreenUpdating = False
If Not Intersect(Target, WorkRange) Is Nothing Then
Set CrossRange = Intersect(WorkRange, Target.EntireRow) ‘это окрас строк+столбец Set CrossRange = Intersect(WorkRange, Union(Target.EntireRow, Target.EntireColumn))
WorkRange.FormatConditions.Delete ‘эта строка делает так, чтобы выделение не оставалось
CrossRange.FormatConditions.Add Type:=xlExpression, Formula1:=»=1″
CrossRange.FormatConditions(1).Interior.ColorIndex = 35
Target.FormatConditions.Delete ‘эта строка убирает заливку в активной ЯЧЕЙКЕ (она становится белой)
End If
End Sub

Не убивает форматирование на листе Автор — grh1
Дата добавления — 21.09.2019 в 12:47

Источник

Выделение строки цветом vba excel

Здравствуйте, нашла макрос для подсветки активной строки определенным цветом, проблема в том, что подсвечивается вся строка от А до горизонта и вторая проблема макроса в том, что если нажать на столбец, то всё дико зависает.
Прошу помочь изменить макрос таким образом, чтобы при нажатии на ячейку в строке подсвечивались ячейки с A-O и влияла только на строку, а не на столбцы.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
For Each rn In rn_Prev
If rn.Interior.ColorIndex <> xlColorIndexNone Then _
rn.EntireRow.Interior.ColorIndex = xlColorIndexNone
Next
End If

For Each rn In Target
If rn.Interior.ColorIndex <> 37 Then rn.EntireRow.Interior.ColorIndex = 37
Next

Set rn_Prev = Target

Здравствуйте, нашла макрос для подсветки активной строки определенным цветом, проблема в том, что подсвечивается вся строка от А до горизонта и вторая проблема макроса в том, что если нажать на столбец, то всё дико зависает.
Прошу помочь изменить макрос таким образом, чтобы при нажатии на ячейку в строке подсвечивались ячейки с A-O и влияла только на строку, а не на столбцы.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
For Each rn In rn_Prev
If rn.Interior.ColorIndex <> xlColorIndexNone Then _
rn.EntireRow.Interior.ColorIndex = xlColorIndexNone
Next
End If

For Each rn In Target
If rn.Interior.ColorIndex <> 37 Then rn.EntireRow.Interior.ColorIndex = 37
Next

Set rn_Prev = Target

Сообщение Здравствуйте, нашла макрос для подсветки активной строки определенным цветом, проблема в том, что подсвечивается вся строка от А до горизонта и вторая проблема макроса в том, что если нажать на столбец, то всё дико зависает.
Прошу помочь изменить макрос таким образом, чтобы при нажатии на ячейку в строке подсвечивались ячейки с A-O и влияла только на строку, а не на столбцы.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
For Each rn In rn_Prev
If rn.Interior.ColorIndex <> xlColorIndexNone Then _
rn.EntireRow.Interior.ColorIndex = xlColorIndexNone
Next
End If

For Each rn In Target
If rn.Interior.ColorIndex <> 37 Then rn.EntireRow.Interior.ColorIndex = 37
Next

Set rn_Prev = Target

Manyasha Дата: Понедельник, 06.02.2017, 13:15 | Сообщение № 2

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘Если выделено больше 1-й строки, то выходим из макроса
If Target.Rows.Count > 1 Then Exit Sub
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
For Each rn In rn_Prev
If rn.Interior.ColorIndex <> xlColorIndexNone Then _
rn.EntireRow.Interior.ColorIndex = xlColorIndexNone
Next
End If

For Each rn In Target
‘вместо всей строки (rn.EntireRow) закрашиваем диапазон а:о
If rn.Interior.ColorIndex <> 37 Then Range(«a» & rn.Row & «:o» & rn.Row).Interior.ColorIndex = 37
Next

Set rn_Prev = Target

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘Если выделено больше 1-й строки, то выходим из макроса
If Target.Rows.Count > 1 Then Exit Sub
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
For Each rn In rn_Prev
If rn.Interior.ColorIndex <> xlColorIndexNone Then _
rn.EntireRow.Interior.ColorIndex = xlColorIndexNone
Next
End If

For Each rn In Target
‘вместо всей строки (rn.EntireRow) закрашиваем диапазон а:о
If rn.Interior.ColorIndex <> 37 Then Range(«a» & rn.Row & «:o» & rn.Row).Interior.ColorIndex = 37
Next

Set rn_Prev = Target

ЯД: 410013299366744 WM: R193491431804

Ответить

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘Если выделено больше 1-й строки, то выходим из макроса
If Target.Rows.Count > 1 Then Exit Sub
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
For Each rn In rn_Prev
If rn.Interior.ColorIndex <> xlColorIndexNone Then _
rn.EntireRow.Interior.ColorIndex = xlColorIndexNone
Next
End If

For Each rn In Target
‘вместо всей строки (rn.EntireRow) закрашиваем диапазон а:о
If rn.Interior.ColorIndex <> 37 Then Range(«a» & rn.Row & «:o» & rn.Row).Interior.ColorIndex = 37
Next

Set rn_Prev = Target

Liana88 Дата: Понедельник, 06.02.2017, 13:20 | Сообщение № 3
Manyasha Дата: Понедельник, 06.02.2017, 13:39 | Сообщение № 4

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘Если выделено больше 1-й строки, то выходим из макроса
If Target.Rows.Count > 1 Then Exit Sub
‘Если выделяем столбец за пределами А:О, закрашивать строку нужно?
‘Если нет, то расскомментировать следующую строчку
‘If Target.Column > 15 Then Exit Sub
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
Range(«a» & rn_Prev.Row & «:o» & rn_Prev.Row).Interior.ColorIndex = xlColorIndexNone
End If
‘вместо всей строки (rn.EntireRow) закрашиваем диапазон а:о
Range(«a» & Target.Row & «:o» & Target.Row).Interior.ColorIndex = 37
Set rn_Prev = Target

Код немного сократила, т.к. циклы не нужны, если мы красим только по одной строке.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘Если выделено больше 1-й строки, то выходим из макроса
If Target.Rows.Count > 1 Then Exit Sub
‘Если выделяем столбец за пределами А:О, закрашивать строку нужно?
‘Если нет, то расскомментировать следующую строчку
‘If Target.Column > 15 Then Exit Sub
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
Range(«a» & rn_Prev.Row & «:o» & rn_Prev.Row).Interior.ColorIndex = xlColorIndexNone
End If
‘вместо всей строки (rn.EntireRow) закрашиваем диапазон а:о
Range(«a» & Target.Row & «:o» & Target.Row).Interior.ColorIndex = 37
Set rn_Prev = Target

Код немного сократила, т.к. циклы не нужны, если мы красим только по одной строке. Manyasha

ЯД: 410013299366744 WM: R193491431804

Ответить

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Worksheet_SelectionChange(ByVal Target As Range)
‘Если выделено больше 1-й строки, то выходим из макроса
If Target.Rows.Count > 1 Then Exit Sub
‘Если выделяем столбец за пределами А:О, закрашивать строку нужно?
‘Если нет, то расскомментировать следующую строчку
‘If Target.Column > 15 Then Exit Sub
Static rn_Prev As Range
Dim rn As Range

If rn_Prev Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
Else
Range(«a» & rn_Prev.Row & «:o» & rn_Prev.Row).Interior.ColorIndex = xlColorIndexNone
End If
‘вместо всей строки (rn.EntireRow) закрашиваем диапазон а:о
Range(«a» & Target.Row & «:o» & Target.Row).Interior.ColorIndex = 37
Set rn_Prev = Target

Код немного сократила, т.к. циклы не нужны, если мы красим только по одной строке. Автор — Manyasha
Дата добавления — 06.02.2017 в 13:39

Liana88 Дата: Понедельник, 06.02.2017, 13:52 | Сообщение № 5
exzor Дата: Среда, 07.08.2019, 17:34 | Сообщение № 6
китин Дата: Четверг, 08.08.2019, 08:25 | Сообщение № 7
Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

Ответить

exzor Дата: Среда, 21.08.2019, 17:39 | Сообщение № 8

ну вот пример первый пока макрос не сработал а второй когда включился

ну вот пример первый пока макрос не сработал а второй когда включился

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

Автор — exzor
Дата добавления — 21.08.2019 в 17:39

китин Дата: Четверг, 22.08.2019, 08:48 | Сообщение № 9

— Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума

— Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума китин

Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

Сообщение exzor, — Прочитайте Правила форума

— Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума Автор — китин
Дата добавления — 22.08.2019 в 08:48

exzor Дата: Среда, 25.09.2019, 16:34 | Сообщение № 10

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

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

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

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

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

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

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

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

так вот я пытаюсь написать макрос который подсветит всю строку по выделенной ячейке, но не будет снимать уже закрашенные области Автор — exzor
Дата добавления — 25.09.2019 в 16:34

Источник

Adblock
detector

alcnwndrlnd

0 / 0 / 0

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

Сообщений: 12

1

Изменить цвет строки в соответствии с значением в ячейке

08.12.2015, 09:37. Показов 3975. Ответов 2

Метки нет (Все метки)


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

Всем привет!
Помогите, пожалуйста, с макросом для Excel, уже облазила все, что только можно
Нужно сделать так, чтобы макрос «пробегал» значения в определенном столбце и раскрашивал строки в соответствии с НЕСКОЛЬКИМИ условиями. Пока получается проверять только одно и запускать макрос приходится по нескольку раз, потому что останавливается

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Start()
 
    Fill_Color Range("A1:A500")
 
End Sub
 
Sub Fill_Color(Rg As Range)
Dim cel As Range
      For Each cel In Rg
           a = cel.Value
           If a = 1 Then                   '
              cel.EntireRow.Interior.Color = QBColor(5)
           ElseIf a = 2 Then
              cel.EntireRow.Interior.Color = QBColor(3)
          End If           
      
Next
End Sub



0



15136 / 6410 / 1730

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

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

08.12.2015, 11:33

2

alcnwndrlnd, почему не условное форматирование?
Вообще-то код рабочий.



1



alcnwndrlnd

0 / 0 / 0

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

Сообщений: 12

08.12.2015, 11:42

 [ТС]

3

Казанский, для большого количества значений код слишком громоздкий, и останавливается на полпути. Условное форматирование не подходит из-за того, что каждый раз задавать его придется. Спасибо ребятам с форума planetexcel, в частности Kuzmich, k61, vdovin_sg. Код Kuzmich:

Visual Basic
1
2
3
4
5
6
7
8
Sub Fill_Color()
Dim i As Long
Range("A1:A500").EntireRow.Interior.ColorIndex = -4142
For i = 1 To 500
 If Cells(i, 1) = 1 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 4
 If Cells(i, 1) = 2 Then Cells(i, 1).EntireRow.Interior.ColorIndex = 6
Next
End Sub

Тему можно считать закрытой.



0



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

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

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. 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.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  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.
  9. 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

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

В данном примере описаны макросы для автоматического форматирования или спроса формата для ячеек таблиц Excel средствами VBA.

VBA-макрос: заливка, шрифт, линии границ, ширина столбцов и высота строк

В процессе запыления данных сотрудниками отдела на некоторых листах были изменены форматы ячеек:

запыления планов работ.

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

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

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

Чтобы написать свой код макроса откройте специальный VBA-редактор в Excel: «РАЗРАБОТЧИК»-«Код»-«Visual Basic» или нажмите комбинацию клавиш ALT+F11:

Код Visual Basic.

В редакторе создайте новый модуль выбрав инструмент «Insert»-«Module» и введите в него такой VBA-код макроса:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub

VBA-код макроса.

Теперь если нам нужно сбросить форматирование таблицы на исходный формат отображения ее данных, выделите диапазон ячеек A1:E20 и запустите макрос: «РАЗРАБОЧТИК»-«Код»-«Макросы»-«SbrosFormat»-«Выполнить». Результат работы макроса изображен ниже на рисунке:

сбросить форматирование таблицы на исходный формат.

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



Описание VBA-макроса для формата ячеек таблицы Excel

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

  1. Текст в значениях ячеек выравнивается по центру горизонтально и вертикально.
  2. Включен построчный перенос текста.
  3. Все границы ячеек получают черную обычной толщины непрерывную линию с черным цветом.
  4. Сброс цвета шрифта на авто.
  5. Удаляется любая заливка ячеек.
  6. Ширина столбцов автоматически настраивается под текст в ячейках.
  7. Автоматически настроить высоту строк по содержимому ячеек.

Модификация исходного кода макроса для форматирования

Если необходимо сделать так чтобы текст выравнивался не по центру относительно горизонтали, а по правую сторону ячейки, тогда измените константу xlHAlignCenter на xlHAlignRight. Она находиться в свойстве .HorizontalAlignment. Сделайте это следующим образом:

.HorizontalAlignment = xlHAlignRight.

Таким же образом можно выровнять текст по левую сторону изменив значение константы на xlHAlignLeft. Или можно выровнять положение текста по ширине ячейки используя константу xlHAlignJustify.

Чтобы макрос выравнивал текст в ячейках по вертикали к низу, измените строку кода, отвечающую за данную настройку форматирования. Измените константу, которая присваивается к свойству VerticalAlignment в следующий способ:

Если хотите выровнять текс к верху ячейки, тогда воспользуйтесь константой xlHAlignTop.

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

.Borders.LineStyle = xlDash

.Borders.Color = vbBlue

.Borders.Weight = xlMedium

Описание настройки форматирования для линий границ ячеек. Мы будем получать разные дополнительные типы линий границ если для свойства LineStyle присваивать такие константы:

  • xlDoshDot – применяется для рисования пунктирных линий в границах ячеек;
  • xlDouble – рисует двойную линию;
  • xlHairLine – рисует тонкую линию;
  • xlThick – для рисования очень толстой линии.

Для настройки цвета линий Excel предлагает всего 8 констант для определенных цветов. Константы для настройки цвета линий границ для свойства Color:

  • vbBlack – черный;
  • vbWhite – белый;
  • vbRed – красный;
  • vbGreen –зеленый;
  • vbBlue – синий;
  • vbYellow – желтый;
  • vbMagenta – алый;
  • vbCyan – голубой.

Но при необходимости присвоить линиям границ другие цвета можно вместо константы для свойства Color записать функцию RGB(). Достаточно лишь в аргументе этой функции указать код цвета по шкале от 0 и до 255.

Если нужно применить толстую линию только для границ выделенного диапазона, тогда перед инструкцией End With добавьте следующую строку кода:

.BorderAround xlContinuous, xlMedium, vbBlack

Описание: В первом аргументе для метода BorderAround можно записать также другой стиль линии. Во втором – толщину линии, а в третьем – цвет. Константы, которые можно присвоить в качестве значений для этих аргументов можно использовать те же, которые мы использовали для свойств: LineStyle, Weight, Color.

Если нужно экспонировать первую строку для выделенного диапазона с помощью жирного и курсивного шрифта значений ячеек. А также заполнить ячейки первой строки заливкой с голубым цветом, тогда в самом конце кода макроса перед последней инструкцией End Sub следует добавить несколько строк с VBA-кодом:

.Rows(1).Font.Bold = True

.Rows(1).Font.Italic = True

.Rows(1).Interior.Color = vbCyan

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

.Columns (1).Font.Bold = True

.Columns (1).Font.Italic = True

.Columns (1).Interior.Color = vbCyan

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

.Rows(.Rows.Count).Font.Bold = True

Полная версия модифицированного кода макроса выглядит так:

Sub SbrosFormat()
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
.HorizontalAlignment = xlVAlignCenter
.VerticalAlignment = xlVAlignCenter
.WrapText = True
.Borders.LineStyle = xlDash
.Borders.Color = vbBlue
.Borders.Weight = xlMedium
.Font.ColorIndex = xlColorIndexAutomatic
.Interior.ColorIndex = xlColorIndexAutomatic
.Columns.AutoFit
.Rows.AutoFit
.BorderAround xlContinuous, xlMedium, vbBlack
.Rows(1).Font.Bold = True
.Rows(1).Font.Italic = True
.Rows(1).Interior.Color = vbCyan
.Columns(1).Font.Bold = True
.Columns(1).Font.Italic = True
.Columns(1).Interior.Color = vbCyan
.Rows(.Rows.Count).Font.Bold = True
End With
End Sub

Пример работы измененного кода VBA-макроса:

Пример после изменений в коде.

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

Понравилась статья? Поделить с друзьями:
  • Строки в excel не опускаются
  • Строку в дату в excel автоматически
  • Структура документу ms excel
  • Строки в excel не заливаются
  • Строковые данные в excel