Форматування за допомогою VBA
Свайпніть щоб показати меню
Усе, що можна відформатувати вручну в Excel, можна відформатувати й за допомогою коду.
Шрифти
With — це скорочення для звернення до одного й того ж об'єкта кілька разів поспіль без необхідності щоразу вводити його повну назву. With obj ... End With означає, що кожен рядок у цьому блоці, який починається з крапки (наприклад, .Property = X), є скороченням для obj.Property = X — VBA автоматично підставляє obj для кожного з них. Це лише зручність для читабельності; на виконання коду це не впливає.
' Without With — obj repeated on every line
ws.Range("A1:I1").Font.Bold = True
ws.Range("A1:I1").Font.Size = 11
ws.Range("A1:I1").Font.Color = RGB(255, 255, 255)
' With With — the object is stated once, everything else is shorthand
With ws.Range("A1:I1").Font
.Bold = True
.Size = 11
.Color = RGB(255, 255, 255)
.Name = "Calibri"
End With
Обидва варіанти виконують одне й те саме — With просто дозволяє не повторювати ws.Range("A1:I1").Font тричі.
Кольори
ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60) ' dark green header
Межі
With ws.Range("A1:I6").Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(200, 200, 200)
End With
Вирівнювання
ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft
Основи умовного форматування
VBA може застосовувати ті ж правила, що й через стрічку:
Dim rng As Range
Set rng = ws.Range("I2:I6") ' Status column
rng.FormatConditions.Delete ' clear any existing rules first
rng.FormatConditions.Add Type:=xlTextString, String:="Cancelled", _
TextOperator:=xlContains
rng.FormatConditions(1).Interior.Color = RGB(255, 199, 206)
rng.FormatConditions(1).Font.Color = RGB(156, 0, 6)
Запустіть цей код, і кожне замовлення зі статусом "Cancelled" автоматично отримає червоне підсвічування — і на відміну від ручного форматування, правило залишиться активним, якщо значення Status зміниться пізніше.
Завдання
- Зробити заголовок (
A1:I1) жирним, залити темно-зеленим кольором (RGB(24, 106, 60)) і встановити білий шрифт (RGB(255, 255, 255)) — усе це за допомогою коду, а не вручну. - Додати тонкі сірі (
RGB(200, 200, 200)) межі навколо всієї таблиці за допомогоюCurrentRegion. - Додати умовне форматування, яке підсвічує будь-яке замовлення з
Discount % >= 10жовтим (RGB(255, 235, 156)).
1. Форматування рядка заголовка
Font.Bold,Interior.ColorтаFont.Colorможна встановити для одного й того ж діапазону.- Для темно-зеленого фону потрібна трійка RGB; білий шрифт — це найпростіше значення RGB.
- Блок
With...End Withдозволяє не повторюватиws.Range("A1:I1")тричі.
2. Додавання меж за допомогою CurrentRegion
CurrentRegionна A1 охоплює всю таблицю без необхідності знати або жорстко задавати кількість рядків.- Для меж потрібно задати три властивості:
LineStyle,WeightіColor— тонка сіра межа означаєxlThinі світло-сірий RGB.
3. Умовне форматування для Discount % >= 10
- Це числове порівняння, а не текстове, тому тип умови — xlCellValue з xlGreaterEqual, що відрізняється від прикладу з текстом “Cancelled”, розглянутого раніше в цьому розділі.
- Важливий момент: Discount % зберігається як десятковий дріб (10% = 0.1), тому значення для порівняння у Formula1 має бути "0.1", а не "10".
- Завжди очищайте існуючі умовні формати на цьому діапазоні, інакше при повторному запуску макросу правила будуть дублюватися одне на одне.
Sub FormatOrdersTable()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Header row formatting ---
With ws.Range("A1:I1")
.Font.Bold = True
.Interior.Color = RGB(24, 106, 60)
.Font.Color = RGB(255, 255, 255)
End With
' --- 2. Borders around the full table ---
With ws.Range("A1").CurrentRegion.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(200, 200, 200)
End With
' --- 3. Conditional format for Discount % >= 10 ---
Dim discountRange As Range
Set discountRange = ws.Range("G2:G6")
discountRange.FormatConditions.Delete
discountRange.FormatConditions.Add Type:=xlCellValue, _
Operator:=xlGreaterEqual, Formula1:="0.1"
discountRange.FormatConditions(1).Interior.Color = RGB(255, 235, 156)
End Sub
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат