meta data for this page
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).