Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Formatering med VBA | Arbeide med Excel-data
Excel VBA for Forretningsautomatisering

Formatering med VBA

Sveip for å vise menyen

Alt du kan formatere manuelt i Excel, kan du også formatere med kode.

Skrifttyper

With er en snarvei for å referere til det samme objektet flere ganger på rad uten å måtte skrive hele navnet på hver linje. With obj ... End With betyr at hver linje inne i blokken som starter med et punktum (som .Property = X) er en forkortelse for obj.Property = X — VBA fyller automatisk inn obj for hver linje. Dette er kun for å gjøre koden mer lesbar; det endrer ikke hva koden gjør.

' 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

Begge versjonene gjør nøyaktig det samme — With unngår bare å gjenta ws.Range("A1:I1").Font tre ganger.

Farger

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

Rammer

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

Justering

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

Grunnleggende om betinget formatering

VBA kan bruke de samme reglene som du ville laget via båndet:

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

Kjør dette, og hver "Cancelled"-ordre får automatisk et rødt høydepunkt — og i motsetning til manuell formatering forblir regelen aktiv hvis Status-verdien senere endres.

Oppgave

  1. Gjør overskriftsraden (A1:I1) fet, gi den en mørkegrønn fyllfarge (RGB(24, 106, 60)), og gjør skriftfargen hvit (RGB(255, 255, 255)) — alt i kode, ikke manuelt.
  2. Legg til tynne grå (RGB(200, 200, 200)) kanter rundt hele tabellen ved å bruke CurrentRegion.
  3. Legg til en betinget formatering som markerer alle ordre med Discount % >= 10 i gult (RGB(255, 235, 156)).
Tips
expand arrow

1. Formatering av overskriftsraden

  • Font.Bold, Interior.Color og Font.Color kan alle settes på samme område.
  • Mørkegrønn fyll krever en RGB-trippel; hvit skrift er den enkleste RGB-verdien som finnes.
  • En With...End With-blokk unngår å måtte gjenta ws.Range("A1:I1") tre ganger.

2. Legge til kanter med CurrentRegion

  • CurrentRegion på A1 fanger hele tabellen uten at du trenger å vite eller hardkode hvor mange rader som finnes.
  • Kanter har tre egenskaper som må settes sammen: LineStyle, Weight og Color — tynn grå betyr xlThin og en lys grå RGB-verdi.

3. Betinget formatering for Discount % >= 10

  • Dette er en numerisk sammenligning, ikke en tekstsammenligning, så betingelsestypen er xlCellValue med xlGreaterEqual — forskjellig fra "Cancelled"-eksempelet tidligere i kapitlet.
  • Det vanskelige: Discount % lagres som desimal (10% = 0,1), så sammenligningsverdien i Formula1 må skrives som "0.1", ikke "10".
  • Husk alltid å fjerne eksisterende betingede formateringer på det området først, ellers vil gjentatte kjøringer av makroen legge til dupliserte regler oppå hverandre.
Løsning
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
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Formatering med VBA

Alt du kan formatere manuelt i Excel, kan du også formatere med kode.

Skrifttyper

With er en snarvei for å referere til det samme objektet flere ganger på rad uten å måtte skrive hele navnet på hver linje. With obj ... End With betyr at hver linje inne i blokken som starter med et punktum (som .Property = X) er en forkortelse for obj.Property = X — VBA fyller automatisk inn obj for hver linje. Dette er kun for å gjøre koden mer lesbar; det endrer ikke hva koden gjør.

' 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

Begge versjonene gjør nøyaktig det samme — With unngår bare å gjenta ws.Range("A1:I1").Font tre ganger.

Farger

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

Rammer

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

Justering

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

Grunnleggende om betinget formatering

VBA kan bruke de samme reglene som du ville laget via båndet:

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

Kjør dette, og hver "Cancelled"-ordre får automatisk et rødt høydepunkt — og i motsetning til manuell formatering forblir regelen aktiv hvis Status-verdien senere endres.

Oppgave

  1. Gjør overskriftsraden (A1:I1) fet, gi den en mørkegrønn fyllfarge (RGB(24, 106, 60)), og gjør skriftfargen hvit (RGB(255, 255, 255)) — alt i kode, ikke manuelt.
  2. Legg til tynne grå (RGB(200, 200, 200)) kanter rundt hele tabellen ved å bruke CurrentRegion.
  3. Legg til en betinget formatering som markerer alle ordre med Discount % >= 10 i gult (RGB(255, 235, 156)).
Tips
expand arrow

1. Formatering av overskriftsraden

  • Font.Bold, Interior.Color og Font.Color kan alle settes på samme område.
  • Mørkegrønn fyll krever en RGB-trippel; hvit skrift er den enkleste RGB-verdien som finnes.
  • En With...End With-blokk unngår å måtte gjenta ws.Range("A1:I1") tre ganger.

2. Legge til kanter med CurrentRegion

  • CurrentRegion på A1 fanger hele tabellen uten at du trenger å vite eller hardkode hvor mange rader som finnes.
  • Kanter har tre egenskaper som må settes sammen: LineStyle, Weight og Color — tynn grå betyr xlThin og en lys grå RGB-verdi.

3. Betinget formatering for Discount % >= 10

  • Dette er en numerisk sammenligning, ikke en tekstsammenligning, så betingelsestypen er xlCellValue med xlGreaterEqual — forskjellig fra "Cancelled"-eksempelet tidligere i kapitlet.
  • Det vanskelige: Discount % lagres som desimal (10% = 0,1), så sammenligningsverdien i Formula1 må skrives som "0.1", ikke "10".
  • Husk alltid å fjerne eksisterende betingede formateringer på det området først, ellers vil gjentatte kjøringer av makroen legge til dupliserte regler oppå hverandre.
Løsning
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
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 4
some-alt