Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Formatering med VBA | Arbeta med Exceldata
Excel VBA för affärsautomatisering

Formatering med VBA

Svep för att visa menyn

Allt du kan formatera manuellt i Excel kan du också formatera med kod.

Typsnitt

With är en förkortning för att referera till samma objekt flera gånger i rad utan att behöva skriva ut hela namnet på varje rad. With obj ... End With betyder helt enkelt att varje rad inom blocket som börjar med en punkt (som .Property = X) är en förkortning för obj.Property = X — VBA fyller automatiskt i obj för varje sådan rad. Det är endast en bekvämlighet för läsbarheten; det ändrar inte vad koden gö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

Båda versionerna gör exakt samma sak — With undviker bara att upprepa ws.Range("A1:I1").Font tre gånger.

Färger

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

Kanter

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

Grundläggande villkorsstyrd formatering

VBA kan tillämpa samma regler som du skapar via menyfliksområdet:

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

Kör detta så får varje "Cancelled"-order automatiskt en rödtonad markering — och till skillnad från manuell formatering förblir regeln aktiv om värdet i Status ändras senare.

Uppgift

  1. Gör rubrikraden (A1:I1) fet, ge den en mörkgrön fyllning (RGB(24, 106, 60)) och gör teckensnittet vitt (RGB(255, 255, 255)) — allt i kod, inte manuellt.
  2. Lägg till tunna grå (RGB(200, 200, 200)) ramar runt hela tabellen med hjälp av CurrentRegion.
  3. Lägg till en villkorsstyrd formatering som markerar alla ordrar med Discount % >= 10 i gult (RGB(255, 235, 156)).
Tips
expand arrow

1. Formatera rubrikraden

  • Font.Bold, Interior.Color och Font.Color kan alla ställas in på samma område.
  • Mörkgrön fyllning kräver en RGB-trippel; vitt teckensnitt är det enklaste RGB-värdet som finns.
  • Ett With...End With-block undviker att behöva upprepa ws.Range("A1:I1") tre gånger.

2. Lägga till ramar med CurrentRegion

  • CurrentRegion på A1 fångar hela tabellen utan att du behöver veta eller hårdkoda hur många rader som finns.
  • Ramar har tre egenskaper som ska ställas in tillsammans: LineStyle, Weight och Color — tunn grå innebär xlThin och ett ljust grått RGB-värde.

3. Villkorsstyrd formatering för Discount % >= 10

  • Detta är en numerisk jämförelse, inte en textjämförelse, så villkorstypen är xlCellValue med xlGreaterEqual — annorlunda än "Cancelled"-exemplet tidigare i kapitlet.
  • Det kluriga: Discount % lagras som ett decimaltal (10% = 0,1), så jämförelsevärdet i Formula1 måste skrivas som "0.1", inte "10".
  • Rensa alltid befintliga villkorsstyrda formateringar på det området först, annars staplas dubbletter vid upprepade körningar av makrot.
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
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 3. Kapitel 4
some-alt