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

VBA Round in Excel — Runden zur nächsten geraden Zahl und warum es vom Arbeitsblatt abweicht

|

VBA Round in Excel — Runden zur nächsten geraden Zahl und warum es vom Arbeitsblatt abweicht

Kurzfassung — VBAs Round ist nicht das ROUND, das Sie in einer Zelle verwenden. Es rundet eine Hälfte auf die nächste gerade Ziffer (Runden zur nächsten geraden Zahl, banker's rounding), also ist Round(2.5) gleich 2 und Round(3.5) gleich 4 — Hälften gehen nicht immer nach oben. Das ROUND des Arbeitsblatts rundet Hälften von der Null weg (2.53). Muss eine Makro-Summe mit dem Blatt übereinstimmen, rufen Sie Application.WorksheetFunction.Round statt des nativen Round auf.

Sub RoundingIsNotWhatYouThink()
    Debug.Print Round(2.5)                              ' 2  - Haelfte zur GERADEN Zahl, nicht 3
    Debug.Print Round(3.5)                              ' 4  - Haelfte zur GERADEN Zahl
    Debug.Print Round(2.5, 0)                           ' 2  - gleiche Regel mit Stellen-Argument
    Debug.Print Application.WorksheetFunction.Round(2.5, 0)  ' 3  - entspricht =ROUND(2.5,0)
End Sub

Round, Mod und Rnd sind drei Mathematik-Werkzeuge, die wie ihre Verwandten auf dem Arbeitsblatt aussehen, sich aber still anders verhalten — denn VBA ist eine universelle Programmiersprache, nicht die Tabellenkalkulation. Das Runden ist dasjenige, das Geld kostet: Bekommen Sie die Regel falsch, driften die Summen eines Makros um einen Cent von den Zellen weg, die alle anderen lesen.

Was Sie lernen

  • Das Denkmodell — VBA-Mathematik ist keine Arbeitsblatt-Mathematik, und Round beweist es
  • Was das Runden zur geraden Zahl ist und warum Round(2.5) gleich 2 ist, während die Zelle 3 liefert
  • Der Fehler Nummer eins — eine Makro-Summe, die einen Cent vom =ROUND() auf dem Blatt abweicht
  • Wie Sie das Arbeitsblatt exakt treffen, mit Application.WorksheetFunction.Round
  • Warum Int und Fix abschneiden, statt zu runden, und sich bei negativen Zahlen uneinig sind

Das Denkmodell: VBA-Mathematik ist keine Arbeitsblatt-Mathematik

Sie wissen bereits, wie sich =ROUND(2.5, 0) in einer Zelle verhält — es ergibt 3. Wenn ein Makro also zum ersten Mal 2 ausgibt, sieht das nach einem Fehler aus. Ist es nicht. VBAs Round-Funktion folgt einer anderen, bewusst gewählten Regel, dem Runden zur nächsten geraden Zahl (banker's rounding; formal round half to even): Sitzt eine Zahl genau auf der Hälfte, rundet sie zur nächsten geraden Ziffer statt immer nach oben.

Debug.Print Round(0.5)    ' 0   (0 ist gerade)
Debug.Print Round(1.5)    ' 2   (2 ist gerade)
Debug.Print Round(2.5)    ' 2   (2 ist gerade)
Debug.Print Round(3.5)    ' 4   (4 ist gerade)

Beachten Sie, wie die Hälften abwechselnd nach unten, oben, unten, oben gehen. Genau darum geht es bei der Regel: Über viele Werte hinweg führt das konsequente Aufrunden von Hälften zu einer kleinen Verzerrung nach oben, und das Runden zur geraden Zahl hebt sie auf. Es ist die statistisch fairere Wahl — genau deshalb hat eine Sprache, die für allgemeine Berechnungen entworfen wurde, sie gewählt, und die Tabellenkalkulation, gebaut für alltägliches Rechnen, nicht.

Merken Sie sich einen Satz, und der Rest dieses Artikels ergibt sich von selbst: Der Funktionsname ist derselbe, die Regel nicht. Alles Weitere ist eine Folge davon, dass Round zur geraden Zahl rundet.

Der Fehler Nummer eins: eine Summe, die einen Cent abweicht

Hier ist der Fehler, der die Leute zur Suche treibt. Ein Makro summiert Rechnungspositionen und rundet jede auf zwei Nachkommastellen; die Gesamtsumme fällt einen Cent niedriger aus als die =ROUND(...)-Spalte, die das Finanzteam auf dem Blatt pflegt, und nun stimmen die beiden Zahlen nicht mehr überein:

' Rundet jeden halben Cent zur geraden Zahl - driftet weg vom =ROUND() des Blatts
lineTotal = lineTotal + Round(price * qty, 2)

Jedes einzelne Round liegt höchstens einen halben Cent daneben, aber über Hunderte von Halb-Cent-Werten ziehen das Runden zur geraden Zahl und das Runden-von-der-Null-weg des Blatts in verschiedene Richtungen, und die Cents summieren sich. Nichts wirft einen Fehler; die Zahlen stimmen einfach nicht überein. Muss Ihre Ausgabe eine Zelle treffen, verwenden Sie nicht VBAs Round:

' Rundet exakt wie =ROUND() auf dem Blatt - Haelfte von der Null weg
lineTotal = lineTotal + Application.WorksheetFunction.Round(price * qty, 2)

Application.WorksheetFunction.Round (Sie können auch Application.Round schreiben) ist das ROUND des Arbeitsblatts, aus VBA aufgerufen, also rundet es Hälften von der Null weg und Ihre Summe stimmt bis auf den Cent. Die Faustregel ist unmissverständlich: Geld und jede Zahl, die mit dem Blatt übereinstimmen muss → WorksheetFunction.Round; das native Round bleibt für Statistik, wo das Runden zur geraden Zahl gerade der Sinn ist.

Runden ist nicht Abschneiden: Int und Fix

Runden entscheidet, in welche Richtung ein Nachkommateil geht; manchmal wollen Sie gar keinen Nachkommateil, Sie wollen ihn abschneiden. Das ist das Abschneiden, und VBA hat zwei Funktionen dafür — die sich natürlich bei negativen Zahlen uneinig sind:

Debug.Print Int(2.7)     ' 2    Fix(2.7)   ' 2    - identisch bei positiven Zahlen
Debug.Print Int(-2.7)    ' -3   Fix(-2.7)  ' -2   - bei negativen gehen sie auseinander

Int rundet ab in Richtung minus unendlich (eine echte Abrundung, ein Floor), also ist Int(-2.7) gleich -3. Fix rundet in Richtung Null (es lässt einfach die Nachkommastellen fallen), also ist Fix(-2.7) gleich -2. Bei positiven Zahlen sind sie gleich; sobald eine negative auftaucht, müssen Sie wissen, welche der beiden Sie meinten. Keine von beiden ist Round — sie sehen nie den Nachkommateil an, um zu entscheiden, sie entfernen ihn einfach.

Es gibt in VBA auch kein eingebautes RoundUp oder RoundDown. Wenn Sie „immer auf" oder „immer ab" auf eine Anzahl von Nachkommastellen brauchen, greifen Sie zu den Arbeitsblatt-Varianten: Application.WorksheetFunction.RoundUp(x, 2) und RoundDown(x, 2).

Die Gleitkomma-Fußnote

Unter allem Runden lauert noch eine Überraschung: Double-Werte werden binär gespeichert, und manche sauber aussehenden Dezimalzahlen lassen sich nicht exakt darstellen. Das klassische Beispiel ist Round(2.675, 2), das 2.67 zurückgibt, nicht 2.68 — denn 2.675 wird in Wahrheit als 2.67499999... gehalten, ist also gar keine echte Hälfte. Das ist kein Fehler von Round; es ist die Natur der Gleitkommazahlen. Kommt es auf Genauigkeit bis zum Cent an, arbeiten Sie mit dem Typ Currency oder Decimal, oder runden Sie über WorksheetFunction.Round, das gebaut ist, um diese Darstellungslücken zu glätten.

Wann das Runden zur geraden Zahl richtig ist

Nichts davon heißt, dass VBAs Round kaputt ist — es heißt, es zielt auf eine andere Aufgabe. Berechnen Sie einen Durchschnitt, eine statistische Auswertung oder irgendetwas, wo Tausende von Hälften ein Ergebnis sonst nach oben verzerren würden, ist das Runden zur geraden Zahl die richtige Wahl und die Regel des Arbeitsblatts, von der Null weg zu runden, die verzerrte. Verwenden Sie dort das native Round mit Absicht. Der Fehler ist nicht, Round zu verwenden; er ist, es für Geld zu verwenden, das mit einer Tabelle stimmen muss, wo die zwei Regeln still auseinanderlaufen.

Wie ExcelMaster hilft

Runden ist eine Entscheidung mit drei stillen Weggabelungen — Runden zur geraden Zahl gegen Runden von der Null weg (natives Round gegen WorksheetFunction.Round), Runden gegen Abschneiden (Round gegen Int/Fix, die sich dann bei negativen Zahlen uneinig sind) und ob die Gleitkommadarstellung überhaupt eine echte Hälfte hält — und jede falsche Abzweigung scheitert leise: eine Summe einen Cent daneben, eine negative Zahl in die falsche Richtung abgerundet, ein 2.675, das sich nicht aufrunden lässt.

ExcelMaster lässt Sie sagen, was Sie wirklich wollen — „runde jede Position auf zwei Nachkommastellen, damit die Summe mit der ROUND-Spalte auf dem Blatt übereinstimmt" — und wählt WorksheetFunction.Round, weil Sie stimme mit dem Blatt überein gesagt haben, nutzt Int oder Fix bewusst, wenn Sie abschneiden meinen, und markiert die Geld-im-Double-Falle, bevor sie Sie einen Cent kostet. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Warum gibt VBA Round(2.5) 2 statt 3 zurück?

Weil VBAs Round das Runden zur nächsten geraden Zahl verwendet — round half to even. Liegt ein Wert genau auf der Hälfte, geht er zur nächsten geraden Ziffer, also ist Round(2.5) gleich 2 (2 ist gerade) und Round(3.5) gleich 4 (4 ist gerade). Das =ROUND(2.5,0) des Arbeitsblatts verwendet eine andere Regel, das Runden von der Null weg, das 3 ergibt. Gleicher Name, andere Regel.

Wie bringe ich VBA dazu, genau wie das Arbeitsblatt-ROUND zu runden?

Rufen Sie die Arbeitsblattfunktion aus VBA auf: Application.WorksheetFunction.Round(x, 2) (oder Application.Round(x, 2)). Es rundet Hälften von der Null weg, genau wie =ROUND() in einer Zelle, sodass in einem Makro berechnete Summen mit einer ROUND-Spalte auf dem Blatt übereinstimmen. Behalten Sie das native Round für Fälle, in denen das Runden zur geraden Zahl wirklich das ist, was Sie wollen.

Wie runde ich in VBA auf 2 Nachkommastellen?

Übergeben Sie die Anzahl der Stellen als zweites Argument: Round(value, 2) für das Runden zur geraden Zahl, oder Application.WorksheetFunction.Round(value, 2), um mit dem Blatt übereinzustimmen. Um immer auf zwei Stellen auf- oder abzurunden, nutzen Sie WorksheetFunction.RoundUp(value, 2) oder RoundDown(value, 2) — VBA hat kein natives RoundUp oder RoundDown.

Was ist der Unterschied zwischen Int und Fix in VBA?

Beide entfernen den Nachkommateil, aber sie sind sich bei negativen Zahlen uneinig. Int rundet ab in Richtung minus unendlich, also ist Int(-2.7) gleich -3. Fix schneidet in Richtung Null ab, also ist Fix(-2.7) gleich -2. Bei positiven Zahlen sind sie identisch. Keine von beiden rundet — sie verwerfen die Nachkommastellen, statt sie anzusehen, anders als Round.

Warum ergibt Round(2.675, 2) 2.67 und nicht 2.68?

Weil sich 2.675 nicht exakt als Double speichern lässt — es wird in Wahrheit als 2.67499999... gehalten, ist also keine echte Hälfte und rundet ab. Das ist die Gleitkommadarstellung, kein Rundungsfehler. Für Geld nutzen Sie den Typ Currency oder Decimal, oder runden Sie über Application.WorksheetFunction.Round.

Getestet in

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

Verwandte Anleitungen: VBA Mod · VBA Rnd · VBA Format · VBA Number Format · VBA WorksheetFunction