🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Font in Excel — Farbe, Fett und Größe im Code setzen (und die ColorIndex-Falle)

|

VBA Font in Excel — Farbe, Fett und Größe im Code setzen (und die ColorIndex-Falle)

Kurz gesagtRange.Font ist 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 Sie Range("A1").Font.Color = RGB(200, 0, 0) für jede beliebige Farbe. Nehmen Sie Range("A1").Font.ColorIndex = 3 nur, wenn Sie mit Excels alter 56-Felder-Palette arbeiten — und mischen Sie die beiden nie, denn .Color = 3 und .ColorIndex = 3 sind 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 — Font ist 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 Characters formatieren, 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.FontColor, 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