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:

  1. 'Konvertiert amerikanische Zahlen
  2.  
  3. '**** Test ****
  4. msgbox "aus " & "25,255.5" & " wird " & VAL("25,255.5")
  5.  
  6. Public Function VAL(sZahl) 'As Double
  7.  
  8. Dim aZahl
  9. aZahl = Split(Replace(Replace(sZahl, " ",""), ",", ""), ".")
  10.  
  11. Select Case UBound(aZahl, 1)
  12. Case -1
  13. VAL = 0
  14. Case 0
  15. VAL = CDbl(aZahl(0))
  16. Case 1
  17. If Len(aZahl(0)) = 0 Then aZahl(0) = "0"
  18. If Len(aZahl(1)) = 0 Then aZahl(1) = "0"
  19.  
  20. VAL = CInt(aZahl(0)) + (CInt(aZahl(1)) / (10 ^ Len(aZahl(1))))
  21. Case Else
  22. Dim i
  23. Dim lUBound
  24. lUBound = UBound(aZahl, 1)
  25. sZahl = ""
  26. For i = 0 To lUBound - 1
  27. sZahl = sZahl & aZahl(i)
  28. Next
  29. Val = Cint(sZahl) + (CInt(aZahl(lUBound)) / (10 ^ Len(aZahl(lUBound))))
  30. End Select
  31. End Function

Soll nur ein Punkt durch ein Komma ersetzt werden, reicht die REPLACE-Funktion:

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