TL;DR —
Const VAT_RATE As Double = 0.19gibt einem festen Wert einen Namen, der zur Compilezeit verankert ist. Während eine Variable eine Box ist, die Sie neu befüllen können, ist eine Konstante ein aufgemaltes Etikett — überall lesbar, während der Makro-Laufzeit nirgends übermalbar. Diese Unveränderlichkeit ist der ganze Sinn: Sie macht aus einer über acht Formeln verstreuten magischen Zahl eine einzige verbindliche Quelle. Der Versuch, eineConstneu zuzuweisen, ist ein Compilerfehler („Zuweisung zu Konstante nicht zulässig“) — und dieser Fehler ist das Feature, nicht eine Einschränkung. Für eine Familie verwandter fester Werte (Status, Spaltennummern) nutzen Sie einEnumstatt vieler einzelnerConsts.
Const VAT_RATE As Double = 0.19 ' ein Ort, eine Wahrheit
Const MAX_ROWS As Long = 10000
Const REPORT_TAB As String = "Summary"
Sub ShowRate()
Debug.Print "MwSt. beträgt " & VAT_RATE * 100 & "%" ' -> MwSt. beträgt 19%
End Sub
Jedes Makro steckt voller literaler Werte: ein Steuersatz, eine
Kopfzeilennummer, ein Blattname, ein Schwellenwert. Inline getippt, ist jeder
davon eine magische Zahl — ein nacktes 0.19 oder 7, dessen Bedeutung Sie
raten müssen und dessen Wert Sie aufspüren müssen, wenn er sich ändert. Const
ist die Kur, und es ist eines der billigsten Qualitäts-Upgrades, die Sie an einem
Makro vornehmen können.
Was Sie lernen
- Warum magische Zahlen eine Wartungsfalle sind und wie
Constdas an einer einzigen Stelle behebt - Warum das Neuzuweisen einer
Constein Compilerfehler ist — und warum genau das gewollt ist - Die Compilezeit-Regel: eine
Constdarf ein Literal sein, kein Funktionsaufruf und kein Zellwert Public Constfür Werte, die Ihr ganzes Projekt teilt- Wann Sie von vielen
Consts auf ein einzelnesEnumumsteigen
Das mentale Modell: eine Konstante ist ein aufgemaltes Etikett, keine Box, die Sie neu befüllen
Eine Variable und eine Konstante sehen ähnlich aus, verhalten sich aber gegensätzlich. Eine Variable ist eine Box: Sie legen einen Wert hinein und können ihn später gegen einen anderen tauschen. Eine Konstante ist ein auf einen Wert gemaltes Etikett — im Moment des Kompilierens. Jeder kann das Etikett von überall lesen, wo es im Gültigkeitsbereich liegt — aber nichts kann es übermalen, während der Code läuft. Der Wert ist eingefroren.
Dieses Eingefrorensein ist keine Einschränkung, die man umgehen müsste; es ist die
Garantie, die Sie kaufen. Wenn Sie Const VAT_RATE = 0.19 schreiben, sagen Sie
sowohl dem Compiler als auch dem nächsten Leser: Diese Zahl hat eine Bedeutung,
sie lebt an einer Stelle, und sie ändert sich nicht heimlich unter Ihren Händen.
Alles Gute an Konstanten fließt aus diesem Versprechen.
Die Regel, die sich bezahlt macht: magische Zahlen driften, Konstanten nicht
Hier ist das Problem, das Const löst. Angenommen, 0.2 — ein MwSt.-Satz — ist
direkt in acht verschiedene Formeln über Ihre Makros hinweg getippt:
' Magische Zahl 0.2 überall verstreut — eine Satzänderung heißt, alle acht aufzuspüren
gross = net * 1.2
vat = net * 0.2
' ...sechs weitere Stellen, jede mit einem nackten 0.2...
Jetzt ändert sich der Satz auf 0.19. Sie müssen jede einzelne finden und
bearbeiten. Übersehen Sie nur eine Stelle, bekommen Sie eine stille falsche
Summe — kein Fehler, nur Zahlen, die nicht aufgehen, in einem Bericht und im
anderen nicht. Und ein Leser sechs Monate später hat keine Ahnung, ob dieses 0.2
MwSt., ein Rabatt oder eine Provision ist.
Eine Konstante behebt das alles:
Const VAT_RATE As Double = 0.19 ' hier einmal ändern, und jede Stelle aktualisiert sich
gross = net * (1 + VAT_RATE)
vat = net * VAT_RATE
Der Wert lebt an genau einer Stelle, der Name dokumentiert seine Bedeutung, und
eine Satzänderung ist eine Ein-Zeilen-Bearbeitung, die nicht halb erledigt werden
kann. Jedes Literal, das mehr als einmal vorkommt oder dessen Bedeutung sich
nicht aus dem Kontext ergibt, sollte eine Const sein.
Die Regel, die eigentlich ein Feature ist: Sie können einer Const nichts zuweisen
Versuchen Sie, eine Konstante zu ändern, weigert sich VBA — zur Compilezeit, noch bevor das Makro läuft:
Const TAX As Double = 0.2
Sub Oops()
TAX = 0.25 ' Compilerfehler: Zuweisung zu Konstante nicht zulässig
End Sub
Anfänger lesen diesen Fehler manchmal so, als sei VBA zickig. Es ist das
Gegenteil: Der Compiler garantiert, dass sich der Wert nie ändert — genau der
Grund, aus dem Sie eine Konstante deklariert haben. Ertappen Sie sich beim Wunsch,
sie neu zuzuweisen, dann war es nie wirklich eine Konstante — es ist eine Variable,
die sich zur Laufzeit ändert, also deklarieren Sie sie mit Dim. Die
Unterscheidung ist die ganze Entscheidung: Ändert sich dieser Wert, während das
Makro läuft? Wenn ja, Dim. Wenn nein, Const.
Die Regel, die überrascht: Const wird zur Compilezeit ausgewertet
Weil das Etikett beim Kompilieren aufgemalt wird, kann eine Konstante nur auf etwas gesetzt werden, das der Compiler bereits kennt: ein Literal oder einen Ausdruck aus anderen Konstanten. Sie kann kein Funktionsaufruf, kein Blattwert und nichts sein, das erst während der Makro-Laufzeit berechnet wird.
' FUNKTIONIERT — Literal oder Ausdruck aus Literalen/anderen Konstanten
Const PI As Double = 3.14159
Const TWO_PI As Double = 2 * PI
Const HEADER As String = "Report — " & "2026"
' SCHLÄGT FEHL — braucht Laufzeit-Auswertung, muss also eine Variable sein
Const TODAY As Date = Date ' Compilerfehler: Konstantenausdruck erforderlich
Const RATE As Double = Range("A1").Value ' Compilerfehler
Lässt sich der Wert erst zur Laufzeit des Makros bestimmen — das heutige Datum,
der aktuelle Inhalt einer Zelle, das Ergebnis einer Funktion —, gehört er in eine
Dim-Variable, die Sie zur Laufzeit zuweisen, nicht in eine Const.
Sichtbarkeit: lokale Const vs. Public Const
Eine Const folgt denselben Sichtbarkeitsregeln wie ein Dim. Innerhalb einer
Sub geschrieben, ist sie lokal zu dieser Prozedur. Am Anfang eines Moduls mit
Public geschrieben, wird sie zu einer projektweiten Konstante, die jedes Modul
lesen kann:
' In einem Modul namens Config, oberhalb jeder Prozedur:
Public Const APP_NAME As String = "Monthly Close"
Public Const DATA_SHEET As String = "Raw"
Public Const HEADER_ROW As Long = 1
Das Idiom, das skaliert, ist ein einziges Config-Modul, das jede projektweite
Konstante hält — Blattnamen, Schwellenwerte, den App-Titel —, sodass es genau eine
Stelle gibt, an der man nachsieht, wenn sich etwas ändern muss. Halten Sie
prozedurspezifische Konstanten lokal; befördern Sie nur die, die wirklich geteilt
werden.
Wenn ein Wert nicht reicht: nutzen Sie Enum für eine Familie
Wenn Sie eine Gruppe verwandter Konstanten haben — Bestellstatus,
Spaltenpositionen, Berichtstypen —, funktioniert ein Haufen einzelner Consts,
liest sich aber schlecht. Ein Enum benennt sie als Menge, gruppiert sie unter
einem Typ und gibt Ihnen IntelliSense und eine leichte Typprüfung:
Enum OrderStatus
Pending = 1
Paid = 2
Shipped = 3
Cancelled = 4
End Enum
Sub Demo()
Dim s As OrderStatus
s = Paid
If s = Cancelled Then Exit Sub
End Sub
Die Faustregel: Const für einen einzelnen Wert; Enum für eine Familie
verwandter Werte, die zusammengehören. Ein Enum signalisiert auch Absicht —
ein Parameter vom Typ As OrderStatus sagt dem Leser (und dem Editor) genau,
welche Werte zulässig sind.
Wie ExcelMaster hilft
Konstanten, Sichtbarkeitsdisziplin und Enums sind die Gewohnheiten, die ein
wachsendes Makro wartbar halten — und sie sind Aufwand, den Sie in jedem Projekt
mittragen, lange bevor Sie zu der Logik kommen, die Sie eigentlich interessiert.
ExcelMaster
lässt Sie die Regel benennen, statt die Verkabelung zu legen: „Wende 19 % MwSt.
auf Spalte D an, markiere alles im Status Cancelled, schreibe die Summe ins Blatt
Summary.“ Es verwandelt das in funktionierende Logik mit dem Satz und den
Statuswerten an einer Stelle, sodass eine Änderung eine Änderung an der
Beschreibung ist, keine Jagd durch acht Formeln. Sie deklarieren weiterhin
Consts in handgeschriebenen Makros, wo Sie die Kontrolle wollen; für die
alltägliche Aufgabe schlägt das Beschreiben der Regel das Pflegen der magischen
Zahlen dahinter.
Häufig gestellte Fragen
Was ist eine Konstante in VBA?
Eine Konstante ist ein benannter Wert, der zur Compilezeit festgelegt ist und sich
nicht ändern kann, während das Makro läuft. Sie deklarieren eine mit Const, z. B.
Const VAT_RATE As Double = 0.19. Sie ersetzt eine verstreute „magische Zahl“
durch eine einzige benannte Quelle, sodass der Wert an einer Stelle lebt und seine
Bedeutung durch seinen Namen dokumentiert ist.
Was ist der Unterschied zwischen Const und Dim?
Dim deklariert eine Variable — eine Box, deren Wert Sie zur Laufzeit ändern
können. Const deklariert eine Konstante — einen zur Compilezeit verankerten
Wert, der nicht neu zugewiesen werden kann. Nutzen Sie Const für alles, das sich
während der Makro-Laufzeit nie ändert (ein Satz, ein Blattname, ein
Schwellenwert), und Dim für alles, das sich ändert.
Kann ich eine Const zur Laufzeit ändern?
Nein. Einer Konstante einen neuen Wert zuzuweisen ist ein Compilerfehler
(„Zuweisung zu Konstante nicht zulässig“), und diese Garantie ist der Grund, eine
zu verwenden. Muss sich ein Wert ändern, während das Makro läuft, ist er keine
Konstante — deklarieren Sie ihn stattdessen mit Dim als Variable.
Warum schlägt Const x = Range("A1").Value fehl?
Weil eine Const zur Compilezeit ausgewertet wird, kann sie nur auf ein Literal
oder einen Ausdruck aus anderen Konstanten gesetzt werden — nie auf etwas zur
Laufzeit Berechnetes wie einen Zellwert, ein Funktionsergebnis oder Date. Für
solche Fälle nutzen Sie eine Dim-Variable, die Sie zur Laufzeit des Makros
zuweisen.
Was ist Enum in VBA und wann sollte ich es statt Const verwenden?
Ein Enum definiert eine Familie verwandter benannter Konstanten unter einem
Typ, z. B. Bestellstatus oder Spaltennummern. Nutzen Sie mehrere Consts für
einzelne Werte, aber greifen Sie zu einem Enum, wenn die Werte als Menge
zusammengehören — es gruppiert sie, ermöglicht IntelliSense und lässt Sie einen
Parameter mit As und diesem Enum typisieren, um zu dokumentieren, welche Werte
gültig sind.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 31.07.2026.
Verwandte Anleitungen: VBA Dim · VBA Datentypen · VBA Sub · VBA Function · VBA If Then Else
