Microsoft Excel

Herbers Excel/VBA-Archiv

CSV Datei richtig importieren


Betrifft: CSV Datei richtig importieren
von: Peter (hpo)
Geschrieben am: 28.11.2018 12:02:12

Hallo Zusammen,

eine CSV Datei wird mit einem Makro in eine Excel tabelle importiert.
Leider werden die Werte in den Spalten C / D / E nicht als Zahlenwert eingetragen.

Mit einen anderen Makro möchte ich die Werte in einen Zahlenwert formatieren.
Mit der Funktion Suche und Ersetzen geht dies. Ich habe die mit dem Makrorekorder aufgenommen.
Nach dem ich dies Makro gestartet habe werden die Werte nicht um formatiert.

Vieleicht kann einer mal drüber schauen und mir hier helfen.

1. Zeil Datei
http://www.herber.de/bbs/user/125716.xlsm

2. Quelle
http://www.herber.de/bbs/user/125717.txt

Vielen Dank
Peter (hpo)

  

Betrifft: AW: CSV Datei richtig importieren
von: Daniel
Geschrieben am: 28.11.2018 12:57:35

Hi

das Problem ist dass Excel und VBA oft englisch miteinander Reden, während Excel mit dem Anwender an gleicher Stelle Landessprache spricht.
Das führt dann dazu, dass der Recordercode dann nicht passt.

wenn du beispielsweise eine als Text formatierte Zahl in eine echte Zahl wandeln willst und dass mit der Funktion ersetzen machen willst, dann musst du bedenken, dass Excel einen Wert, der von VBA kommt nur dann als Zahl interpretiert wird, wenn dieser im Amerikantischen Format geschrieben ist, dh mit Punkt als Dezimalzeichen.
dh du musst beim REPLACE in VBA das Komma durch einen Punkt ersetzen, während du beim ERSETZEN von Hand das Komma durch ein Komma ersetzt.

Gruß Daniel


  

Betrifft: AW: CSV Datei richtig importieren
von: Peter (hpo)
Geschrieben am: 28.11.2018 14:01:19

Hallo Daniel,

vielen Dankt für Deine Rückmeldung.

Weis Du vieleicht eine andere Funktion, mit der ich die Textwerte in Zahlenwerte ändere?
Probiert habe ich auch bereits folgendes: Textwert * 1 dies funktioniert auch soweit.
Dies habe ich mit einer Schleife durch alle Cellen gemacht. Dauert aber seher lange bei ca. 3000 Celllen.

Viele Grüße
Peter (hpo)


  

Betrifft: TextZahlen in Zahlen umwandeln
von: Daniel
Geschrieben am: 28.11.2018 18:30:06

Hi
das geht auch einfacher:
1. leere Zelle kopieren
2. in den umzuwandelnden Zellen den Wert einfügen mit der Einstellung: Vorgang=Addieren.

in VBA:

Cells.SpecialCells(xlcelltypelastcell).Offset(0, 1).Copy
Range(...).PasteSpecial xlpastevalues, Operation:=xladd
aber auch hier gilt:
wenn du das von Hand machst, werden Texte mit Dezimal-Komma in Zahlen gewandelt.
wenn du das von VBA ausführen lässt, werden Texte mit Dezimal-Punkt in Zahlen gewandelt.

Gruß Daniel


  

Betrifft: AW: CSV Datei richtig importieren
von: PeterK
Geschrieben am: 28.11.2018 15:36:59

Hallo

Da Du die Daten im englischen Format hast, kannst Du Excel auch einmal kurzfristig umschalten. Da dies aber nur für den ersten Aufruf gilt (d.h. beim aktualisieren der Query wären wieder die "normalen" Trennzeichen gültig) lösche ich die Query (Vorsicht: ich lösche ALLE)


Sub Test()
    ActiveWorkbook.Worksheets.Add

    Application.UseSystemSeparators = False
    Application.ThousandsSeparator = ","
    Application.DecimalSeparator = "."

    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Users\Documents\Herber\125717.txt", _
                                     Destination:=Range("$A$1"))
        .Name = "125717.txt"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = True
        .PreserveFormatting = False
        .RefreshOnFileOpen = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With

    Dim qt As QueryTable
    For Each qt In ActiveSheet.QueryTables
        If qt.Refreshing Then qt.CancelRefresh
        qt.Delete
    Next

    Application.ThousandsSeparator = "."
    Application.DecimalSeparator = ","
    Application.UseSystemSeparators = True

    Columns("A:A").Delete Shift:=xlToLeft

End Sub




  

Betrifft: AW: CSV Datei richtig importieren
von: Peter (hpo)
Geschrieben am: 28.11.2018 16:16:21

Hallo PeterK

Vielen Dank macht genau das was ich möchte.
Super ;)

Viele Grüße
Peter (Ihpo)


  

Betrifft: AW: CSV Datei richtig importieren
von: Günther
Geschrieben am: 28.11.2018 18:42:09

Moin,
Kannst/darfst/willst du Power Query > http://www.excel-ist-sexy.de/power-query-das-add-in/ nutzen? Da ist es ohne eine Zeile VBA und auch ohne Formel möglich. Einfach nur importieren ...


  

Betrifft: AW: CSV Datei richtig importieren
von: Daniel
Geschrieben am: 28.11.2018 18:43:34

Hi
dazu muss man aber nicht ins System eingreifen.
man kann das auch beschränkt für den Import tun, um hierfür die Werte richtig zu importieren.
von Hand geht das im Schritt 3 des Assistenten unter WEITERE
im Makro dann mit diesen beiden Optionen, welche vom Recorder nur dann aufgezeichnet werden, wenn man sie abweichen von der Landestypischen Schreibweise abändert:

 With AciveSheet.QueryTables.Add(...)
       .Name = ...
       ...
        .TextFileDecimalSeparator = "."
        .TextFileThousandsSeparator = ","
       ...
 End With

Gruß Daniel


  

Betrifft: AW: CSV Datei richtig importieren
von: Peter (hpo)
Geschrieben am: 29.11.2018 11:24:28

Hallo Günter, hallo Daniel

Vielen Dank für Eure Beiträge.

Komme mit der Lösung von PeterK sehr gut zurecht.

Nochmals vielen Dank und viele Grüße
Peter (hpo)