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).