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

VBA Mod in Excel — der Rest-Operator, negative Zahlen und die Vorzeichen-Falle

|

VBA Mod in Excel — der Rest-Operator, negative Zahlen und die Vorzeichen-Falle

KurzfassungMod liefert Ihnen den Rest nach der Ganzzahldivision: 7 Mod 3 ist 1. Es ist ein Operator, keine Funktion, Sie schreiben also a Mod b ohne Klammern. Zwei Dinge überraschen: VBA rundet beide Operanden zuerst auf ganze Zahlen (6.7 Mod 3 verhält sich wie 7 Mod 3), und das Ergebnis übernimmt das Vorzeichen des Dividenden — der linken Zahl — also ist -7 Mod 3 gleich -1, nicht die 2 des 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 — Mod ist 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 3 ist -1 in VBA, aber 2 auf 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 0 einen 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