TL;DR — Ein Datentyp ist Form und Größe der Box einer Variablen. Wählen Sie eine zu kleine, läuft der Wert über; greifen Sie zur bequemen Allzweck-Box (
Variant), zahlen Sie mit Geschwindigkeit und versteckten Bugs. Zwei Regeln decken 90 % des echten Codes ab: Nutzen SieLongfür jede Ganzzahl (Integerläuft bei 32.767 über, und ein Blatt hat 1.048.576 Zeilen), und nutzen SieDoublefür Mathematik,Currencyoder Rundung für Geld (Doublekann0.1 + 0.2nicht exakt halten). Alles andere —String,Boolean,Date— wählen Sie passend zum Wert, undVariantbehalten Sie für die wenigen Fälle, die es wirklich brauchen.
Dim rowCount As Long ' Ganzzahlen — IMMER Long, niemals Integer
Dim price As Double ' Messwerte & Mathematik
Dim total As Currency ' Geld — exakt bis auf 4 Nachkommastellen
Dim name As String ' Text
Dim isPaid As Boolean ' True / False
Dim dueDate As Date ' ein Datum/eine Uhrzeit
Einen Typ zu wählen fühlt sich wie eine Formalität an, ist aber in Wahrheit eine Entscheidung darüber, welchen Fehlermodi Sie sich aussetzen. Der falsche Typ wirft nicht immer einen Fehler — manchmal liefert er still die falsche Zahl. Dieser Leitfaden ist um die Fallen herum aufgebaut, denn genau die entscheiden, welche Box Sie verwenden sollten.
Was Sie lernen
- Warum
Integereine Falle ist undLongIhr Standard für Ganzzahlen sein sollte - Was
Variantwirklich ist und die wenigen Fälle, in denen es die richtige Wahl ist - Warum
DoubleGeldbeträge verdirbt und was Sie stattdessen nehmen - Wie Sie die zwei Typfehler lesen: Überlauf (6) und Typen unverträglich (13)
- Eine Ein-Zeilen-Regel, um im Zweifel einen Typ zu wählen
Das mentale Modell: der Typ ist die Form der Box
Wenn eine Variable eine Box ist, dann ist der Typ ihre Form und ihr
Fassungsvermögen. Long ist eine Box für Ganzzahlen bis rund zwei Milliarden.
String dehnt sich, um Text aufzunehmen. Boolean ist eine Box mit Platz für
genau zwei Zustände. Double hält Bruchzahlen, aber in einer binären Näherung.
Variant ist eine gestaltwandelnde Box, die sich allem anpasst, was Sie
hineinwerfen.
Jeder Typ ist ein Kompromiss. Ein enger, spezifischer Typ fängt Fehler früh und
läuft schnell; ein loser Typ (Variant) akzeptiert alles und verschiebt den
Fehler auf später, an eine schwerer auffindbare Stelle. „Welcher Typ?“ ist also
dieselbe Frage wie „Was bin ich bereit, schiefgehen zu lassen?“
Die Regel, die Überlauf verhindert: nutzen Sie Long, niemals Integer
VBA hat zwei Ganzzahl-Typen, und einer davon ist ein Relikt. Integer ist 16-Bit:
seine Obergrenze liegt bei 32.767. Long ist 32-Bit: es reicht über zwei
Milliarden hinaus. In dem Moment, in dem ein Integer 32.768 halten soll, wirft
VBA „Überlauf“ (Fehler 6) und stoppt.
Das klassische Opfer ist ein Zeilenzähler:
' FRAGIL — läuft über, sobald das Blatt > 32,767 Zeilen hat
Dim r As Integer
For r = 1 To lastRow ' Fehler 6 bei Zeile 32,768
' ...
Next r
' KORREKT — Long verarbeitet alle 1,048,576 Zeilen
Dim r As Long
For r = 1 To lastRow
' ...
Next r
Ein modernes Arbeitsblatt hat 1.048.576 Zeilen — das Zweiunddreißigfache von
Integers Grenze. Jede Variable, die Zeilen zählt, eine .Row-Nummer hält oder
eine große Summe ansammelt, muss Long sein. Und jetzt kommt's: Auf heutiger
Hardware gibt es keinen Geschwindigkeitsvorteil durch Integer — VBA wandelt
es intern ohnehin in einen 32-Bit-Wert um. Die Regel hat also keinen Nachteil:
Nutzen Sie Long für jede Ganzzahl und vergessen Sie, dass Integer
existiert.
Die Regel zu Variant: eine bewusste Wahl, niemals ein Standard
Jede Variable, die Sie ohne Typ deklarieren — Dim x — ist eine Variant, und
ebenso jede nicht deklarierte Variable. Eine Variant hält alles: jetzt eine
Zahl, später Text, ein Array, ein Objekt. Das klingt bequem, und darum verlassen
sich Anfänger darauf. Und genau darum verstecken sich ihre Bugs.
Die Kosten sind real. Eine Variant braucht mehr Speicher, läuft langsamer und —
am wichtigsten — fängt keine Typfehler ab. Eine Zahl, die als Text ankommt,
bleibt innerhalb einer Variant Text und lässt still eine spätere Berechnung
scheitern, wo ein Long sofort an der Stelle des Fehlers einen Fehler geworfen
hätte.
Doch Variant hat einen wirklich großartigen Einsatz, und der lohnt sich zu
kennen, weil er schnell ist: einen ganzen Range in einem Zug in den Speicher
einzulesen.
' Der EINE großartige Variant-Einsatz: einen Bereich in einem Zug in ein 2-D-Array holen
Dim data As Variant
data = ThisWorkbook.Worksheets("Data").Range("A1:C1000").Value
Dim i As Long
For i = 1 To UBound(data, 1)
data(i, 2) = data(i, 2) * 1.1 ' im Speicher arbeiten — keine Zugriffe Zelle für Zelle
Next i
Range("A1:C1000").Value = data ' in einem Zug zurückschreiben
Dieses Muster ist dramatisch schneller, als Zellen einzeln anzufassen, und es
erfordert eine Variant, weil Excel Ihnen ein Variant-Array übergibt. Nutzen
Sie Variant hier und für Werte, die tatsächlich gemischt sind. Überall sonst
deklarieren Sie den echten Typ.
Die Regel zu Geld: Double lügt beim letzten Cent
Double ist binäre Gleitkommazahl, kann also nicht jede Dezimalzahl exakt
darstellen — das berühmte Ergebnis ist, dass 0.1 + 0.2 nicht exakt 0.3 ergibt.
Für ein Diagramm oder eine physikalische Berechnung ist das unsichtbar. Bei Geld
summieren sich diese winzigen Fehler, und Ihre Summen driften um einen Cent —
genau die Sorte Sache, die einem Prüfer auffällt.
Dim a As Double
a = 0.1 + 0.2
Debug.Print (a = 0.3) ' -> False (a ist 0.30000000000000004)
Dim m As Currency
m = 0.1 + 0.2
Debug.Print (m = 0.3) ' -> True (Currency ist exakt bis auf 4 Nachkommastellen)
Nutzen Sie Currency für Geld — es ist ein Festkommatyp, exakt bis auf vier
Nachkommastellen, und genau dafür gemacht. Müssen Sie Double verwenden (etwa
weil Sie mehr als vier Nachkommastellen brauchen), runden Sie bewusst mit
Round() oder Format(), bevor Sie vergleichen oder speichern. Testen Sie
niemals zwei Double-Werte auf exakte Gleichheit; vergleichen Sie stattdessen
innerhalb einer Toleranz.
Ein kurzer Rundgang durch die Alltagstypen
String— Text. Standardmäßig variabler Länge; feste Länge brauchen Sie selten.Boolean—True/False. Perfekt für Flags (isPaid,found).Date— ein Datum und/oder eine Uhrzeit. Unter der Haube ist es eine Zahl (dieselbe serielle Zahl, die Excel nutzt), weshalb Sie mit Datumsangaben rechnen können.Long— Ihre Standard-Ganzzahl, wie oben.Double— Ihre Standard-Bruchzahl für Mathematik und Messwerte.Currency— Geld.Variant— nur bei bewusstem Einsatz.
Noch eine Falle, die hierher gehört: Dim i, j As Long macht nur j zu einem
Long — i ist eine Variant. Jede Variable braucht ihr eigenes As Type.
Diese Deklarationsmechanik ist ausführlich in VBA Dim
behandelt.
Wie ExcelMaster hilft
Typfehler — Überlauf bei einem großen Blatt, ein Double, das um einen Cent
driftet, eine Variant, die einen Text-statt-Zahl-Bug verdeckt — sind von der
schleichenden Sorte: Das Makro läuft, und die falsche Antwort taucht weiter unten
in der Kette auf. Typen richtig zu wählen ist echte Ingenieursdisziplin, und diese
Disziplin müssen Sie bei jedem Makro aufs Neue aufbringen.
ExcelMaster
nimmt die Aufgabe in einfachem Deutsch entgegen — „Summiere Spalte D als Währung,
zähle die Zeilen, markiere alles über Budget“ — und übernimmt die Typwahl für Sie:
Long für die Zähler, exakte Arithmetik für das Geld, kein stiller Überlauf bei
einem Blatt mit einer Million Zeilen. Sie schreiben weiterhin typisierte Makros,
wo Sie feine Kontrolle brauchen; für den Alltagsjob beschreiben Sie das Ergebnis
und überspringen die Klasse von Bugs, gegen die Typen da sind.
Häufig gestellte Fragen
Was ist der Unterschied zwischen Integer und Long in VBA?
Integer ist eine 16-Bit-Ganzzahl, gedeckelt bei 32.767; Long ist 32-Bit
und reicht über zwei Milliarden hinaus. Weil ein Arbeitsblatt 1.048.576 Zeilen hat
und Integer auf modernem Excel keinen Geschwindigkeitsvorteil bietet, sollten
Sie Long für jede Ganzzahl nutzen und Integer ganz vermeiden. Integers
Grenze zu überschreiten löst „Überlauf“ (Fehler 6) aus.
Sollte ich Variant in VBA verwenden?
Nur bewusst. Variant hält jeden Wert, aber es braucht mehr Speicher, läuft
langsamer und verbirgt Typfehler (eine als Text gespeicherte Zahl wirft erst
später einen Fehler). Sein einziger hervorragender Einsatz ist das Einlesen eines
ganzen Range in ein 2-D-Array (data = Range("A1:C1000").Value), was sehr
schnell ist. Überall sonst deklarieren Sie den konkreten Typ.
Welchen Datentyp sollte ich in VBA für Geld verwenden?
Nehmen Sie Currency. Es ist ein Festkommatyp, exakt bis auf vier
Nachkommastellen, und vermeidet so die Rundungsdrift von Double (das
0.1 + 0.2 nicht exakt speichern kann). Verwenden Sie Double für Geld, runden
Sie explizit mit Round(), bevor Sie vergleichen oder speichern, und testen Sie
niemals zwei Double-Werte auf exakte Gleichheit.
Was ist der Standard-Datentyp in VBA?
Variant. Jede Variable, die ohne As Type deklariert — oder gar nicht
deklariert — wird, ist eine Variant. Das ist bequem, aber fehleranfällig,
weshalb Option Explicit plus explizite Typen die empfohlene Disziplin sind.
Warum bekomme ich „Typen unverträglich“ (Fehler 13)?
Sie haben einen Wert zugewiesen, der nicht zum Typ der Variable passt — zum
Beispiel den Text "abc" in ein Long oder eine Zelle mit einem Fehlerwert in
ein Double. Prüfen Sie, was tatsächlich in der Zelle oder Variable steckt
(numerisch aussehender Text ist ein häufiger Übeltäter), und wandeln Sie ihn
explizit mit CLng, CDbl oder CStr um, bevor Sie zuweisen.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 31.07.2026.
Verwandte Anleitungen: VBA Dim · VBA Const · VBA CStr · VBA Array · VBA For-Schleife
