Kurz gesagt — Eine Regel der bedingten Formatierung ist eine stehende Anweisung, die Sie Excel einmal geben; Excel führt sie bei jeder Änderung erneut aus. Eine
For Each ... Interior.Color-Schleife ist eine Momentaufnahme — korrekt in dem Augenblick, in dem sie läuft, veraltet in dem Augenblick, in dem sich ein Wert ändert. Sie fügen Regeln über dieFormatConditions-Sammlung eines Bereichs hinzu. Zwei Dinge bringen jeden zu Fall: Regeln stapeln sich, wenn Sie nicht vor demAddeinDeletesetzen, und in einer Ausdrucksregel muss der Bezug$D2sein (Spalte fixiert, Zeile frei), sonst hebt sie die falschen Zellen hervor.
Dim rng As Range: Set rng = ThisWorkbook.Worksheets("Sales").Range("A2:F1000")
rng.FormatConditions.Delete ' erst alte Regeln loeschen (idempotent)
With rng.FormatConditions.Add(Type:=xlExpression, Formula1:="=$D2>1000")
.Interior.Color = RGB(198, 239, 206) ' ganze Zeile wird gruen, wenn Spalte D > 1000
End With
Eine Zelle aus VBA zu färben hat zwei völlig verschiedene Modi, und den falschen zu wählen ist ein
leiser Bug. Sie können Interior.Color in einer Schleife setzen — ein
einmaliger Anstrich — oder Sie fügen eine Regel hinzu und überlassen Excel das Färben für immer.
Diese Anleitung dreht sich um das Zweite, weil es dasjenige ist, das korrekt bleibt, wenn sich die
Daten ändern — und dasjenige, für das die Leute stattdessen zu einer brüchigen Schleife greifen.
Was Sie lernen
- Das mentale Modell — eine Regel ist ein lebendiger Spiegel, eine Schleife eine Momentaufnahme
- Eine Regel über die
FormatConditions-Sammlung hinzufügen - Die Gewohnheit, die es idempotent hält —
Deletevor demAdd - Die zwei Regeltypen, die Sie wirklich nutzen —
xlCellValueundxlExpression - Die Bezugs-Falle — warum das Hervorheben ganzer Zeilen
$D2braucht, nichtD2oder$D$2 - Wann eine statische Schleife noch das richtige Werkzeug ist
Das mentale Modell: ein lebendiger Spiegel, keine Momentaufnahme
Überfällige Zeilen mit einer Schleife hervorzuheben erzeugt eine Momentaufnahme. Sie ist korrekt in dem Augenblick, in dem sie läuft, und falsch in dem Augenblick, in dem jemand ein Fälligkeitsdatum bearbeitet — die Farbe bewegt sich nicht, weil nichts die Schleife erneut ausführt:
' Momentaufnahme: jetzt korrekt, nach der naechsten Aenderung veraltet.
Dim c As Range
For Each c In ws.Range("D2:D1000")
If c.Value > 1000 Then c.EntireRow.Interior.Color = RGB(198, 239, 206)
Next c
Eine Regel der bedingten Formatierung ist von anderer Art. Sie beschreiben die Bedingung einmal, übergeben sie Excel, und Excel wertet sie bei jeder Neuberechnung neu aus, für immer. Ändern Sie einen Wert, und die Farbe folgt im selben Augenblick. Das ist der ganze Grund, warum es bedingte Formatierung im Code gibt: eine Schleife malt, eine Regel verspricht. Sobald Sie das Färben als „wer ist dafür zuständig, das korrekt zu halten — ich oder Excel" sehen, hört die Wahl zwischen den beiden Modi auf, eine Stilfrage zu sein, und wird zu einer Frage der Korrektheit.
Eine Regel hinzufügen: die FormatConditions-Sammlung
Jeder Bereich trägt eine FormatConditions-Sammlung. Sie fügen ihr mit Add eine Bedingung hinzu;
Add gibt die neue Bedingung zurück, deren .Interior, .Font und .Borders Sie dann setzen:
Dim rng As Range: Set rng = ws.Range("B2:B1000")
With rng.FormatConditions.Add(Type:=xlCellValue, Operator:=xlLess, Formula1:="0")
.Interior.Color = RGB(255, 199, 206) ' rote Fuellung, wenn der Wert negativ ist
.Font.Color = RGB(156, 0, 6)
End With
Die Sammlung lebt auf dem Bereich, für den die Regel gilt — hier B2:B1000 —, Regel und
Geltungsbereich werden also in einem Atemzug gesetzt. .Add nimmt den Regel-Type und (für eine
Wertregel) einen Operator sowie ein oder zwei Schwellen Formula1/Formula2. Alles danach ist nur
das Formatieren des zurückgegebenen Bedingungsobjekts.
Die wichtigste Gewohnheit: Delete vor Add
Hier ist der Fehlermodus, der jedes Makro der bedingten Formatierung irgendwann erwischt. .Add
ersetzt nicht — es hängt an. Lassen Sie das Makro zweimal laufen, und der Bereich hat zwei
identische Regeln; lassen Sie es in einer Schleife über Blätter laufen, und Sie bekommen Hunderte, jede
ein winziger Leistungsverlust und ein Albtraum, sie von Hand zu entwirren:
rng.FormatConditions.Delete ' <- die eine Zeile, die das idempotent haelt
With rng.FormatConditions.Add(...) ' jetzt gibt es genau eine Regel, bei jedem Lauf
...
End With
Machen Sie Delete vor Add zum Reflex. Das ist der Unterschied zwischen einem Makro, das Sie
tausendmal mit demselben Ergebnis laufen lassen können, und einem, das still Müll ansammelt. Müssen Sie
bestehende Regeln behalten, die der Benutzer von Hand hinzugefügt hat, löschen Sie chirurgischer, indem
Sie FormatConditions durchgehen und nur Ihre eigenen entfernen — aber für ein Makro, dem die
Formatierung des Bereichs gehört, ist ein sauberes Delete zuerst der ehrliche Standard.
Die zwei Regeltypen, die Sie wirklich nutzen
Es gibt mehrere Type-Werte, aber zwei tragen fast die gesamte reale Arbeit:
xlCellValue— vergleicht den Wert dieser Zelle.Operator:=xlLess,xlGreater,xlBetween,xlEqual. Das ist der einfache Fall „die Zelle nach ihrer eigenen Zahl färben".xlExpression— wertet eine Formel aus, dieTRUE/FALSEzurückgibt. Das ist die mächtige: sie kann andere Spalten referenzieren, womit Sie eine ganze Zeile anhand eines Feldes färben.
' Wertregel: eine Zelle rot faerben, wenn ihr eigener Wert unter Null liegt.
rng.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="0"
' Ausdrucksregel: die GANZE Zeile faerben, wenn Spalte D 1000 uebersteigt.
ws.Range("A2:F1000").FormatConditions.Add Type:=xlExpression, Formula1:="=$D2>1000"
Die Zusätze — AddDatabar, AddColorScale, AddIconSetCondition — sind dieselbe Sammlung mit
reicheren Visualisierungen, aber wenn Sie Wert gegen Ausdruck verstehen, verstehen Sie das Modell.
Die Bezugs-Falle: warum das Hervorheben ganzer Zeilen $D2 braucht
Das ist der „meine Regel hebt die falschen Zellen hervor"-Bug Nummer eins, und es ist reine
Tabellenmechanik. Eine xlExpression-Formel wird relativ zur linken oberen Zelle des angewendeten
Bereichs ausgewertet, dann führt Excel sie über jede Zelle, so wie es eine Formel ziehen würde. Die
Dollarzeichen entscheiden also, was sich bewegt:
=$D2>1000— Spalte fixiert, Zeile frei. Jede Zelle einer Zeile prüft die Spalte D genau dieser Zeile, sodass die ganze Zeile gemeinsam aufleuchtet. Das ist es, was Sie für das Hervorheben von Zeilen wollen.=D2>1000— nichts fixiert. Der Bezug wandert auch nach Spalte, Zeile 2 prüft also D2, aber Spalte B der Zeile 2 prüft E2, und alles verschmiert.=$D$2>1000— alles fixiert. Jede Zelle des ganzen Bereichs prüft die einzelne Zelle D2 — der ganze Block ist also gemeinsam an oder aus.
Verankern Sie es falsch, und die Regel „funktioniert" (kein Fehler), färbt aber Unsinn. Die Lösung ist, genau so zu denken wie bei einer gezogenen Formel: fixieren Sie die Spalte, die Sie prüfen, und lassen Sie die Zeile relativ.
Wann eine statische Schleife noch richtig ist
Regeln sind nicht immer die Antwort. Nutzen Sie eine schlichte Interior.Color-Schleife, wenn die
Farbe den Daten nicht folgen soll — einen einmaligen Bericht, den Sie gleich einfrieren und als PDF
exportieren, wo die Hervorhebung eingebacken und unveränderlich sein soll, selbst nachdem jemand eine
Zelle bearbeitet. In dem Fall ist eine Live-Regel das falsche Werkzeug: sie würde ein Dokument immer
wieder neu färben, das eine feste Momentaufnahme sein soll.
Das Urteil ist eine klare Linie: soll die Farbe korrekt bleiben, während das Blatt bearbeitet wird, nehmen Sie eine Regel; soll die Farbe so einfrieren, wie sie gerade ist, nehmen Sie eine Schleife. Meistens wollen Sie die Regel — genau deshalb ist der reflexhafte Griff zur Schleife der Fehler, den zu verlernen sich lohnt.
Wie ExcelMaster hilft
Bedingte Formatierung im Code hat drei leise Fallen: Regeln, die sich stapeln, weil nichts sie zuerst
löscht, eine Ausdrucksregel, die auf $D$2 oder D2 statt $D2 verankert ist und so die falschen
Zellen färbt, und eine brüchige Schleife dort, wo eine Regel hingehört hätte, sodass die Hervorhebung
bei der nächsten Änderung veraltet. Jede läuft ohne Fehler und sieht später falsch aus.
ExcelMaster lässt
Sie das Ergebnis beschreiben — „hebe Zeilen hervor, deren Summe über 1000 liegt", „schattiere negative
Werte rot", „markiere überfällige Posten und halte es live". Es schreibt ein FormatConditions.Delete
vor dem Add, damit das Makro idempotent ist, verankert Ausdrucksregeln als $D2 für korrektes
Hervorheben ganzer Zeilen und greift nur dann zu einer statischen Schleife, wenn Sie wirklich einen
eingefrorenen Bericht wollen. Sie behalten die Arbeitsmappe und den Code — und die Farbe folgt den
Daten so, wie Sie es meinten.
Häufig gestellte Fragen
Wie füge ich bedingte Formatierung in VBA hinzu?
Fügen Sie einer FormatConditions-Sammlung eines Bereichs eine Regel hinzu:
Range("B2:B1000").FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="0", und setzen
Sie dann das Format der zurückgegebenen Bedingung (.Interior.Color, .Font.Color). Die Regel lebt
auf dem Bereich, für den sie gilt, und Excel wertet sie automatisch neu aus, sobald sich die Daten
ändern.
Warum vermehren sich meine Regeln der bedingten Formatierung ständig?
Weil FormatConditions.Add anhängt statt zu ersetzen, sodass jeder Lauf eine weitere Kopie hinzufügt.
Rufen Sie Range(...).FormatConditions.Delete vor dem Add auf, um das Makro idempotent zu halten —
genau eine Regel, egal wie oft es läuft. Um das ganze Blatt zu leeren, nehmen Sie
Cells.FormatConditions.Delete.
Wie hebe ich eine ganze Zeile mit bedingter Formatierung in VBA hervor?
Nutzen Sie eine Ausdrucksregel auf dem Bereich der ganzen Zeile und fixieren Sie die geprüfte Spalte,
nicht die Zeile: Range("A2:F1000").FormatConditions.Add Type:=xlExpression, Formula1:="=$D2>1000".
Der Bezug $D2 (Spalte fixiert, Zeile relativ) lässt jede Zeile ihre eigene Spalte D prüfen, sodass
die volle Zeile gemeinsam färbt. $D$2 oder D2 heben die falschen Zellen hervor.
Was ist der Unterschied zwischen xlCellValue und xlExpression?
xlCellValue vergleicht jede Zelle mit einem Schwellenwert über einen Operator (xlLess,
xlGreater, xlBetween) — gut, um eine Zelle nach ihrem eigenen Wert zu färben. xlExpression wertet
eine Formel aus, die TRUE/FALSE zurückgibt, und kann andere Spalten referenzieren, womit Sie eine
ganze Zeile aus einem Feld färben. Nutzen Sie Ausdrucksregeln für alles Spaltenübergreifende.
Sollte ich zum Färben von Zellen bedingte Formatierung oder eine VBA-Schleife nutzen?
Nutzen Sie eine Regel, wenn die Farbe korrekt bleiben muss, während das Blatt bearbeitet wird — Excel
wertet eine FormatConditions-Regel bei jeder Änderung neu aus. Nutzen Sie eine
For Each ... Interior.Color-Schleife nur für einen statischen einmaligen Bericht, den Sie einfrieren
und exportieren wollen, wo die Hervorhebung eingebacken bleiben und nach späteren Änderungen nicht neu
angewendet werden soll.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 08.09.2026.
Verwandte Anleitungen: VBA Zellfarbe · VBA ColorIndex · VBA RGB · VBA Font · VBA For Each
