TextToColumns problem mit Währungsformat

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Darkscale.

    TextToColumns problem mit Währungsformat

    Hallo Community,
    ich habe folgendes Problem: Nach dem Import einer CSV Datei liegen meine Währungswerte als Text in der Tabelle. "-3,79". Um mit den Daten arbeiten zu können, benötigt es eine Umwandlung.
    Diese habe ich mit folgendem Befehl umgesetzt:

    Quellcode

    1. IntStartRow = Cells(Rows.Count, 1).End(xlUp).Row 'Weil Rows.Count nur Murks zurückliefert
    2. ​ActiveSheet.Range("I7:I" & IntStartRow).TextToColumns Destination:=Range("I7"), _
    3. DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
    4. Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
    5. FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
    6. ActiveSheet.Range("I7:I" & IntStartRow).Style = "Currency"


    Das Skript funktioniert auch sehr gut, solange man den Befehl kein Zweites mal ausführt. Dann fängt er an die Komma und Punkte durcheinander zu bringen.
    Werte nach ImportNach Durchlauf 1Nach Durchlauf 2+
    "-0,99"
    - 0,99 €
    -0.99
    "-19,90"
    - 19,90 €
    -19.9
    "-46,99"
    - 46,99 €
    -46.99
    "-302,26"
    - 302,26 €
    -302.26

    Im ersten Durchlauf erkennt er die Kommawerte korrekt (Deutsches Zahlenformat). Ab dem zweiten geht er dummerweise nach US Standard vor. Wie kann ich das verhindern?
    Ich weiß, dass in VBA alle Zahlen und Datumswerte nach US Standard behandelt werden. Nur hilft mir das grade auch nicht weiter...

    Viele Grüße
    Wer nichts weiß ist nicht Dumm sondern unwissend!
    VB.NET Neueinsteuger... aber natürlich immer in "Option Explicit" - sonst lernt man nit!

    Darkscale schrieb:

    Nach dem Import einer CSV Datei liegen meine Währungswerte als Text in der Tabelle
    Du kannst versuchen, den DecimalSeparator anzugeben.
    Wieso konvertierst du eigentlich mehrfach?
    Wenn du es gleich beim Import regelst, kannst du Local:=True setzen und du musst gar nicht mehrmals konvertieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hehe warum einfach, wenn es auch kompliziert geht. Nee, Hintergrund der ganzen Aktion.

    Ich bekomme in Regelmäßigen Abständen CSV Dateien mit Transaktionen. Diese sollen fortlaufend in eine Excel geschrieben werden um eine Auswertung darüber laufen zu lassen. Eigentlich wollte ich das über eine "Formatierte Tabelle" handhaben, aber da diese in Excel ihren Eigenen Regeln folgen und mein VBA wissen dahingehend echt schlecht ist, habe ich nach alternativen gesucht.

    Beim Importieren der CSV über die "ActiveSheet.QueryTables.Add" Methode schreibt er mit den Währungswert nicht korrekt in die Felder. Ich muss dann per Hand jedes Feld mit F2 und Enter kurz editieren. Dann erkennt er es als korrekten Zahlenwert. Warum Excel hier Probleme bereitet weiß ich nicht. Stoße häufiger auf der Problem.

    Mein Lösungsansatz war daher die Spalte als Text zu importieren und dann mittles "TextToColumns" einen Korrekten Wert zu konvertieren. Hat ja auch im ersten Durchgang gut funktioniert.

    Warum nun mehrfach? Die Tabelle soll fortgeschrieben werden. CSV auf CSV auf CSV.

    Erschwerend kommt noch hinzu, dass ich in den CSV häufig Dopplungen habe. Mittles...

    Quellcode

    1. ​ActiveSheet.Range("A6", "K" & Rows.Count).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 11), Header:=xlYes

    ... entferne ich diese zwar, aber wenn mir die Zahlenformate durcheinander geraten, werden die an sich identischen Zeilen nicht mehr korrekt erkannt und entfernt.
    Wer nichts weiß ist nicht Dumm sondern unwissend!
    VB.NET Neueinsteuger... aber natürlich immer in "Option Explicit" - sonst lernt man nit!