Bankers Rounding bei Prozentwerten
12.08.2021 20:05:42
Marco
ich stehe gerade auf dem Schlauch und hoffe, ihr könnt mir helfen. Ich möchte per VBA in einem Excel-Zellbereich Prozentzahlen mit den standardmäßigen Nachkommastellen runden zu "ganzzahligen" Prozentwerten, also bspw. 0,521234 zu 0,52. Als Besonderheit soll nicht kaufmännisch gerundet werden, sondern gemäß dem bankers rounding. Genau das sollte mit ROUND direkt gehen:
Sub BankersRounding()
Dim rngZelle As Range
Set rngZelle = ThisWorkbook.Sheets(1).Range("A1")
rngZelle.Value = Round(rngZelle.Value, 2)
End Sub
Was jetzt passiert ist folgendes: wenn in A1 der Wert 0,545 steht (also 54,5%), dann rundet ROUND klassisch kaufmännisch zu 0,55. Das ist genau nicht gewünscht, weil beim bankers rounding jeweils zur nächsten geraden Zahl (in dem Fall zum nächsten geraden "ganzen" Prozentwert) gerundet wird, d.h. das gerundete Ergebnis sollte hier 0,54 sein. Wenn in A1 dagegen der Wert 54,5 steht, dann rundet ROUND korrekt zu 54. Es hilft auch nicht, wenn man den Wert von 0,545 in A1 erst mit 100 multipliziert (was ja dann 54,5 ist), dann rundet und anschließend wieder durch 100 teilt (Ergebnis ist dann wieder 0,55). Der Unterschied besteht selbst dann, wenn ich völlig unabhängig von einer Zelle in VBA rechne:
Sub BankersRounding()
Debug.Print (Round(54.5)) 'Ergebnis ist 54
Debug.Print (Round(0.545 * 100)) 'Ergebnis ist 55
End Sub
Offensichtlich wird das Ergebnis der Multiplikation mit 100 anders behandelt als der erste Werte ohne Multiplikation. Die Frage wäre also, ob es einen einfachen Weg gibt das Bankers Rounding auf die Prozentzahlen anzuwenden, ohne die Prüflogik der Rundungsmethode in mehreren Schritten nachbauen zu müssen? Vielen Dank für eure Gedanken,
Marco