Dezimalzeichen Ländereinstellung

  • Sonstige

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Rieu.

    Dezimalzeichen Ländereinstellung

    Hallo Leute,

    habe gerade ein Problem mit Dezimalpunkt/Komma. Auf meinem Rechner ist in den Ländereinstellungen der Dezimalpunkt gesetzt, in Excel aber das Komma. Das Makro sollte aber auf allen möglichen Konstellationen laufen.

    Mein Ziel ist, eine Zahl die als Text abgelegt ist (wurde so von einem anderen Programm exportiert) in eine Zahl umzuwandeln.

    so habe ich es versucht, klappt aber nicht da Rechnereinstellung und Exceleinstellung voneinander abweichen.

    Visual Basic-Quellcode

    1. eintrag = Worksheets(2).Cells( i, 3).Value ' Zahl als String
    2. ' soll für Punkt und Komma funktionieren
    3. trennzeichen = Application.DecimalSeparator
    4. If trennzeichen = "," Then
    5. eintrag = Replace(eintrag, ".", ",")
    6. Else
    7. eintrag = Replace(eintrag, ",", ".")
    8. End If
    9. zahl = FormatNumber(eintrag) ' Ländereinstellung Rechner, nicht gleich Application.DecimalSeparator!!


    gibt es eine Möglichkeit, die Rechner-Einstellung abzufragen, oder bei FormatNumber auf die Application-Einstellung zu gehen?



    Wäre Euch für Tipps sehr dankbar...
    Frage: Wie importierst Du denn dia Daten aus dem anderen Programm? Manchmal kann man das beim Import schon gerade ziehen.

    Hast Du mal unter Extras-Optionen-International nachgeschaut. Da kann man auch die Einstellungen anpassen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    1.) Ich weiss nicht, ob es so sinnvoll ist, Zahlen zur internen Berechnung in einem Nummernformat abzuspeichern.
    2.) Funktioniert

    Visual Basic-Quellcode

    1. eintrag = Val(Replace(Worksheets(2).Cells(i, 3), ",", "."))

    ? Wäre "doppelt gemoppelt"
    @INOPIAE:

    Genau genommen mache ich aus dem anderen Programm einen Export nach Excel (wird dort im Menü angeboten, erzeugt eine xls-Datei). Mein Makro importiert dann nur noch von Excel nach Excel.

    Den Eintrag unter Optionen-International kenne ich, aber der würde das Problem nur auf meinem Rechner lösen. Mein Ziel ist ein Programm das auch bei anderen Anwender läuft, ohne dass die ggf. erst ihr Excel verstellen müssen.

    Interessanterweise tritt das Problem nicht auf, wenn ich den String in die Zelle schreibe und dann mit der Korrektur (rechte Maustaste) "in Zahl umwandeln" auswähle. Leider zeichnet der Makrorecorder das nicht auf.

    @Rieu:

    1) ich füttere ein Formular (in dem auch Formeln verwendet sind) mit den Werten, deshalb ist es schon nötig den Eintrag in eine Zahl umzuwandeln

    2) der Replace-Befehl funktioniert in beiden Varianten, das Problem ist aber, dass ich (im allgemeinen, d.h. für beliebige Rechner und Anwender) nicht weiß ob der FormatNumber-Befehl den Dezimalpunkt oder -komma braucht. Der Val-Befehl scheint auf der gleichen Basis wie FormatNumber zu arbeiten:

    Visual Basic-Quellcode

    1. zahl = Val(eintrag)


    der Debugger zeigt mir: eintrag= 0,060002 zahl = 60002

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Adrian“ ()

    Kannst Du denn beim Export statt in Excel, den Export auch in einen CSV-Datei machen? Beim Import der CSV-Datei, kann man die Dezimalstellen- und Tausenderstellendarestellung anpassen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallo INOPIAE,

    äußerst ungern, es handelt sich um eine größere Tabelle auf die ich auch verschiedene Such-Befehle loslasse.

    Hallo Rieu,

    Val arbeitet laut Online-Hilfe immer mit Dezimalpunkt, unabhängig von irgendwelchen Einstellungen. Das ist die Lösung, danke! :rolleyes:
    Schön, dass es funzt, aber nur zum Verständnis: Val ist eine Typumwandlungsfunktion, FormatNumber bietet sich bei der Ausgabe an. Val wandelt aber nur dann einwandfrei in eine Zahl um, wenn das Trennzeichen ein "." ist, daher auch noch die Replace-Funktion um evtl. vorhandene Kommata in einen Punkt zu ersetzen.