Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: runden mit vba ... fehlerhaft?

runden mit vba ... fehlerhaft?
23.01.2009 00:19:12
Samuel
Hallo allerseits,
die Round Funktion von VBA bereitet mir reichlich Kopfzerbrechen:
wieso ergibt
Round(0.5 , 0) als Ergebnis 0 und
Round(1.5 , 0) als Ergebnis 2 ?
Kann das jemand nachvollziehen?
warum wird mal aufgerundet, mal abgerundet?
Es ist Excel 2003 SP3 ...
Hier als simple Prozedur:

Sub test()
MsgBox Round(0.5, 0)
MsgBox Round(1.5, 0)
End Sub


Viele Grüße
Samuel

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: runden mit vba ... fehlerhaft?
23.01.2009 00:31:00
Josef
Hallo Samuel,
das kommt, weil die VBA-Funktion Round() immer auf die nächste gerade Ganzzahl rundet. (round-to-even)
Verwende stattdessen

Application.Round(1.5, 0)


Gruß Sepp

Anzeige
AW: runden mit vba ... fehlerhaft?
23.01.2009 00:52:24
Samuel
Hallo Sepp,
danke für die Antwort.
"Round-to-even" beschreibt die Funktionsweise sehr gut.
Und mithilfe von Wikipedia ("Unverzerrte Rundung") habe ich das jetzt sogar fast verstanden :-)
Die VBA-Hilfe sagt leider nichts von "Round to even", sondern nur ...
"... Gibt eine Zahl zurück, die auf eine festgelegte Anzahl an Dezimalpunkten gerundet wurde. ..."
das ist da leider ein bissl zu wenig ...
Viele Grüße
Samuel
Anzeige
AW: runden mit vba ... fehlerhaft?
23.01.2009 00:41:44
Daniel
Hi
ganz einfach, wenn man bei 0.5 beginnt aufzurunden, entsteht ein statistischer Fehler, da bei mehr Werten aufgerundet als abgerundet wird.
abrunden : 4x: 0,1 0,2 0,3 0,4
aufrunden: 5x: 0,5 0,6 0,7 0,8 0,9
Folge ist, daß die Summe der gerundeten Werte immer grösser ist, als die Summe der ungerundeten.
um diesen Fehler zu reduzieren gibt es verschiedene Ansätze, einer davon ist, bei ,5 und gerader Ganzzahl ab- und bei ungerader Ganzzahl aufzurunden, um hier eine grössere Gleichmäßigkeit zu erzielen.
ich vermute mal, das Excel diese Methode bei der ROUND-Funktion umgesetzt hat.
Gruß, Daniel
Anzeige
AW: runden mit vba ... fehlerhaft?
23.01.2009 00:58:01
Samuel
Hallo Daniel,
danke für die Antwort,
mittlerweile habe ich das dahinterliegende Prinzip verstanden,
und offenbar setzt VBA das auch so um - wie Du sagst - nur leider ist die VBA Hilfe ein wenig irreführend.
Gruß
Samuel
AW: runden mit vba ... fehlerhaft?
23.01.2009 07:47:00
Gerd
Hallo Samuel,
das ist ein Bug von VBA-Round. Dieser tritt -wie von Sepp vorgeschlagen- mit dem Zeiger
auf die Anwendung nicht auf; ganz einfach. :-)
Gruß Gerd
Anzeige
AW: @ Sepp
23.01.2009 21:05:50
Gerd
Guten Abend Sepp,
besser wäre gewesen, diese Round-Funktion entweder danach zu benennen, was sie
wirklich macht u. das auch in der Hilfe zu beschreiben oder sie so zu programmieren wie "Application.Round".
Von einer Rundungsfunktion erwarte ich zutreffende Ergebnisse.
Gruß Gerd
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Runden mit VBA: Fehler und Lösungen


Schritt-für-Schritt-Anleitung

Um die Round-Funktion in VBA korrekt zu nutzen, befolge diese Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Kopiere den folgenden Code in das Modul:

    Sub test()
       MsgBox Round(0.5, 0)
       MsgBox Round(1.5, 0)
    End Sub
  4. Führe die Prozedur aus, um die Ergebnisse zu sehen.

Beachte, dass die Funktion Round in VBA die gerundeten Werte auf die nächste gerade Zahl (Round-to-even) anpasst. Dies erklärt, warum Round(0.5, 0) 0 und Round(1.5, 0) 2 ergibt.


Häufige Fehler und Lösungen

Ein häufiger Fehler beim Runden mit VBA ist die Annahme, dass die Round-Funktion klassisch auf- oder abrundet. Die Ergebnisse können überraschend sein, insbesondere bei Werten wie 0.5.

Lösung: Statt Round verwende Application.Round, um die klassischen Rundungsregeln anzuwenden:

MsgBox Application.Round(0.5, 0) ' Gibt 1 zurück

Alternative Methoden

Wenn du spezifisches Runden benötigst, wie z.B. auf 0.5 oder auf 5 Rappen, kannst du die folgende Funktion verwenden:

Function RundenAuf(ByVal Wert As Double, ByVal Schritt As Double) As Double
    RundenAuf = Round(Wert / Schritt) * Schritt
End Function

Verwende diese Funktion, um Werte gezielt auf 0.5 oder 5 Rappen zu runden:

MsgBox RundenAuf(2.3, 0.5) ' Gibt 2.5 zurück
MsgBox RundenAuf(2.3, 0.05) ' Gibt 2.30 zurück

Praktische Beispiele

Hier sind einige praktische Anwendungen von VBA und der Round-Funktion:

  1. Runden auf 0.5:

    MsgBox RundenAuf(3.3, 0.5) ' Gibt 3.5 zurück
  2. Runden auf 5 Rappen:

    MsgBox RundenAuf(2.67, 0.05) ' Gibt 2.65 zurück
  3. Runden mit Fehleranalyse:

    Um zu verstehen, wie die Rundung erfolgt, kannst du eine Schleife verwenden, um mehrere Werte zu testen:

    Sub RundungsAnalyse()
       Dim i As Double
       For i = 0 To 10 Step 0.1
           MsgBox i & " gerundet auf: " & Round(i, 1)
       Next i
    End Sub

Tipps für Profis

  • Nutze Application.Round, wenn du die Kontrolle über die Rundungsweise benötigst.
  • Bei umfangreichen Datenanalysen kann die Verwendung von RundenAuf die Genauigkeit der Berechnungen erhöhen.
  • Achte darauf, die VBA-Hilfe zu konsultieren, um Missverständnisse über die Funktionsweise von Round zu vermeiden.

FAQ: Häufige Fragen

1. Warum rundet VBA manchmal nach oben und manchmal nach unten? Die Round-Funktion in VBA verwendet die "Round-to-even"-Methode, um statistische Verzerrungen zu vermeiden.

2. Wie runde ich auf 0.5 oder 5 Rappen in Excel? Verwende die Funktion RundenAuf, die du im Abschnitt "Alternative Methoden" findest, um gezielt auf gewünschte Werte zu runden.

3. Gibt es Unterschiede zwischen Round und Application.Round? Ja, Round rundet zur nächsten geraden Ganzzahl, während Application.Round die traditionelle Rundungsmethode verwendet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige