====== Amerikanisches Zahlenformat ======
Beim amerikanischen Format werden die Tausenderstellen mit Komma abgetrennt und die Dezimalstelle mit Punkt.\\ Das Konvertieren in das deutsche Format erledigt folgende Funktion:
'Konvertiert amerikanische Zahlen
'**** Test ****
msgbox "aus " & "25,255.5" & " wird " & VAL("25,255.5")
Public Function VAL(sZahl) 'As Double
Dim aZahl
aZahl = Split(Replace(Replace(sZahl, " ",""), ",", ""), ".")
Select Case UBound(aZahl, 1)
Case -1
VAL = 0
Case 0
VAL = CDbl(aZahl(0))
Case 1
If Len(aZahl(0)) = 0 Then aZahl(0) = "0"
If Len(aZahl(1)) = 0 Then aZahl(1) = "0"
VAL = CInt(aZahl(0)) + (CInt(aZahl(1)) / (10 ^ Len(aZahl(1))))
Case Else
Dim i
Dim lUBound
lUBound = UBound(aZahl, 1)
sZahl = ""
For i = 0 To lUBound - 1
sZahl = sZahl & aZahl(i)
Next
Val = Cint(sZahl) + (CInt(aZahl(lUBound)) / (10 ^ Len(aZahl(lUBound))))
End Select
End Function
Soll nur __ein__ Punkt durch ein Komma ersetzt werden, reicht die REPLACE-Funktion:
msgbox replace ("5.6",".",",")
Wofür sollte man die Funktionen verwenden?:
Schreiben/Lesen von Zahlen, die als Parameter verwendet werden, z. B. in INI-Dateien.
Für das Konvertieren von Benutzereingaben sollten weiterhin CDbl und CStr verwendet werden.
Vorgehensweise:
- Zeichen wird berücksichtigt\\ Es werden alle Lehrzeichen entfernt.\\ \\ //Folgende Fehler treten auf://\\ Wenn alles gut geht, sollte "Case Else" nie erreicht werden. Ist noch drin für das Parsen von internationalen Zahlen, das ich aber ausgebaut habe. Es trat dabei ein Fehler auf, wenn eine Zahl nur Tausendertrennzeichen ohne Dezimaltrennzeichen enthielt.\\ Ist ein anderes Zeichen als eine Zahl zwischen den Trennzeichen, gibt es, anders als beim echten VAL einen Fehler\\ \\ //Andere Methoden://\\ Man kann VAL ähnlich STR auch über WMI, ggf. sogar über Registry lösen. Dazu muss das Dezimalzeichen ermittelt werden und via Replace dahin konvertiert werden. Dann kann man CDbl verwenden. Dazu muss man das Trennzeichen entweder abspeichern oder (nicht empfohlen) stetig neu ermitteln (Zeitfaktor).