[Excel] Umgang mit Dezimalzahlen (Ganzzahl, Runden, Nachkommastellen)

Gepostet am: Dec 08, 2013 1:7:56 AM

In Excel gibt es eine Reihe von Funktionen, mit denen man bestimmen kann, wie Zahlen gerundet werden:

Die allgemein geläufigsten sind:

Das sind die Excel Funktionen, die wohl die meisten Benutzer kennen. Wie man am Beispiel von 6,5 sieht rundet Excel bei der RUNDEN Funktion kaufmännisch gem. DIN 1333. Dh. 

Interessanterweise, verhält sich die VBA Funktion round() hingegen anders - siehe dazu unten!

Excel kennt noch andere Rundungsfunktionen:

zusätzlich gibt es die Funktionen:

Verhalten von Untergrenze gegenüber Abrunden:

Und dann gibt es noch eine Reihe von VBA Funktionen, die nochmal anderes Verhalten an den Tag legen.

runden auf ganze Zahlen

Beim Runden auf ganze Zahlen, können insgesamt 11 Methoden identifiziert werden, wobei leider nicht alle in Excel verfügbar sind. Für diese habe ich die Funktionen nachprogrammiert.

Runden durch Abschneiden der Kommastellen

siehe auch:

Runden in VBA <> Runden in Excel

Das Runden in VBA und Excel unterscheidet sich insofern, dass es sich beim

Ermitteln der Nachkommastellen

Da thematisch passend möchte ich noch Formeln präsentieren, die auf die Ausgabe der Nachkomma-Stellen als Zahl abzielen. 

        VBA-Code für die VBA-Lösungen

nur die Dezimalstellen als Dezimalzahl ausgeben

Public Function Dezimalwert(myRange As Range, Optional Mode As String = "normal") As Variant     Dim myZahl As Double     myZahl = myRange.Value     Dim myFormat As String     myFormat = myRange.NumberFormat     Dim Nachkommazahl As Double     Nachkommazahl = myZahl - CInt(myZahl)          Select Case LCase(Mode)         Case "normal"             Dezimalwert = Nachkommazahl         Case "format"             Dezimalwert = CStr(Format(Nachkommazahl, myFormat))         Case "gerundet"             Dezimalwert = Round(Nachkommazahl, Len(myFormat) - 2)     End SelectEnd Function

nur die Dezimalstellen als Ganzzahl ausgeben

Public Function Dezimalwert_als_Zahl(myRange As Range, Optional Mode As String = "normal") As Long     If IsNumeric(myRange.Value) = True Then         Dim WertString As String         WertString = CStr(myRange.Value)         Dim Nachkommawert As String         Nachkommawert = Right(WertString, Len(WertString) - InStr(WertString, Dezimaltrennzeichen))         Select Case LCase(Mode)             Case "normal"                 Dezimalwert_als_Zahl = Val(Nachkommawert)             Case "format"                 Dezimalwert_als_Zahl = Left(Val(Nachkommawert), 3) / 10             Case Else                 If IsNumeric(CInt(Mode)) = True Then                     Dezimalwert_als_Zahl = Left(Val(Nachkommawert), CInt(Mode) + 1) / 10                 End If         End Select     Else         Dezimalwert_als_Zahl = 0     End IfEnd Function

    Hilfsfunktionen

    

Hilfsfunktionen

Public Function AnzahlDargestellteNachkommastellen(myRange As Range) As Long     Dim tmplength As Long     tmplength = Len(myRange.NumberFormat) - 2     If tmplength < 0 Then         AnzahlDargestellteNachkommastellen = 0     Else         AnzahlDargestellteNachkommastellen = tmplength     End IfEnd FunctionPublic Function Dezimaltrennzeichen() As String     Dezimaltrennzeichen = Application.DecimalSeparator End Function

Links: