Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Anzahl Stellen nach dem Komma

Anzahl Stellen nach dem Komma
04.02.2009 13:13:31
braleta
Hallo Excelianer,
wie kann ich am Einfachsten in VB herausfinden, wie viele Dezimalstellen, also gültige Werte nach dem Komma, eine ermittelte Zahl hat?
Herzlichen Dank für Eure Hilfe
...bruno
Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anzahl Stellen nach dem Komma
04.02.2009 13:19:00
Hajo_Zi
Hallo Bruno,
ermittle doch die Länge, dann mit Instr das Komma und Du hast Deine Stellen.

AW: Anzahl Stellen nach dem Komma
04.02.2009 13:39:19
braleta
Hallo Hajo, hallo Thorsten,
danke für die Schnelle Antwort, aber ich kann sie nicht nutzen, weil ich einen "irren" Fehler bekomme:
Instr habe ich verwendet, Len auch, aber:
Die Zahl wird in einer Variablen "Dim Zahl as Double" ermittelt, und egal, welcher Wert in dieser Variablen steht, erhalte ich als "Len(Zahl)" immer 8!!!!!!!!!!!!!!!!
Deshalb dachte ich, dass ich einen anderenWeg brauche, um weiter zu kommen.
:-(
...bruno
Anzeige
AW: Anzahl Stellen nach dem Komma
04.02.2009 13:20:38
Oberschlumpf
Hi Bruno
Versuch mal

MsgBox Len(Range("A1").Value) - InStr(Range("A1").Value, ",")


Für Range("A1")... kannst du natürlich auch eine Variable einsetzen.
Hilfts?
Und mich würd mal interessieren, wieso du bei VBA = gut nich selbst drauf kommst? :)
Ciao
Thorsten

Anzeige
AW: Anzahl Stellen nach dem Komma
04.02.2009 13:42:00
braleta
Thorsten,
ich habe meine Antwort auf den falschen Level gepostet.
Ich kann wirklich VBA, aber in meiner ersten Antwort habe ich ja beschrieben, was bei mir passiert: egal, welcher Wert in der Variablen steht, gibt mir "Len" immer 8 zurück, egal, ob die Zahl 12,3456 lautet oder 12345678,12345...
...bruno
Anzeige
AW: Anzahl Stellen nach dem Komma
04.02.2009 13:53:00
Nepumuk
Hallo Bruno,
weil die Len-Funktion bei numerischen Werten immer die Anzahl der Bytes zurückgibt, welche die Variable im Stackframe belegt.
Aus der Hilfe:
Gibt einen Wert vom Typ Long zurück, der die Anzahl der Zeichen in einer Zeichenfolge oder die zum Speichern einer Variablen erforderlichen Bytes enthält.
Wenn du die tatsächliche Länge haben willst, musst du die Zahl erst mit CStr in einen String konvertieren.
Gruß
Nepumuk
Anzeige
AW: Anzahl Stellen nach dem Komma
05.02.2009 09:58:46
braleta
Hi Nepumuk,
danke, ich habe einige Anregungen bekommen, die es mir leicht gemacht haben, eine Lösung meines Problems zu finden.
Es war - wie so oft - einfacher als ich mir vorgestellt habe.
Jedenfalls: vielen Dank!
...bruno
AW: Anzahl Stellen nach dem Komma
04.02.2009 13:56:59
Oberschlumpf
Hi Bruno
Versuch mal

Sub test()
Dim ldbZahl As Double
ldbZahl = 12.123456789
MsgBox Len(Str(ldbZahl)) - InStr(Str(ldbZahl), ".")
End Sub


MsgBox liefert 9
Hilfts nun mit der Str-Funktion?
Ciao
Thorsten

Anzeige
AW: Anzahl Stellen nach dem Komma
04.02.2009 14:07:39
Nepumuk
Hallo Thorsten,
die Str-Funktion würde ich nicht benutzen. Schau dir mal die folgenden Ergebnisse an:
Public Sub Beispiel()
    Dim dblZahl1 As Double, dblZahl2 As Double
    dblZahl1 = 123.456
    dblZahl2 = -123.456
    Debug.Print Len(CStr(dblZahl1)), Len(Str(dblZahl1))
    Debug.Print Len(CStr(dblZahl2)), Len(Str(dblZahl2))
End Sub

Alles klar? ;-)
Gruß
Nepumuk
Anzeige
deutsches System
04.02.2009 14:36:02
Tino
Hallo,
man sollte noch darauf achten welcher Dezimalseparator verwendet wird.
(deutsches System verwendet das Komma)
Sub test()
Dim ldbZahl As Double, DezSep As String

DezSep = IIf("0.5" * 2 = 1, ".", ",")
    
ldbZahl = 12.123456789
  
MsgBox Len(Str(ldbZahl)) - InStrRev(CStr(ldbZahl), DezSep) - 1
    
End Sub


Gruß Tino

Anzeige
deutsches System, Korrektur
04.02.2009 14:38:00
Tino
Sub test()
Dim ldbZahl As Double, DezSep As String

DezSep = IIf("0.5" * 2 = 1, ".", ",")
    
ldbZahl = 12.123456789
  
MsgBox Len(CStr(ldbZahl)) - InStrRev(CStr(ldbZahl), DezSep)
    
End Sub


Anzeige
AW: deutsches System, Korrektur
05.02.2009 10:02:08
braleta
Tino,
vielen Dank für den Tipp mit dem Dezimalenseparator, ich werde diesen garantiert brauchen, weil die Anwendung international eingesetzt werden wird.
Danke für Deine Hilfe, und danke an Alle, die Beiträge geleistet haben; es ist wunderschön zu sehen, wie viel Wissen "da draußen" vorhanden ist.
...bruno
Anzeige
danke für die Rückmeldung oT.
05.02.2009 14:39:00
Tino
Nepu...ich könnt mich ja jetzt rausreden mit...
04.02.2009 15:57:07
Oberschlumpf
...mir war nicht bekannt, dass auch negative Werte berücksichtigt werden sollen :-)
Aber davon abgesehen hast du natürlich Recht, dass meine Idee nur die halbe Miete ist.
Ciao
Thorsten
AW: Nepu...ich könnt mich ja jetzt rausreden mit...
04.02.2009 16:24:00
Frager
Doch eher Unterschlumpf?
Anzeige
AW: Nepu...ich könnt mich ja jetzt rausreden mit...
04.02.2009 17:38:00
Oberschlumpf
wenn du schon Kritik übst, dann versuch es doch bitte KONSTRUKTIV
will sagen....
...was genau meinst du mit deinem Beitrag?
los...gib dir mal Mühe...du schaffst das!! (bin ich mir zwar nich sicher, aber die Hoffnung stirbt....du weißt schon)
AW: Anzahl Stellen nach dem Komma
04.02.2009 14:09:00
Jogy
Hallo.
Probier mal folgendes:

Function gNS(ByVal Zahl As Double) As Double
Dim exP As Byte
Dim strZahl As String
' Umwandlung in String, sonst geht es nicht
strZahl = CStr(Zahl)
' Exponent vorhanden?
exP = InStr(Zahl, "E")
' normale Zahl
If exP = 0 Then
gNS = Len(strZahl) - InStr(strZahl, ",")
' Wissenschaftliche Darstellung
Else
' Nachkommestellen der Mantisse
gNS = exP - 1 - InStr(strZahl, ",")
' Korrektur mit Exponenten
gNS = Application.Max(0, gNS - Mid(strZahl, exP + 1, Len(strZahl) - exP))
End If
End Function


Das gibt jetzt die Nachkommastellen der Zahl, abschliessende Nullen werden nicht mitgezählt.
Gruss, Jogy

Anzeige
AW: Anzahl Stellen nach dem Komma
04.02.2009 15:02:49
ingoG
Hallo bruno,
per Formel gehts so:
=MIN(WENN(RUNDEN(A3;ZEILE($1:$15))=A3;ZEILE($1:$15)))-(A3=GANZZAHL(A3))
(Matrixcformel, abschließen mit Strg-shift-Enter)
per VBA:

Function nachkomma(xx As Double) As Integer
Dim ii As Integer
Application.Volatile
For ii = 0 To 15
If Round(xx, ii) = xx Then Exit For
Next
nachkomma = ii
End Function


eine Rückmeldung wäre nett...
Gruß Ingo

Anzeige
Nachtrag
04.02.2009 15:42:00
ingoG
Hallo nochmal,
um bei langen Nachkommazahlen die ergebnisse nicht unnötig abzuschneiden, sollte in beiden Lösungen alle 15 durch 22 ersetzt werden...
Gruß Ingo
AW: Anzahl Stellen nach dem Komma
05.02.2009 10:04:00
braleta
Liebe Excelianer,
ich bedanke mich herzlich für all die Anregungen und Tipps zum Lösen meines Problems.
Ich bin über dieses Forum sehr froh, weil ich immer wirklich kompetente Hilfe erhalte, und ich bin sehr erstaunt, wie viel Wissen und - vor Allem - wie viel kompetentes Wissen "da draußen" vorhanden ist.
Jedenfalls: danke
...bruno :-)
Anzeige
Herzlichen Dank für alle Beiträge und die geleiste
05.02.2009 10:21:57
braleta
Hallo Excelianer,
ich habe aus den vielen Beiträgen wieder ein Mal sehr viel gelernt.
Ich habe mich für diese folgende Lösung entschieden, weil sie mir alle Vorteile bringt, die ich mir so vorstellen kann.

Sub ErmittleAnzahlVonDezimalStellen()
Dim dblZahl As Double, DezSep As String
DezSep = IIf("0.5" * 2 = 1, ".", ",")
dblZahl = -12.123456789
Debug.Print Len(Str(Abs(dblZahl))) - InStrRev(CStr(Abs(dblZahl)), DezSep) - 1
End Sub


Herzlichen Dank an Tino, an Nepumuk und alle, die ihr Wissen mit mir geteilt haben!
Um einem eventuellen Problem mit negativen Zahlen zu begegnen, habe ich die Zahl auch noch zusätzlich in ABS geklammert.
Herzlichen Dank.
...bruno

Anzeige
AW: Herzlichen Dank für alle Beiträge und die geleiste
05.02.2009 12:01:30
Jogy
Dann solltest Du aber darauf achten, dass Du keine Zahlen >= 1E+15 oder Gruss, Jogy

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Anzahl der Stellen nach dem Komma in Excel ermitteln


Schritt-für-Schritt-Anleitung

Um die Anzahl der Nachkommastellen einer Zahl in Excel oder VBA zu ermitteln, kannst du folgende Schritte befolgen:

  1. Zahl eingeben: Stelle sicher, dass die Zahl, deren Nachkommastellen du ermitteln möchtest, in einer Zelle oder einer Variablen gespeichert ist.

  2. VBA-Funktion verwenden: Nutze die folgende VBA-Funktion, um die Anzahl der Nachkommastellen zu zählen:

    Function nachkomma(xx As Double) As Integer
       Dim ii As Integer
       Application.Volatile
       For ii = 0 To 15
           If Round(xx, ii) = xx Then Exit For
       Next
       nachkomma = ii
    End Function
  3. Formel in Excel: Alternativ kannst du die folgende Matrixformel verwenden, um die Anzahl der Nachkommastellen in einer Zelle zu ermitteln:

    =MIN(WENN(RUNDEN(A3;ZEILE($1:$15))=A3;ZEILE($1:$15)))-(A3=GANZZAHL(A3))

    (Schließe die Formel mit Strg+Shift+Enter ab.)


Häufige Fehler und Lösungen

  • Problem: Die Len-Funktion gibt immer 8 zurück.

    • Lösung: Verwende die CStr-Funktion, um die Zahl in einen String zu konvertieren, bevor du die Länge ermittelst. Beispiel:
      MsgBox Len(CStr(Zahl)) - InStr(CStr(Zahl), ",")
  • Problem: Falscher Dezimaltrennzeichen.

    • Lösung: Stelle sicher, dass du den richtigen Dezimaltrennzeichen verwendest. In Deutschland ist das Komma (,) der Standard. Verwende die IIf-Funktion, um den Dezimaltrennzeichen dynamisch zu bestimmen.

Alternative Methoden

  1. Excel-Funktionen nutzen: Du kannst die Anzahl der Nachkommastellen auch durch die Kombination von Excel-Funktionen ermitteln. Eine einfache Methode ist, die RUNDEN-Funktion zusammen mit MIN und WENN zu verwenden.

  2. VBA mit Exponentialzahlen: Um mit wissenschaftlichen Notationen umzugehen, kannst du die folgende Funktion verwenden, die auch für Exponentialzahlen geeignet ist:

    Function gNS(ByVal Zahl As Double) As Double
       Dim exP As Byte
       Dim strZahl As String
       strZahl = CStr(Zahl)
       exP = InStr(Zahl, "E")
       If exP = 0 Then
           gNS = Len(strZahl) - InStr(strZahl, ",")
       Else
           gNS = exP - 1 - InStr(strZahl, ",")
           gNS = Application.Max(0, gNS - Mid(strZahl, exP + 1, Len(strZahl) - exP))
       End If
    End Function

Praktische Beispiele

  • Beispiel 1: Um die Anzahl der Stellen nach dem Komma für die Zahl 12,3456 zu ermitteln, kannst du die Funktion nachkomma so aufrufen:

    Dim result As Integer
    result = nachkomma(12.3456) ' Ergebnis: 4
  • Beispiel 2: Verwende die Formel in Excel, um die Nachkommastellen in Zelle A1 zu zählen:

    =MIN(WENN(RUNDEN(A1;ZEILE($1:$15))=A1;ZEILE($1:$15)))-(A1=GANZZAHL(A1))

Tipps für Profis

  • Zahlenformat anpassen: Achte darauf, dass die Zellen korrekt formatiert sind, um Missverständnisse zu vermeiden. Du kannst das Zahlenformat in Excel anpassen, um z. B. nur zwei Stellen hinter dem Komma anzuzeigen.
  • Dynamische Berechnungen: Nutze die Application.Volatile-Anweisung in VBA, um sicherzustellen, dass die Funktion bei jeder Berechnung aktualisiert wird.
  • Fehlerbehandlung: Implementiere in deinen Funktionen eine Fehlerbehandlung, um unerwartete Eingaben zu verwalten.

FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Nachkommastellen in einer Zahl ermitteln?
Du kannst entweder eine VBA-Funktion erstellen oder eine Excel-Formel verwenden, um die Anzahl der Nachkommastellen zu zählen.

2. Was ist der Unterschied zwischen Len und CStr in VBA?
Len gibt die Anzahl der Bytes oder Zeichen in einer Variable zurück, während CStr die Zahl in einen String umwandelt, um die tatsächliche Länge zu ermitteln.

3. Wie gehe ich mit negativen Zahlen um?
Du kannst die Abs-Funktion verwenden, um den Absolutwert der Zahl zu ermitteln, bevor du die Anzahl der Nachkommastellen zählst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige