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

VBA Evaluate in Excel — Eine Formel-Zeichenfolge in einen Wert verwandeln

|

VBA Evaluate in Excel — Eine Formel-Zeichenfolge in einen Wert verwandeln

TL;DR — Evaluate("SUM(A1:A10)") übergibt eine Formel als Text an Excels Berechnungsmaschine und gibt das Ergebnis zurück. Die Kurzform [ ] — [A1], [SUM(A1:A10)] — ist buchstäblich ein verkapptes Evaluate. Der entscheidende Unterschied: Klammern sind fester Text, Sie können also keine Variable in sie einsetzen; Evaluate(aString) nimmt eine Zeichenfolge, die Sie zur Laufzeit bauen. Eine fehlerhafte Formel kommt als Error-Variante zurück, nicht als Absturz, prüfen Sie sie also mit IsError, bevor Sie sie verwenden. Greifen Sie dazu, um eine im Code zusammengesetzte Formel auszuführen — sonst ist eine normale Zellformel oder WorksheetFunction klarer.

Sub EvaluateAFormula()
    Dim result As Variant
    result = Evaluate("SUM(A1:A10)")      ' Excel berechnet sie, genau wie eine Zelle
    If IsError(result) Then
        MsgBox "That formula did not compute"
    Else
        MsgBox "Total: " & result
    End If
End Sub

Die anderen beiden Werkzeuge dieser Familie führen Code über den Namen aus — Application.Run führt ein Makro aus, CallByName führt ein Mitglied aus. Evaluate vervollständigt das Trio, indem es eine Formel ausführt: Sie reichen Excel einen Arbeitsblattausdruck als Text, und es berechnet die Antwort mit genau derselben Maschine, die auch Ihre Zellen nutzen. Das ist die eine Idee hinter allen dreien — aus einer Zeichenfolge wird zur Laufzeit eine ausgeführte Aktion — und Evaluate ist die am stärksten nach Excel schmeckende Ausprägung davon, weil die Zeichenfolge, die Sie übergeben, einfach eine Formel ist, die Sprache, die Sie aus dem Tabellenraster schon kennen. Dieselbe Warnung gilt weiter: Weil die Formel Text ist, prüft sie nichts, bis sie läuft, übergeben Sie Evaluate also nur einen Ausdruck, den Sie selbst gebaut oder validiert haben.

Was Sie lernen

  • Wo Evaluate neben Application.Run und CallByName steht
  • Die Kurzschreibweise [ ] mit eckigen Klammern und warum sie dieselbe Methode ist
  • Der entscheidende Unterschied: Klammern sind fester Text, Evaluate nimmt eine Laufzeit-Zeichenfolge
  • Die Error-Variante lesen, die eine fehlerhafte Formel zurückgibt, mit IsError
  • Den Aufruf auf das richtige Blatt qualifizieren, damit Verweise dort aufgelöst werden, wo Sie es meinen
  • Wann Sie Evaluate statt WorksheetFunction oder einer Zellformel verwenden

Das mentale Modell: sich die Berechnungsmaschine des Arbeitsblatts ausleihen

Alles in Excel, das einen Wert berechnet — jedes =SUM(...), jedes =VLOOKUP(...) —, läuft durch eine einzige Berechnungsmaschine. Evaluate ist eine Tür in diese Maschine hinein, aus VBA heraus. Sie übergeben eine Formel so, wie Sie sie in eine Zelle tippen würden (mit oder ohne führendes =), und Excel wertet sie aus und gibt Ihnen das Ergebnis als Variant:

d = Evaluate("TODAY()")                    ' ein Datum
n = Evaluate("2*PI()*10")                  ' eine Zahl
r = Evaluate("VLOOKUP(""Ada"", A:B, 2, 0)") ' ein Lookup, Anfuehrungszeichen fuer die Zeichenfolge verdoppelt

Die gedankliche Verschiebung ist, dass Sie hier keine VBA-Logik schreiben — Sie schreiben eine Excel-Formel und bitten Excel, sie auszuführen. Alles, was in einer Zelle gültig ist, ist auch innerhalb von Evaluate gültig, auch Funktionen, die kein VBA-Äquivalent haben.

Die Kurzschreibweise mit eckigen Klammern ist ein verkapptes Evaluate

Das überrascht fast jeden: Die [ ]-Notation, die Sie in den Makros anderer gesehen haben, ist kein spezieller Operator. Sie ist eine Kurzform für Evaluate. Diese beiden Zeilen sind identisch:

x = [SUM(A1:A10)]          ' Kurzform
x = Evaluate("SUM(A1:A10)") ' was es tatsaechlich tut

[A1] ist Evaluate("A1"), [Sales] (ein benannter Bereich) ist Evaluate("Sales"), und [1+2] ist Evaluate("1+2"), was 3 zurückgibt. Die Klammern als Evaluate zu sehen ist der Aha-Moment, der diese Seite mit dem Rest der Familie verbindet: Selbst die schicke Kurzform ist unter der Oberfläche zeichenfolgengesteuerte Indirektion.

Der entscheidende Unterschied: Klammern sind fest, Evaluate nimmt eine Variable

Hier ist die eine Regel, die entscheidet, welche Form Sie nehmen, und der häufigste Punkt der Verwirrung. Der Text innerhalb von [ ] ist wörtlich — Sie können keine Variable hineinverketten, weil die Klammern keine Zeichenfolge sind:

Dim col As String: col = "B"
' WRONG - you cannot build a bracket expression from a variable:
' total = [SUM(col & "1:" & col & "10")]     ' tut nicht, was Sie hoffen

' RIGHT - build the string, then Evaluate it:
total = Evaluate("SUM(" & col & "1:" & col & "10)")   ' SUM(B1:B10)

Die Wahl ist also mechanisch: Nehmen Sie [ ], wenn die ganze Formel eine Konstante ist, die Sie einmal tippen — das ist kürzer und liest sich gut. Nehmen Sie Evaluate(...), sobald irgendein Teil der Formel zur Laufzeit aus Variablen, Zellwerten oder Benutzereingaben gebaut wird. Das ist der gesamte praktische Unterschied zwischen den beiden Formen, und die Klammerform für eine dynamische Formel zu wählen ist der Grund, warum Leute schlussfolgern, „die Klammern sind kaputt", obwohl sie schlicht das falsche Werkzeug für eine Variable sind.

Das Ergebnis lesen: eine fehlerhafte Formel gibt eine Error-Variante zurück

Evaluate löst keinen Laufzeitfehler aus, wenn die Formel falsch ist — es liefert eine Error-Variante zurück, die VBA-Form von #NAME?, #REF!, #DIV/0! und Konsorten. Wenn Sie das Ergebnis ohne Prüfung verwenden, breitet sich der Fehler still aus:

Dim result As Variant
result = Evaluate("SUM(Nonexistent)")     ' gibt eine Error-Variante zurueck, stuerzt nicht ab
If IsError(result) Then
    MsgBox "Formula error - check the expression"
Else
    ' result kann sicher verwendet werden
End If

Sichern Sie einen zur Laufzeit gebauten Ausdruck immer mit IsError ab, bevor Sie dem Wert trauen. Das ist das umgekehrte Verhalten von WorksheetFunction, das bei einem Fehlschlag einen abfangbaren Laufzeitfehler auslöst — ein Unterschied, den man kennen sollte, wenn man zwischen beiden wählt.

Qualifizieren Sie den Aufruf, damit Verweise dort aufgelöst werden, wo Sie es meinen

Ein unqualifiziertes Evaluate (und jede [ ]-Kurzform) löst seine Verweise gegen das aktive Blatt auf. Ist das aktive Blatt nicht das gemeinte, liest Evaluate("A1") die falsche Zelle — ein subtiler Bug, wenn ein Makro von einem anderen Blatt aus läuft als dem, auf dem der Entwickler getestet hat. Qualifizieren Sie den Aufruf, um ihn festzunageln:

' Resolves A1:A10 on Sheet1 no matter which sheet is active:
total = Worksheets("Sheet1").Evaluate("SUM(A1:A10)")

Worksheet.Evaluate und Workbook.Evaluate lassen Sie sagen, wo die Formel läuft. Sich auf das aktive Blatt zu verlassen ist für einen schnellen Einmalfall in Ordnung; für alles, was in Produktion geht, qualifizieren Sie den Aufruf, damit er nicht davon abhängt, worauf der Benutzer zuletzt zufällig geklickt hat.

Evaluate, WorksheetFunction oder eine Zellformel

Drei Wege, einen berechneten Wert zu bekommen, drei Aufgaben. Eine Zellformel ist richtig, wenn das Ergebnis auf das Blatt gehört und sich neu berechnen soll — setzen Sie =SUM(A1:A10) in eine Zelle. WorksheetFunction ist richtig, wenn Sie eine bestimmte Funktion aus VBA mit IntelliSense und einem sauberen, abfangbaren Fehler wollen: WorksheetFunction.Sum(Range("A1:A10")). Evaluate ist richtig, wenn der Ausdruck selbst dynamisch ist — Sie haben die Formel-Zeichenfolge zur Laufzeit gebaut — oder wenn Sie eine Arbeitsblattfunktion brauchen, die WorksheetFunction nicht bereitstellt. Ist die Formel eine Konstante und existiert die Funktion auf WorksheetFunction, bevorzugen Sie WorksheetFunction; es ist klarer, und seine Fehler sind leichter zu behandeln.

Wie ExcelMaster hilft

Die Fallen hier sind still: eine Klammerform, die Ihre Variable stillschweigend ignoriert, eine Error-Variante, die verwendet wird, als wäre sie eine Zahl, ein unqualifizierter Verweis, der das falsche Blatt liest. Keine davon meldet sich von selbst.

ExcelMaster lässt Sie die Berechnung in klaren Worten beschreiben — „summiere diese Spalte, welche Spalte der Bericht auch gewählt hat, und markiere es, wenn die Formel fehlschlägt" — und schreibt den Evaluate-Code, der die Zeichenfolge sicher baut, sie mit IsError prüft und das Blatt qualifiziert. Sie behalten die Arbeitsmappe und den Code und ersparen sich die stille falsche Antwort.

Häufig gestellte Fragen

Was macht Evaluate in VBA?

Evaluate("expression") übergibt eine als Text geschriebene Excel-Arbeitsblattformel an Excels Berechnungsmaschine und gibt das berechnete Ergebnis als Variant zurück. Alles, was in einer Zelle gültig ist, funktioniert darin. Nutzen Sie es, um eine zur Laufzeit zusammengesetzte Formel auszuführen oder um eine Arbeitsblattfunktion zu erreichen, die WorksheetFunction nicht bereitstellt.

Was bedeuten die eckigen Klammern in VBA?

Die [ ]-Notation ist eine Kurzform für Evaluate: [A1] ist Evaluate("A1") und [SUM(A1:A10)] ist Evaluate("SUM(A1:A10)"). Sie ist kürzer für konstante Ausdrücke, aber der Text darin ist wörtlich — Sie können keine Variable in Klammern hineinverketten. Sobald irgendein Teil der Formel dynamisch ist, nehmen Sie stattdessen die volle Form Evaluate(aString).

Warum kann ich keine Variable in die eckigen Klammern setzen?

Weil [ ] keine Zeichenfolge ist — es ist fester Text, der direkt an Evaluate gereicht wird, sodass [col & "1"] keinen Verweis aus col baut. Bauen Sie die Formel als Zeichenfolge und übergeben Sie sie an Evaluate: Evaluate("SUM(" & col & "1:" & col & "10)"). Das ist der ganze Grund, warum die volle Form neben der Kurzform existiert.

Wie prüfe ich, ob Evaluate einen Fehler zurückgegeben hat?

Evaluate gibt bei einer fehlerhaften Formel eine Error-Variante zurück, statt einen Laufzeitfehler auszulösen, prüfen Sie das Ergebnis also mit IsError(result), bevor Sie es verwenden. Das unterscheidet sich von WorksheetFunction, das stattdessen einen abfangbaren Fehler auslöst — wählen Sie danach, ob Sie lieber einen Wert prüfen oder eine Ausnahme behandeln.

Sollte ich Evaluate oder WorksheetFunction verwenden?

Nehmen Sie WorksheetFunction, wenn die Funktion dort existiert und die Formel fest ist — es bietet IntelliSense und einen abfangbaren Fehler. Nehmen Sie Evaluate, wenn der Ausdruck zur Laufzeit gebaut wird oder wenn Sie eine Arbeitsblattfunktion brauchen, die WorksheetFunction nicht bereitstellt. Für einen Wert, der auf dem Blatt leben und sich neu berechnen soll, nehmen Sie eine normale Zellformel statt eines von beiden.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 27.09.2026.

Verwandte Anleitungen: VBA Application.Run · VBA CallByName · VBA WorksheetFunction · VBA Range · VBA On Error · VBA Function · VBA Dictionary