Nachkommastellen berechnen

Nur die Nachkommastellen berechnen

Es gibt Sit­u­a­tio­nen, wo der Nachkom­ma-Anteil ein­er Zahl bzw. Zif­fer­n­folge gebraucht wird. Gemeint ist beispiel­sweise bei der Zahl 3,456 das Ergeb­nis 0,456. Eigentlich ganz ein­fach, denn es gibt ja in VBA die Funk­tion Int(), welche den ganz­zahli­gen Anteil ein­er Zahl berech­net. Im Beispiel wäre das dann 3 als Ergeb­nis. Und den Wert ziehe ich dann von der zu bear­bei­t­en­den Zahl ab. „Eigentlich” heißt aber auch, dass es nicht immer stim­men muss. Und das ist auch hier der Fall. Eine solche Funk­tion (UDF) würde dann beispiel­sweise so ausse­hen:

Function NKA(Wert As Variant) As Double  'NachKommaAnteil
   'Führt zu fehlerhaften Ergebnissen!
   NKA = Wert - Int(Wert)
End Function

Pro­bieren Sie es gerne ein­mal mit der oben genan­nten Zahl aus. Klappt doch! Alles klar, dann set­zen Sie doch ein­mal ein Minusze­ichen vor die Zahl: -3,456 und schauen Sie sich das Ergeb­nis an. Ernüchternd… Es ließe sich zwar etwas mit der Abs()-Funk­tion machen, aber das bedeutet unver­hält­nis­mäßig viel Aufwand.

Ich habe eine etwas umfan­gre­ichere Funk­tion erstellt, die auch für nicht so Geübte in Sachen Pro­gram­mierung einiger­maßen nachvol­lziehbar ist:

Function NKStellen(Wert As Variant) As Double
   Dim Rc As String, Lg As Integer, KommaPos As Integer
   Rc = CStr(Wert)
   Lg = Len(Rc)
   KommaPos = InStr(Wert, ",")
   Rc = IIf(KommaPos > 0, "0," & Right(Rc, Len(Rc) - KommaPos), 0)
   NKStellen = CDbl(Rc)
End Function

Hier wird immer der kor­rek­te Nachkom­ma-Anteil ein­er Zahl aus­gegeben, auch bei neg­a­tiv­en Zahlen. Aber immer als pos­i­tiv­er Wert. Wenn das nicht gewün­scht ist, gibt es eine weit­ere Lösung, die ich etwas später darstelle. Diese (oben gezeigte) Funk­tion hat den Vorteil, dass ich mit ein­er Mini-Änderung in Zeile 6 des Codes erre­ichen kann, dass die Zif­fern nach dem Kom­ma ohne die führende „0,” dargestellt wer­den:

Function NKStellen2(Wert As Variant) As Double
   Dim Rc As String, Lg As Integer, KommaPos As Integer
   Rc = CStr(Wert)
   Lg = Len(Rc)
   KommaPos = InStr(Wert, ",")
   Rc = IIf(KommaPos > 0, "0." & Right(Rc, Len(Rc) - KommaPos), 0)
   NKStellen2 = CDbl(Rc)
End Function

Hier wäre das Ergeb­nis 456 (als Zahl). Und Sie müssen schon genau hin­se­hen, um die Änderung zu erken­nen. Inner­halb des (einzi­gen) Strings wurde das Kom­ma gegen einen Punkt aus­ge­tauscht. Kleine Ursache, große Wirkung.  💡

Soll aber das Vorze­ichen mit berück­sichtigt wer­den, das Ergeb­nis also auch mit dem gle­ichen Vorze­ichen behaftet sein, wie die Ursprungszahl bietet sich eine sehr kurze Vari­ante mit ein­er recht unbekan­nten Funk­tion inner­halb der UDF an:

Function NKStellen3(Wert As Variant) As Double
   NKStellen3 = Wert - Fix(Wert)
End Function

Und das ist mein heim­lich­er Favorit, wenn die führende Null mit dem anschließen­den Kom­ma ver­wen­det wer­den soll, also die typ­is­che Vor­gabe für ein Ergeb­nis. Und wenn Neg­a­tive Aus­gangswerte ein­mal als pos­i­tives Ergeb­nis dargestellt wer­den sollen, dann mache ich den Funk­tion­saufruf so: =ABS(NKStellen(A1)), wenn in A1  der auszuw­er­tende Wert ste­ht. Und natür­lich lässt sich das auch fest in die UDF ein­binden, dann ist der Aufruf natür­lich ohne das umschließende ABS().

Hin­weise, wie Sie eine UDF ein­binden und nutzen kön­nen, find­en Sie hier im Blog.

▲ nach oben …

Rück­mel­dun­gen / Feed­back gerne per Mail an mich (G.Mumme@Excel-ist-sexy.de)

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B. 1,50  freuen … (← Klick mich!)

Dieser Beitrag wurde unter Code-Schnipsel, Mit VBA/Makro, Rechnen & Zahlen abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.