Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Форматування за допомогою VBA | Робота з Даними в Excel
Excel VBA для автоматизації бізнесу

Форматування за допомогою 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)
Рисунок 3.4

Запустіть цей код, і кожне замовлення зі статусом "Cancelled" автоматично отримає червоне підсвічування — і на відміну від ручного форматування, правило залишиться активним, якщо значення Status зміниться пізніше.

Завдання

  1. Зробити заголовок (A1:I1) жирним, залити темно-зеленим кольором (RGB(24, 106, 60)) і встановити білий шрифт (RGB(255, 255, 255)) — усе це за допомогою коду, а не вручну.
  2. Додати тонкі сірі (RGB(200, 200, 200)) межі навколо всієї таблиці за допомогою CurrentRegion.
  3. Додати умовне форматування, яке підсвічує будь-яке замовлення з Discount % >= 10 жовтим (RGB(255, 235, 156)).
Підказка
expand arrow

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".
  • Завжди очищайте існуючі умовні формати на цьому діапазоні, інакше при повторному запуску макросу правила будуть дублюватися одне на одне.
Розв'язок
expand arrow
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
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 3. Розділ 4
some-alt