TL;DR —
Range("D2").Formula = "=B2*C2"setzt eine lebende Formel in eine Zelle, im Gegensatz zu.Value, das ein statisches Ergebnis setzt. Die Regel, über die jeder stolpert:.Formulasind immer US-englische Funktionsnamen und Kommatrennzeichen, welche Sprache der Nutzer auch hat.=SUM(A1,B1)funktioniert überall, und Excel lokalisiert die Anzeige; ein deutsches=SUMME(A1;B1)löst error 1004 aus. Nehmen Sie.FormulaR1C1, um eine relative Formel über einen ganzen Range zu stempeln, und vergessen Sie nie das führende=.
Range("D2").Formula = "=B2*C2" ' eine lebende Formel - Excel wertet sie aus
Range("E2").Formula = "=IF(D2>100,""Big"",""OK"")" ' Anfuehrungszeichen innen sind verdoppelt
' eine relative Formel in einem Zug eine ganze Spalte hinunter stempeln:
Range("D2:D1000").FormulaR1C1 = "=RC[-2]*RC[-1]" ' jede Zeile: zwei Zellen nach links
Eine Formel aus dem Code in eine Zelle zu setzen sieht aus wie das Zuweisen von Text, und mechanisch ist
es das auch — Sie reichen .Formula eine Zeichenkette. Aber diese Zeichenkette lebt in einem festen
Dialekt, und das ist die Idee, auf der diese Anleitung aufbaut: .Formula nutzt immer US-englische
Funktionsnamen und Kommatrennzeichen, unabhängig vom Gebietsschema des Nutzers, und Excel übersetzt die
Anzeige für Sie. Sobald Sie das halten, ergeben die 1004-Fehler, die .FormulaLocal-Frage und die
R1C1-Form alle einen Sinn.
Was Sie lernen
- Das mentale Modell —
.Formulaschreibt eine lebende Formel in einem festen Dialekt - Die wichtigste Regel — englische Funktionsnamen und Kommas, immer
.FormulaLocal— wann Sie wirklich die Sprache und Trennzeichen des Nutzers brauchen.FormulaR1C1— eine relative Formel über einen ganzen Range stempeln- Das führende
=ist Pflicht, und Anführungszeichen innen müssen verdoppelt werden - Eine Formel zurücklesen, und
.HasFormula
Das mentale Modell: eine lebende Formel in einem festen Dialekt
.Value speichert ein Ergebnis; .Formula speichert ein Rezept, das Excel neu berechnet. .Formula
zuzuweisen ist der Weg, wie Code Tabellen erzeugt, die weiterarbeiten, nachdem das Makro endet:
Range("C2").Value = 42 ' eine statische Zahl
Range("C2").Formula = "=A2+B2" ' eine Formel - aktualisiert sich, wenn A2 oder B2 sich aendern
Die Zeichenkette, die Sie zuweisen, ist in einem kanonischen Dialekt geschrieben: US-englische
Funktionsnamen (SUM, VLOOKUP, IF) und Kommas zwischen den Argumenten — selbst auf einer
Maschine, deren Excel-Oberfläche SUMME zeigt und Semikolons nutzt. Excel speichert die Formel in dieser
neutralen Form und zeigt sie in der Sprache des Nutzers an. So erzeugt dieselbe Zeile VBA eine korrekte,
lokalisierte Formel für jeden Nutzer auf der Welt, was genau der Grund ist, warum der Dialekt fest ist. In
dem Moment, in dem Sie stattdessen in der Sprache des Nutzers zu schreiben versuchen, treffen Sie auf den
Fehler unten.
Die wichtigste Regel: englische Namen, Kommas, immer
Das ist die eine Tatsache, die ein funktionierendes Makro auf der Maschine eines Kollegen in einen 1004
verwandelt. .Formula akzeptiert nur US-englische Funktionsnamen und nur das Komma als
Argumenttrennzeichen:
Range("A1").Formula = "=SUM(B1:B10)" ' korrekt auf JEDER Maschine
Range("A1").Formula = "=SUMME(B1;B10)" ' deutsche Namen + Semikolons -> run-time error 1004
Zwei Dinge sind festgelegt, nicht eins. Die Funktionsnamen sind englisch (SUM, nicht SUMME oder
SOMME), und das Listentrennzeichen ist immer ein Komma — selbst in Regionen, in denen die
Excel-Oberfläche ein Semikolon nutzt und das Dezimalzeichen ein Komma ist. In diesem festen Dialekt zu
schreiben ist ein Vorteil: Schreiben Sie .Formula = "=SUM(...)" einmal, und es ist korrekt für einen
deutschen, französischen oder spanischen Nutzer, die es jeweils in ihrer eigenen Sprache sehen. Wenn
eine aus englischen Namen gebaute Formel-Zeichenkette trotzdem einen Fehler wirft, ist der übliche
Übeltäter das Trennzeichen — ein verirrtes Semikolon, das vom Kopieren der Formel aus einer lokalisierten
Excel-Oberfläche stammt.
.FormulaLocal: wenn Sie die Sprache des Nutzers wollen
Es gibt eine Schwestereigenschaft, .FormulaLocal, die in der Sprache und den Trennzeichen des
Nutzers liest und schreibt:
' auf einer deutschen Maschine:
Range("A1").FormulaLocal = "=SUMME(B1;B10)" ' deutsche Namen + Semikolons - hier OK
Debug.Print Range("A1").Formula ' liest sich zurueck als "=SUM(B1:B10)"
.FormulaLocal ist das richtige Werkzeug, wenn Sie genau das wiedergeben, was der Nutzer getippt hat,
oder eine Oberfläche bauen, die Formeln in seiner Sprache zeigt. Aber es macht Ihren Code nicht
portabel — dieselbe Zeichenkette, die auf einer deutschen Maschine funktioniert, scheitert auf einer
englischen. Die praktische Regel: schreiben Sie mit .Formula (englisch, Kommas) für alles, was Sie
ausliefern, und greifen Sie nur dann zu .FormulaLocal, wenn Sie ausdrücklich den Dialekt des Nutzers
sprechen müssen. Wenn Sie die Formel einer Zelle zur Anzeige lesen, gibt .FormulaLocal dem Leser seine
eigene Sprache; wenn Sie sie zum Vergleichen oder Speichern lesen, gibt .Formula Ihnen die stabile,
neutrale Form.
.FormulaR1C1: eine relative Formel für einen ganzen Range
Wenn Sie eine Formel über viele Zeilen erzeugen, zwingt Sie der A1-Stil, über die Referenzen jeder Zeile nachzudenken. Die R1C1-Notation beschreibt Referenzen als Versätze von der aktuellen Zelle, sodass eine Zeichenkette für jede Zelle im Range korrekt ist:
' A1-Stil - die Referenz ist woertlich, angepasst, wenn Excel sie nach unten kopiert:
Range("D2:D1000").Formula = "=B2*C2" ' Excel verschiebt B2/C2 pro Zeile
' R1C1-Stil - die Referenz ist ein Versatz, in jeder Zeile identisch:
Range("D2:D1000").FormulaR1C1 = "=RC[-2]*RC[-1]" ' "zwei Zellen links mal eine Zelle links"
RC[-2] bedeutet „gleiche Zeile, zwei Spalten nach links"; R[-1]C bedeutet „eine Zeile hoch, gleiche
Spalte"; eine Zahl ohne Klammern wie R1C1 ist absolut (entspricht $A$1). Beide Zeilen oben
erzeugen dasselbe Ergebnis, aber R1C1 ist eindeutig für erzeugte Formeln: Sie verfolgen nicht im Kopf, wie
Excel B2 in Zeile 837 anpasst. Für alles, was Ihr Code über einen Range schreibt, ist R1C1 meist die
klarere Wahl, und es ist die Notation, die der Makrorekorder ausgibt. Siehe
VBA Range für das Bauen des Ziel-Range.
Das führende = und verdoppelte Anführungszeichen
Zwei mechanische Fallen erwischen jeden Anfänger. Erstens muss die Zeichenkette mit = beginnen,
sonst speichert Excel sie als wörtlichen Text, nicht als Formel, ohne einen Fehler, der Sie warnt:
Range("A1").Formula = "SUM(B1:B10)" ' kein "=" -> die Zelle zeigt woertlich den Text SUM(B1:B10)
Range("A1").Formula = "=SUM(B1:B10)" ' korrekt
Zweitens, weil die ganze Formel eine VBA-Zeichenkette in doppelten Anführungszeichen ist, müssen alle Anführungszeichen in der Formel verdoppelt werden:
Range("A1").Formula = "=IF(B1="""",""empty"",B1)" ' jedes "" ist ein woertliches Anfuehrungszeichen in der Formel
Das erscheint in der Zelle als =IF(B1="","empty",B1). Die Anführungszeichen falsch zu zählen ist der
zweithäufigste 1004 nach dem Trennzeichen-Problem. Wenn eine Formel-Zeichenkette lang und
anführungszeichenlastig wird, bauen Sie sie in Teilen oder nutzen einen Helfer, der die Anführungszeichen
für Sie maskiert.
Eine Formel zurücklesen
.Formula liest ebenso, wie es schreibt. Auf einer Zelle, die eine Formel hält, liefert es die
Formel-Zeichenkette; auf einer Zelle, die eine Konstante hält, liefert es den Wert als Zeichenkette:
Debug.Print Range("D2").Formula ' "=B2*C2" wenn D2 eine Formel hat, sonst z. B. "100"
Debug.Print Range("D2").HasFormula ' True nur, wenn es wirklich eine Formel ist
Nutzen Sie .HasFormula, um zu wissen, welches von beiden Sie haben, bevor Sie auf die Zeichenkette
reagieren — es ist True nur für eine echte Formel, False für eine Konstante. Das ist der zuverlässige
Weg, eine berechnete Zelle von einer getippten zu unterscheiden, und es passt natürlich zum Lesen der
zugrunde liegenden Zahl über .Value oder .Value2, behandelt in
VBA Value vs Value2 vs Text. Wenn Sie stattdessen die Antwort in einer
VBA-Variablen wollen, ohne je eine Formel in eine Zelle zu setzen, rufen Sie die Funktion direkt über
VBA WorksheetFunction auf — das ist der Weg „Ergebnis in einer
Variablen", während .Formula der Weg „lebende Formel in der Zelle" ist.
Wie ExcelMaster hilft
Die .Formula-Bugs, die einen Nachmittag kosten, sind die stillen: ein Semikolon, das auf Ihrer Maschine
funktioniert und auf der eines Kollegen einen 1004 wirft, ein fehlendes =, das eine Formel in Text
verwandelt, ein falsch gezähltes "" tief in einem verschachtelten IF und eine A1-Formel, über 1.000
Zeilen gestempelt mit um eins verschobenen Referenzen. Jeder ist ein Zeichenketten-Detail, unsichtbar, bis
es läuft.
ExcelMaster schreibt
Formel-Zeichenketten, die auf jeder Maschine korrekt sind. Beschreiben Sie die Formel — „multipliziere die
zwei Spalten links, die ganze Tabelle hinunter" — und es gibt .Formula im neutralen US-englischen
Dialekt aus, oder .FormulaR1C1, wenn die Formel relativ und erzeugt ist, mit dem führenden = und jedem
internen Anführungszeichen korrekt verdoppelt. Es weiß, wann Sie tatsächlich .FormulaLocal wollen und
wann Sie in Wahrheit die Antwort in einer Variablen über WorksheetFunction wollten. Sie beschreiben die
Berechnung; es schreibt die Zeichenkette, die überall läuft.
Häufig gestellte Fragen
Wie setze ich eine Formel in eine Zelle mit VBA?
Weisen Sie der Formula-Eigenschaft eine Zeichenkette zu, die mit = beginnt:
Range("D2").Formula = "=B2*C2". Nutzen Sie US-englische Funktionsnamen und Kommas — =SUM(A1,B1),
keinen lokalisierten Namen oder Semikolons — und Excel zeigt die Formel automatisch in der Sprache des
Nutzers an. Um dieselbe Formel über einen ganzen Range zu schreiben, weisen Sie sie dem Range zu; für
relative, erzeugte Formeln nutzen Sie .FormulaR1C1.
Warum wirft meine VBA-Formel run-time error 1004?
Die häufigste Ursache ist das Schreiben in einem lokalisierten Dialekt: .Formula verlangt US-englische
Funktionsnamen und Kommatrennzeichen, also scheitert =SUMME(A1;B1), während =SUM(A1,B1) funktioniert.
Weitere Ursachen sind ein fehlendes führendes = oder unausgeglichene Anführungszeichen in der
Formel-Zeichenkette (jedes wörtliche Anführungszeichen muss als "" verdoppelt werden). Wenn Sie in der
Sprache und den Trennzeichen des Nutzers schreiben müssen, nutzen Sie stattdessen .FormulaLocal.
Was ist der Unterschied zwischen .Formula und .FormulaR1C1?
Beide schreiben eine lebende Formel; sie unterscheiden sich im Referenzstil. .Formula nutzt die
A1-Notation (=B2*C2), in der Referenzen wörtliche Zellen sind. .FormulaR1C1 nutzt die R1C1-Notation
(=RC[-2]*RC[-1]), in der Referenzen Versätze von der aktuellen Zelle sind, sodass eine Zeichenkette für
jede Zelle in einem Range korrekt ist. R1C1 ist klarer für Formeln, die Ihr Code über viele Zeilen
erzeugt, und es ist das, was der Makrorekorder produziert.
Was ist der Unterschied zwischen .Formula und .FormulaLocal in VBA?
.Formula nutzt immer US-englische Funktionsnamen und Kommatrennzeichen, also ist es portabel — dieselbe
Zeichenkette funktioniert auf jeder Maschine. .FormulaLocal nutzt die Sprache und das Listentrennzeichen
des Nutzers, sodass =SUMME(A1;B1) auf einer deutschen Maschine funktioniert, aber auf einer englischen
scheitert. Nutzen Sie .Formula für Code, den Sie ausliefern, und .FormulaLocal nur, wenn Sie
ausdrücklich Formeln in der eigenen Sprache des Nutzers lesen oder schreiben müssen.
Wie lese ich die Formel einer Zelle in VBA?
Lesen Sie die Formula-Eigenschaft: s = Range("D2").Formula liefert die Formel-Zeichenkette (wie
"=B2*C2") für eine Formelzelle oder den Wert als Text für eine Konstante. Prüfen Sie zuerst
Range("D2").HasFormula — es liefert True nur, wenn die Zelle tatsächlich eine Formel enthält, sodass
Sie eine berechnete Zelle von einer getippten unterscheiden können, bevor Sie auf die Zeichenkette
reagieren.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 31.08.2026.
Verwandte Anleitungen: VBA Cell Value · VBA Value vs Value2 vs Text · VBA WorksheetFunction · VBA Range · VBA VLOOKUP
