Kurz gesagt —
Range.Fontist die Textebene einer Zelle: Farbe, Fett, Kursiv, Größe, Name. Nichts davon ändert den Wert darunter — eine rote Zahl ist immer noch nur eine Zahl. Die Farbe ist der Teil, über den alle stolpern, denn es gibt drei Wege, sie zu setzen, und zwei davon leben in unterschiedlichen Zahlenräumen. Nehmen SieRange("A1").Font.Color = RGB(200, 0, 0)für jede beliebige Farbe. Nehmen SieRange("A1").Font.ColorIndex = 3nur, wenn Sie mit Excels alter 56-Felder-Palette arbeiten — und mischen Sie die beiden nie, denn.Color = 3und.ColorIndex = 3sind völlig verschiedene Rottöne.
' Kopfzeile fett und dunkelblau machen - eine Anweisung pro Eigenschaft.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sales")
With ws.Range("A1:F1").Font
.Bold = True
.Color = RGB(0, 32, 96) ' 24-Bit-RGB - was Sie in 95% der Faelle wollen
.Size = 12
End With
Zu ändern, wie Text aussieht, ist das Erste, was die meisten in VBA automatisieren, und es ist
zugleich der Ort, an dem sich der verwirrendste Bug der ganzen Sprache versteckt — der Unterschied
zwischen .Color und .ColorIndex. Diese Anleitung dreht sich um eine Idee, die den Rest
offensichtlich macht: das Font-Objekt steuert nur das Aussehen, und seine Farb-Eigenschaft kommt
in zwei unverträglichen Geschmacksrichtungen. Bekommen Sie das klar, fügen sich Fett, Größe, Name
und Teilformatierung von selbst ein.
Was Sie lernen
- Das mentale Modell —
Fontist die Textebene und rührt den Wert nie an - Die wichtigste Regel —
.Color(RGB) und.ColorIndex(Palette) sind unterschiedliche Zahlenräume - Fett, Kursiv, Größe und Name — der Rest der Textebene, gesetzt mit
With - Einen Teil einer Zelle mit
Charactersformatieren, und wann es stillschweigend nichts tut - Warum wertbasiertes Färben zur bedingten Formatierung gehört, nicht in eine Schleife
- Eine Schriftfarbe zurücklesen, ohne eine überraschende Zahl zu bekommen
Das mentale Modell: Font ist die Textebene
Eine Zelle hat drei visuelle Ebenen, die VBA über drei verschiedene Objekte erreicht: den Text
(ihr Font), die Füllung dahinter (ihr Interior) und wie die Zahl
angezeigt wird (ihr NumberFormat). Diese Anleitung behandelt die
erste Ebene. Jede Eigenschaft unter Range.Font — Color, Bold, Italic, Underline, Size,
Name, Strikethrough — ändert, wie die Zeichen aussehen, und sonst nichts.
Das ist der ganze Punkt, und es lohnt sich, ihn klar auszusprechen, denn er ist die Wurzel eines
verbreiteten Missverständnisses: Text zu färben kennzeichnet ihn nicht. Eine Zelle, deren Schrift
Sie rot färben, hält weiterhin dieselbe Zahl, speist weiterhin dieselben Formeln und ist für SUM,
SUMIF und IF unsichtbar. Farbe ist für das menschliche Auge, nicht für Excels Rechen-Engine. Wenn
Sie sich je dabei ertappen, Schriftfarbe zu nutzen, um etwas zu bedeuten — „rote Zellen sind
überfällig“ —, dann legen Sie diese Bedeutung in einen echten Wert, den eine Formel lesen kann, und
lassen Sie die Farbe eine Folge davon sein.
Die wichtigste Regel: Color und ColorIndex sind unterschiedliche Zahlenräume
Hier ist das Eine, das Sie mitnehmen sollten. Es gibt zwei Farb-Eigenschaften auf Font, und sie
sprechen nicht dieselbe Sprache.
' .Color nimmt einen 24-Bit-RGB-Wert. Bauen Sie ihn mit RGB(rot, gruen, blau), je 0-255.
ws.Range("A1").Font.Color = RGB(200, 0, 0) ' ein kraeftiges Rot
' .ColorIndex nimmt einen Paletten-Platz, 1 bis 56, aus Excels alter Farbtabelle.
ws.Range("A2").Font.ColorIndex = 3 ' ebenfalls Rot - aber ein ANDERES Rot
Beide Zeilen färben Text rot, also wirken sie austauschbar. Sind sie nicht. .Color = 3 gäbe Ihnen
nicht das Rot von ColorIndex 3 — es gäbe Ihnen RGB(3, 0, 0), ein Fast-Schwarz. Die Zahl 3
bedeutet für ColorIndex „Paletten-Platz 3“ und für Color „den winzigen RGB-Wert 3“. Der einen
Eigenschaft die Zahl der anderen zu geben ist der Font-Bug Nummer eins, und er scheitert leise: kein
Fehler, nur die falsche Farbe.
Die Regel ist einfach. Setzen Sie Farbe mit .Color = RGB(r, g, b) — es deckt alle 16 Millionen
Farben ab und liest sich genau so, wie Sie es geschrieben haben. Greifen Sie nur in zwei Fällen zu
.ColorIndex: Sie gleichen eine bestehende, palettenbasierte Arbeitsmappe ab, oder Sie wollen einen
der zwei Sonderwerte, die kein RGB-Äquivalent haben:
ws.Range("A1").Font.ColorIndex = xlColorIndexAutomatic ' zurueck zur automatischen Farbe des Designs
ws.Range("A1").Font.ColorIndex = xlColorIndexNone ' (nur Interior, spaeter gezeigt)
xlColorIndexAutomatic ist wirklich nützlich — es setzt die Schriftfarbe auf „automatisch“ zurück
(meist Schwarz, aber designbewusst), was kein einzelner RGB-Wert ausdrückt. Für alles andere ist
.Color mit RGB die ehrliche Wahl.
Fett, Größe, Name: der Rest der Textebene
Die übrigen Font-Eigenschaften sind erfrischend langweilig — sie sind schlichte Booleans, Zahlen und
Zeichenketten. Weil Sie meist mehrere auf einmal setzen, hält With es lesbar und vermeidet, den
Bereich jedes Mal neu aufzulösen (derselbe Grund wie in VBA With):
With ws.Range("B2:B50").Font
.Bold = True
.Italic = False
.Underline = xlUnderlineStyleSingle
.Size = 11 ' Punkt
.Name = "Calibri"
.Color = RGB(0, 0, 0)
End With
Ein paar Dinge, die zu wissen sich lohnt. .Bold, .Italic und .Strikethrough sind
True/False. .Size ist in Punkt, nicht in Pixel. .Name ist die Schriftart als Zeichenkette,
und wenn Sie sie falsch schreiben oder eine nicht installierte Schrift benennen, ersetzt Excel sie
stillschweigend durch eine Standardschrift, statt einen Fehler auszulösen — ein „nichts
passiert“-Bug ist also meist ein Tippfehler im Schriftnamen.
Einen Teil einer Zelle formatieren: Characters()
Alles bisher formatiert die ganze Zelle. Um einen Teil des Textes zu gestalten — das erste Wort
fetten, ein Suffix färben — nehmen Sie Characters(start, length):
' Nur die ersten 4 Zeichen von A1 fetten.
ws.Range("A1").Characters(Start:=1, Length:=4).Font.Bold = True
Das ist mächtig, hat aber eine harte Grenze, die viele erwischt: Characters funktioniert nur auf
einer Zelle, die eine literale Zeichenkette hält. Enthält die Zelle eine Formel, eine Zahl oder ein
Datum, gibt es keine bearbeitbaren Zeichen anzusprechen, und der Aufruf tut nichts (oder wirft einen
Fehler). Teilformatierung ist eine Eigenschaft von eingetipptem Text, nicht von berechneten
Ergebnissen — sie ist also für Beschriftungen und Notizen, nicht für Zellen, die Ihr Code
überschreiben wird.
Färben Sie nicht per Schleife nach Wert — das ist Aufgabe der bedingten Formatierung
Das ist der meinungsstarke Teil, und er erspart den meisten Ärger. Das klassische Anfänger-Makro läuft einen Bereich ab und färbt Zellen, die eine Bedingung erfüllen:
' Verlockend, aber es veraltet, sobald sich die Daten aendern.
Dim c As Range
For Each c In ws.Range("B2:B1000")
If c.Value < 0 Then c.Font.Color = RGB(200, 0, 0)
Next c
Es funktioniert genau einmal. Die Farbe ist eine Momentaufnahme, die beim Lauf der Schleife entstand; ändern Sie danach einen Wert, ist die Formatierung nun falsch, denn nichts wertet sie neu aus. Wertgetriebene Farbe ist genau das, wofür die bedingte Formatierung existiert, und Sie können sie auch aus VBA einrichten:
' Die REGEL einmal setzen; Excel haelt sie fuer immer korrekt.
With ws.Range("B2:B1000").FormatConditions
.Delete
.Add(Type:=xlCellValue, Operator:=xlLess, Formula1:="0").Font.Color = RGB(200, 0, 0)
End With
Nutzen Sie eine direkte Font.Color-Schleife nur für statisches, einmaliges Markieren — einen
Bericht, den Sie gleich als PDF exportieren, eine Momentaufnahme, die Sie eingefroren haben wollen.
Sobald das Färben Live-Daten folgen soll, fügen Sie stattdessen einen FormatCondition hinzu. Zu
einer Schleife zu greifen, wo eine Regel hingehörte, ist der häufigste Grund, warum es „meine
Hervorhebung ist falsch“-Tickets gibt.
Eine Schriftfarbe zurücklesen
Farbe zu setzen ist leicht; sie zurückzulesen hat eine Falle. Setzen Sie mit .Color, lesen Sie mit
.Color; setzen Sie mit .ColorIndex, lesen Sie mit .ColorIndex. Die Eigenschaft zu lesen, die
Sie nicht gesetzt haben, gibt Ihnen eine übersetzte, oft überraschende Zahl:
ws.Range("A1").Font.Color = RGB(200, 0, 0)
Debug.Print ws.Range("A1").Font.Color ' 13312 (die 24-Bit-Zahl, = RGB 200,0,0)
Debug.Print ws.Range("A1").Font.ColorIndex ' 3 oder ein naher Paletten-Treffer - Excel naehert an
.Color gibt den exakten 24-Bit-Wert zurück (beachten Sie: intern wird er als BGR gespeichert,
ihn von Hand zu dekodieren ist also fummelig — vergleichen Sie gegen RGB(...), statt die Ganzzahl
mit dem Auge zu deuten). .ColorIndex auf einer mit .Color gefärbten Zelle gibt Excels nächste
Paletten-Schätzung zurück, die nicht unbedingt hin und zurück passt. Die Regel spiegelt die
Setz-Regel: Bleiben Sie in einem Zahlenraum. Wenn Ihr Code Schriftfarben sowohl setzt als auch
prüft, wählen Sie .Color und nutzen es auf beiden Seiten.
Wie ExcelMaster hilft
Schriftformatierung sieht trivial aus, bis sich die Details häufen: RGB gegenüber ColorIndex, ein
Schriftname, der stillschweigend zurückfällt, Characters, das auf einer Formelzelle nichts tut, und
eine Färbe-Schleife, die eine Regel der bedingten Formatierung hätte sein sollen. Jede scheitert
leise — die falsche Farbe, keine Änderung oder eine Hervorhebung, die aus der Zeit fällt.
ExcelMaster lässt Sie stattdessen
das Ergebnis beschreiben. Sagen Sie „mach die Kopfzeile fett und färbe negative Werte rot“ oder „hebe
Zeilen hervor, deren Status Overdue ist“, und es schreibt Font.Color = RGB(...) für einen statischen
Durchgang oder einen FormatCondition, wenn die Farbe den Daten folgen soll — und setzt den ganzen
Bereich auf einmal, statt zu schleifen. Sie behalten die Arbeitsmappe und den Code; Sie sparen sich
den Teil, in dem eine 3 in der falschen Eigenschaft alles im falschen Ton einfärbt.
Häufig gestellte Fragen
Wie ändere ich die Schriftfarbe in Excel VBA?
Nehmen Sie Range("A1").Font.Color = RGB(red, green, blue), mit jedem Wert von 0 bis 255 — zum
Beispiel RGB(200, 0, 0) für Rot. RGB deckt jede Farbe ab, setzt genau, was Sie angeben, und liest
sich gleich zurück. Nehmen Sie Range("A1").Font.ColorIndex = n (ein Paletten-Platz von 1 bis 56)
nur, wenn Sie eine alte, palettenbasierte Arbeitsmappe abgleichen, und gehen Sie nie davon aus, dass
die zwei Zahlen dieselbe Farbe meinen.
Was ist der Unterschied zwischen Font.Color und Font.ColorIndex?
.Color nimmt eine 24-Bit-RGB-Zahl, gebaut mit RGB(r, g, b), und gibt Zugriff auf alle 16
Millionen Farben. .ColorIndex nimmt einen Index in Excels alte 56-Farben-Palette. Dieselbe Ganzzahl
bedeutet für beide Verschiedenes — .Color = 3 ist das Fast-Schwarz RGB(3,0,0), während
.ColorIndex = 3 Rot ist. Bevorzugen Sie .Color zum Setzen und lesen Sie mit derselben
Eigenschaft zurück, mit der Sie gesetzt haben.
Wie mache ich eine Zelle in VBA fett?
Range("A1").Font.Bold = True, und False, um es zu entfernen. Bold, Italic und
Strikethrough sind alle True/False-Eigenschaften des Font-Objekts. Um mehrere
Font-Eigenschaften auf einmal zu setzen, umschließen Sie sie mit einem
With Range(...).Font ... End With-Block, sodass Sie den Bereich nur einmal benennen.
Wie färbe ich nur einen Teil des Textes in einer Zelle?
Nehmen Sie Range("A1").Characters(Start:=1, Length:=4).Font.Bold = True, um eine Teilzeichenkette
zu gestalten. Das funktioniert nur, wenn die Zelle eingetippten Text enthält — auf einer Formel, Zahl
oder einem Datum gibt es keine bearbeitbaren Zeichen, und der Aufruf tut nichts. Nutzen Sie es für
Beschriftungen und Notizen, nicht für Zellen, die Ihr Code neu berechnen wird.
Warum stimmt meine VBA-Färbung nicht mehr, wenn ich das Blatt bearbeite?
Weil eine Font.Color-Schleife eine einmalige Momentaufnahme malt; sie läuft nicht erneut, wenn sich
die Daten ändern. Für Farbe, die Werten folgen soll — negative Werte in Rot, überfällige Zeilen
hervorgehoben — fügen Sie eine Regel der bedingten Formatierung mit Range(...).FormatConditions.Add
hinzu, die Excel automatisch neu auswertet. Nutzen Sie eine direkte Färbe-Schleife nur für einen
statischen Export, den Sie einfrieren wollen.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 11.08.2026.
Verwandte Anleitungen: VBA Zellfarbe · VBA NumberFormat · VBA With · VBA Range · VBA For-Schleife
