Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Muotoilu VBA:lla | Työskentely Excel-tietojen Kanssa
Excel VBA Liiketoiminnan Automaatioon

Muotoilu VBA:lla

Pyyhkäise näyttääksesi valikon

Kaiken, mitä voit muotoilla käsin Excelissä, voit muotoilla myös koodilla.

Fontit

With on lyhennys, jonka avulla voit viitata samaan objektiin useita kertoja peräkkäin ilman, että kirjoitat sen koko nimen jokaiselle riville. With obj ... End With tarkoittaa, että jokainen lohkon sisällä oleva rivi, joka alkaa pisteellä (esim. .Property = X), on lyhennys muodosta obj.Property = X — VBA lisää obj automaattisesti jokaiseen. Tämä on vain luettavuuden helpottamiseksi; se ei muuta koodin toimintaa.

' 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

Molemmat versiot tekevät täsmälleen saman asian — With vain estää toistamasta ws.Range("A1:I1").Font kolme kertaa.

Värit

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Reunaviivat

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Tasaus

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Ehdollisen muotoilun perusteet

VBA voi käyttää samoja sääntöjä, joita loisit valintanauhan kautta:

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)
Kuva 3.4

Suorita tämä, niin jokainen "Cancelled"-tilaus saa automaattisesti punasävyisen korostuksen — ja toisin kuin manuaalisesti lisätty muotoilu, sääntö pysyy voimassa, jos Status-arvo myöhemmin muuttuu.

Tehtävä

  1. Lihavoi otsikkorivi (A1:I1), lisää sille tummanvihreä täyttö (RGB(24, 106, 60)) ja valkoinen fontti (RGB(255, 255, 255)) — kaikki koodilla, ei käsin.
  2. Lisää ohuet harmaat (RGB(200, 200, 200)) reunukset koko taulukon ympärille käyttämällä CurrentRegion-ominaisuutta.
  3. Lisää ehdollinen muotoilu, joka korostaa kaikki tilaukset, joissa Discount % >= 10, keltaisella (RGB(255, 235, 156)).
Vihje
expand arrow

1. Otsikkorivin muotoilu

  • Font.Bold, Interior.Color ja Font.Color voidaan kaikki asettaa samalle alueelle.
  • Tummanvihreä täyttö vaatii RGB-arvon; valkoinen fontti on yksinkertaisin mahdollinen RGB-arvo.
  • With...End With -lohko estää toistamasta ws.Range("A1:I1") kolme kertaa.

2. Reunusten lisääminen CurrentRegion-ominaisuudella

  • CurrentRegion solussa A1 kattaa koko taulukon ilman, että sinun tarvitsee tietää tai kovakoodata rivien määrää.
  • Reunuksilla on kolme ominaisuutta, jotka tulee asettaa yhdessä: LineStyle, Weight ja Color — ohut harmaa tarkoittaa xlThin ja vaaleanharmaa RGB-arvo.

3. Ehdollinen muotoilu Discount % >= 10

  • Tämä on numeerinen vertailu, ei tekstivertailu, joten ehtotyyppi on xlCellValue ja xlGreaterEqual — eri asia kuin luvun aiemmassa esimerkissä käytetty "Cancelled"-teksti.
  • Haastava kohta: Discount % tallennetaan desimaalina (10% = 0,1), joten vertailuarvo Formula1:ssa tulee kirjoittaa muodossa "0.1", ei "10".
  • Poista aina olemassa olevat ehdolliset muotoilut kyseiseltä alueelta ensin, muuten makron toistuva suoritus lisää päällekkäisiä sääntöjä.
Ratkaisu
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
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Muotoilu VBA:lla

Kaiken, mitä voit muotoilla käsin Excelissä, voit muotoilla myös koodilla.

Fontit

With on lyhennys, jonka avulla voit viitata samaan objektiin useita kertoja peräkkäin ilman, että kirjoitat sen koko nimen jokaiselle riville. With obj ... End With tarkoittaa, että jokainen lohkon sisällä oleva rivi, joka alkaa pisteellä (esim. .Property = X), on lyhennys muodosta obj.Property = X — VBA lisää obj automaattisesti jokaiseen. Tämä on vain luettavuuden helpottamiseksi; se ei muuta koodin toimintaa.

' 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

Molemmat versiot tekevät täsmälleen saman asian — With vain estää toistamasta ws.Range("A1:I1").Font kolme kertaa.

Värit

ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60)   ' dark green header

Reunaviivat

With ws.Range("A1:I6").Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .Color = RGB(200, 200, 200)
End With

Tasaus

ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft

Ehdollisen muotoilun perusteet

VBA voi käyttää samoja sääntöjä, joita loisit valintanauhan kautta:

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)
Kuva 3.4

Suorita tämä, niin jokainen "Cancelled"-tilaus saa automaattisesti punasävyisen korostuksen — ja toisin kuin manuaalisesti lisätty muotoilu, sääntö pysyy voimassa, jos Status-arvo myöhemmin muuttuu.

Tehtävä

  1. Lihavoi otsikkorivi (A1:I1), lisää sille tummanvihreä täyttö (RGB(24, 106, 60)) ja valkoinen fontti (RGB(255, 255, 255)) — kaikki koodilla, ei käsin.
  2. Lisää ohuet harmaat (RGB(200, 200, 200)) reunukset koko taulukon ympärille käyttämällä CurrentRegion-ominaisuutta.
  3. Lisää ehdollinen muotoilu, joka korostaa kaikki tilaukset, joissa Discount % >= 10, keltaisella (RGB(255, 235, 156)).
Vihje
expand arrow

1. Otsikkorivin muotoilu

  • Font.Bold, Interior.Color ja Font.Color voidaan kaikki asettaa samalle alueelle.
  • Tummanvihreä täyttö vaatii RGB-arvon; valkoinen fontti on yksinkertaisin mahdollinen RGB-arvo.
  • With...End With -lohko estää toistamasta ws.Range("A1:I1") kolme kertaa.

2. Reunusten lisääminen CurrentRegion-ominaisuudella

  • CurrentRegion solussa A1 kattaa koko taulukon ilman, että sinun tarvitsee tietää tai kovakoodata rivien määrää.
  • Reunuksilla on kolme ominaisuutta, jotka tulee asettaa yhdessä: LineStyle, Weight ja Color — ohut harmaa tarkoittaa xlThin ja vaaleanharmaa RGB-arvo.

3. Ehdollinen muotoilu Discount % >= 10

  • Tämä on numeerinen vertailu, ei tekstivertailu, joten ehtotyyppi on xlCellValue ja xlGreaterEqual — eri asia kuin luvun aiemmassa esimerkissä käytetty "Cancelled"-teksti.
  • Haastava kohta: Discount % tallennetaan desimaalina (10% = 0,1), joten vertailuarvo Formula1:ssa tulee kirjoittaa muodossa "0.1", ei "10".
  • Poista aina olemassa olevat ehdolliset muotoilut kyseiseltä alueelta ensin, muuten makron toistuva suoritus lisää päällekkäisiä sääntöjä.
Ratkaisu
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
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 4
some-alt