Kurzfassung —
Modliefert Ihnen den Rest nach der Ganzzahldivision:7 Mod 3ist1. Es ist ein Operator, keine Funktion, Sie schreiben alsoa Mod bohne Klammern. Zwei Dinge überraschen: VBA rundet beide Operanden zuerst auf ganze Zahlen (6.7 Mod 3verhält sich wie7 Mod 3), und das Ergebnis übernimmt das Vorzeichen des Dividenden — der linken Zahl — also ist-7 Mod 3gleich-1, nicht die2des Arbeitsblatts.
Sub RemaindersAndTheSignTrap()
Debug.Print 7 Mod 3 ' 1 - Rest von 7 / 3
Debug.Print 10 Mod 2 ' 0 - teilt glatt, also ist 10 gerade -> True
Debug.Print -7 Mod 3 ' -1 - Vorzeichen folgt dem DIVIDENDEN (-7), nicht dem Divisor
Debug.Print 6.7 Mod 3 ' 1 - 6.7 wird erst zu 7 gerundet, dann 7 Mod 3
End Sub
Mod, Round und Rnd sind drei Mathematik-Werkzeuge, die wie
ihre Verwandten auf dem Arbeitsblatt aussehen, sich aber still anders verhalten. Mod ist dasjenige, das
die Leute direkt aus einer Zellformel in ein Makro übernehmen und dann nicht verstehen, warum die
negativen Zahlen falsch herauskamen.
Was Sie lernen
- Das Denkmodell —
Modist der Rest nach der Ganzzahldivision, und es ist ein Operator - Warum VBA die Operanden auf ganze Zahlen rundet, bevor es dividiert
- Der Fehler Nummer eins —
-7 Mod 3ist-1in VBA, aber2auf dem Arbeitsblatt, weil die Vorzeichenregel abweicht - Die alltäglichen Idiome — ist-gerade, jede N-te Zeile, das Durchlaufen einer Liste
- Wie Sie ein stets positives Ergebnis erzwingen, und warum
x Mod 0einen Laufzeitfehler auslöst
Das Denkmodell: der Rest nach der Ganzzahldivision
Die Division gibt Ihnen zwei Dinge — wie oft eine Zahl in eine andere passt und was übrig bleibt. Mod
reicht Ihnen das Übrige. 17 Mod 5 ist 2, weil die 5 dreimal in die 17 passt und 2 übrig bleiben.
Das ist die ganze Idee, und darum steckt Mod überall dort, wo sich ein Muster wiederholt: Ein Rest von
0 heißt „teilt glatt auf" — so prüfen Sie, ob etwas gerade ist, ob es die N-te Zeile ist, ob eine
Gruppe voll ist.
Zwei Eigenschaften machen VBAs Mod zu etwas Eigenem. Erstens ist es ein Operator, wie + oder *,
keine Funktion — Sie schreiben a Mod b, nie Mod(a, b). Zweitens arbeitet es mit ganzen Zahlen:
Geben Sie ihm Dezimalzahlen, rundet VBA jeden Operanden auf eine ganze Zahl, bevor es den Rest bildet.
Debug.Print 6.7 Mod 3 ' 1 - 6.7 rundet zu 7, dann 7 Mod 3 = 1 (nicht 0.7)
Debug.Print 5.4 Mod 2 ' 1 - 5.4 rundet zu 5, dann 5 Mod 2 = 1
Wenn Sie wirklich einen gebrochenen Rest brauchen, gibt Mod ihn Ihnen nicht — berechnen Sie ihn
selbst mit a - Int(a / b) * b. Aber in neun von zehn Fällen ist Mod genau das, was Sie wollen, gerade
weil es mit ganzen Anzahlen umgeht.
Der Fehler Nummer eins: negative Zahlen wechseln das Vorzeichen
Das ist der Fehler, der die Foren füllt. Sie haben eine Formel, die auf dem Blatt funktioniert, Sie fügen dieselbe Rechnung in VBA ein, und die negativen Zahlen kommen mit dem falschen Vorzeichen heraus:
Debug.Print -7 Mod 3 ' VBA: -1
' =MOD(-7, 3) auf dem Blatt ergibt: 2
Beide sind „richtig" — sie folgen verschiedenen, dokumentierten Regeln. VBAs Mod übernimmt das
Vorzeichen des Dividenden (des linken Operanden): -7 Mod 3 ist -1, 7 Mod -3 ist 1. Das MOD
des Arbeitsblatts übernimmt das Vorzeichen des Divisors: MOD(-7, 3) ist 2. So kann eine Formel, der
Sie in einer Zelle vertraut haben, still eine andere Zahl liefern, sobald Sie sie in ein Makro
verschieben, und nichts warnt Sie.
Wenn Sie eigentlich ein Ergebnis wollen, das nie negativ ist — der übliche Fall, wenn Sie einen Index um eine Liste umbrechen —, kämpfen Sie nicht gegen die Vorzeichenregel, sondern hebeln Sie sie aus:
' Landet immer in 0 .. b-1, egal welches Vorzeichen a hat
result = ((a Mod b) + b) Mod b
Debug.Print ((-7 Mod 3) + 3) Mod 3 ' 2 - die Antwort des Blatts, absichtlich
Die Lehre lautet nicht „VBA irrt sich." Sie lautet: Wenn negative Zahlen auftauchen können, entscheiden
Sie sich für das gewünschte Vorzeichen und bauen Sie es — nehmen Sie nicht an, dass VBAs Mod mit der
Zelle übereinstimmt, aus der Sie kopiert haben.
Die Idiome, die man sich merken sollte
Die meisten echten Einsätze von Mod sind eines von einer Handvoll Mustern. Lernen Sie diese, und Sie
erkennen sie überall:
If n Mod 2 = 0 Then ... ' ist n gerade? (ungerade = 1)
If i Mod 3 = 0 Then ... ' jedes 3. Element (Zeilen streifen, Stapeln)
colour = palette(i Mod paletteCount) ' eine feste Liste zyklisch durchlaufen, mit Umbruch
Das Streifen von Zeilen ist der Fall, in dem Mod seinen Wert in einer Schleife
beweist: jede dritte Zeile einfärben, alle zehn Datensätze einen Trenner einfügen, mit i Mod 2 eine
Farbe abwechseln. Jedes ist nur „ist der Rest null?" — derselbe Test in anderen Kleidern.
Der Rand, der einen Fehler wirft: die Division durch null
Ein Fall scheitert nicht leise — er stoppt das Makro. x Mod 0 löst Laufzeitfehler 11, „Division by
zero", aus, genau wie es x / 0 täte, denn der Rest ist undefiniert, wenn es nichts gibt, wodurch man
teilen könnte. Kann der Divisor null sein (eine Anzahl, die leer sein könnte, ein vom Nutzer vorgegebener
Schritt), sichern Sie ihn zuerst ab:
If groupSize > 0 Then
If i Mod groupSize = 0 Then InsertSeparator i
End If
Ein verwandter Rand ist die Größe: Mod arbeitet innerhalb von VBAs Ganzzahltypen, also können extrem
große Operanden vom Typ Integer oder Long überlaufen. Arbeiten Sie mit Werten jenseits von etwa zwei
Milliarden, deklarieren Sie sie als LongLong (64-Bit-VBA) oder Double und lassen Sie VBA auf eine
ganze Zahl runden.
Wie ExcelMaster hilft
Mod sieht aus wie der einfachste Operator in VBA und verbirgt drei Fallen, die alle ohne Warnung
scheitern: Ein negativer Dividend dreht das Vorzeichen weg vom Arbeitsblatt, aus dem Sie die Formel
kopiert haben, ein dezimaler Operand wird vor der Division still gerundet, und ein Divisor, der auf null
rutscht, stoppt das ganze Makro mit Fehler 11.
ExcelMaster lässt Sie das Muster
beschreiben — „füge nach jeweils 12 Zeilen eine Zwischensumme ein" oder „markiere die ungerade
nummerierten Rechnungen" — und schreibt den Rest-Test richtig: Es umschließt mit ((a Mod b) + b) Mod b,
wenn Sie ein nicht-negatives Ergebnis brauchen, hält die Operanden bewusst ganz und sichert den Divisor
ab, sodass eine leere Gruppe den Lauf nie zum Absturz bringt. Sie behalten die Arbeitsmappe und den Code.
Häufig gestellte Fragen
Warum ergibt -7 Mod 3 in VBA -1, aber 2 auf dem Arbeitsblatt?
Weil die beiden verschiedene Vorzeichenregeln verwenden. VBAs Mod-Operator übernimmt das Vorzeichen des
Dividenden (des linken Operanden), also ist -7 Mod 3 gleich -1. Die MOD-Funktion des
Arbeitsblatts übernimmt das Vorzeichen des Divisors, also ist MOD(-7, 3) gleich 2. Um in VBA die
stets positive Antwort des Arbeitsblatts zu erhalten, schreiben Sie ((a Mod b) + b) Mod b.
Ist Mod in VBA eine Funktion oder ein Operator?
Es ist ein Operator, wie + oder *. Sie schreiben a Mod b, nicht Mod(a, b) — es gibt keine
Klammern und kein Komma. Es steht in einem Ausdruck und gibt den Rest der Ganzzahldivision von a durch
b zurück.
Funktioniert VBA Mod mit Dezimalzahlen?
Nicht direkt — VBA rundet beide Operanden auf ganze Zahlen, bevor es den Rest bildet, also verhält sich
6.7 Mod 3 wie 7 Mod 3 und gibt 1 zurück. Brauchen Sie einen echten gebrochenen Rest, berechnen Sie
ihn selbst mit a - Int(a / b) * b.
Wie prüfe ich in VBA, ob eine Zahl gerade oder ungerade ist?
Nutzen Sie den Rest gegen 2: If n Mod 2 = 0 ist wahr für gerade Zahlen und falsch (Rest 1) für
ungerade. Dasselbe Muster, i Mod k = 0, prüft „jedes k-te" für beliebiges k — jede dritte Zeile,
jeder zehnte Datensatz und so weiter.
Was passiert, wenn ich Mod mit null verwende?
x Mod 0 löst Laufzeitfehler 11, „Division by zero", aus, denn der Rest ist ohne Divisor undefiniert.
Könnte der Divisor null sein — eine leere Anzahl oder ein vom Nutzer vorgegebener Schritt —, prüfen Sie
ihn mit If divisor > 0 Then, bevor Sie Mod verwenden.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 18.09.2026.
Verwandte Anleitungen: VBA Round · VBA Rnd · VBA For-Schleife · VBA If Then Else · VBA WorksheetFunction
