Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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

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
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
Anzeige
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

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
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?
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)
Anzeige
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

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
Anzeige
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 :-)
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

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

180 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige