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
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
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
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
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
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
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
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
Um die Anzahl der Nachkommastellen einer Zahl in Excel oder VBA zu ermitteln, kannst du folgende Schritte befolgen:
Zahl eingeben: Stelle sicher, dass die Zahl, deren Nachkommastellen du ermitteln möchtest, in einer Zelle oder einer Variablen gespeichert ist.
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
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.)
Problem: Die Len-Funktion gibt immer 8 zurück.
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.
,) der Standard. Verwende die IIf-Funktion, um den Dezimaltrennzeichen dynamisch zu bestimmen.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.
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
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))
Application.Volatile-Anweisung in VBA, um sicherzustellen, dass die Funktion bei jeder Berechnung aktualisiert wird.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.