Formatierung mit Vba
Swipe um das Menü anzuzeigen
Alles, was Sie in Excel manuell formatieren können, lässt sich auch per Code formatieren.
Schriftarten
With ist eine Kurzschreibweise, um sich mehrmals hintereinander auf dasselbe Objekt zu beziehen, ohne dessen vollständigen Namen in jeder Zeile erneut eingeben zu müssen. With obj ... End With bedeutet einfach, dass jede Zeile innerhalb dieses Blocks, die mit einem Punkt beginnt (wie .Property = X), eine Kurzform für obj.Property = X ist — VBA fügt obj automatisch für jede Zeile ein. Dies dient ausschließlich der besseren Lesbarkeit und ändert nichts an der Funktionsweise des Codes.
' 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
Beide Varianten bewirken exakt dasselbe — With verhindert lediglich die dreifache Wiederholung von ws.Range("A1:I1").Font.
Farben
ws.Range("A1:I1").Interior.Color = RGB(24, 106, 60) ' dark green header
Rahmen
With ws.Range("A1:I6").Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(200, 200, 200)
End With
Ausrichtung
ws.Range("E2:E6").HorizontalAlignment = xlCenter
ws.Range("C2:C6").HorizontalAlignment = xlLeft
Grundlagen der bedingten Formatierung
VBA kann die gleichen Regeln anwenden, die über das Menüband erstellt werden:
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)
Führen Sie dieses Makro aus und jede "Cancelled"-Bestellung wird automatisch mit einer roten Hervorhebung versehen – und im Gegensatz zur manuellen Formatierung bleibt die Regel aktiv, falls sich der Status später ändert.
Aufgabe
- Kopfzeile (
A1:I1) fett formatieren, mit dunkelgrünem Hintergrund (RGB(24, 106, 60)) und weißer Schriftfarbe (RGB(255, 255, 255)) – alles per Code, nicht manuell. - Dünne graue (
RGB(200, 200, 200)) Rahmen um die gesamte Tabelle mitCurrentRegionhinzufügen. - Bedingte Formatierung hinzufügen, die jede Bestellung mit
Discount % >= 10gelb hervorhebt (RGB(255, 235, 156)).
1. Formatierung der Kopfzeile
Font.Bold,Interior.ColorundFont.Colorkönnen alle auf denselben Bereich angewendet werden.- Dunkelgrüner Hintergrund benötigt ein RGB-Tripel; weiße Schrift ist der einfachste RGB-Wert.
- Ein
With...End With-Block verhindert, dassws.Range("A1:I1")dreimal wiederholt werden muss.
2. Rahmen mit CurrentRegion hinzufügen
CurrentRegionauf A1 erfasst die gesamte Tabelle, ohne dass Sie wissen oder festlegen müssen, wie viele Zeilen vorhanden sind.- Rahmen haben drei Eigenschaften, die zusammen gesetzt werden:
LineStyle,WeightundColor– dünnes Grau bedeutetxlThinund einen hellgrauen RGB-Wert.
3. Bedingte Formatierung für Discount % >= 10
- Dies ist ein numerischer Vergleich, kein Textvergleich, daher ist der Bedingungstyp xlCellValue mit xlGreaterEqual – anders als beim "Cancelled"-Textbeispiel zuvor im Kapitel.
- Die Herausforderung: Discount % wird als Dezimalzahl gespeichert (10% = 0,1), daher muss der Vergleichswert in Formula1 als "0.1" und nicht als "10" geschrieben werden.
- Immer zuerst bestehende bedingte Formatierungen in diesem Bereich löschen, sonst werden bei wiederholtem Ausführen des Makros doppelte Regeln übereinander gelegt.
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
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen