Clever-Excel-Forum

Normale Version: .TextToColumns - Methode, SpecialPase, Einlesen von CSV sheets in Excel (Format!)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Liebe Excel-Vereinsgemeinde ;)

ich habe folgendes Problem: Beim Einfügen meiner Daten aus dem CSV werden die Werte von 3 Spalten in eine gesteckt.
Das passiert, weil Excel das Semikolon nicht als Trennzeichen erkennt. Ich werde die problematischen Zeilen fett hervorheben.
Meiner (laienhaften) Ansicht nach sollte dieser Code richtig sein, ist er aber leider nicht.
Ebenso werden die 5 Kopfzeilen alle in Spalte A des Excelsheets gequetscht, obwohl eigentlich im Quellsheet CSV spalte A und B Daten enthalten.

Ein Beispiel (KOPFZEILE)
Start time;29.03.2018 14:08:22 (Alles in A1 ; B1)
Ein Beispiel (TABELLE)
0;1;0 (Alles in A6, statt in A6, B6 und C6)

'_________________________

'ERFASSEN tatsächlich vorhandener dateien
Dim wbCSV As Workbook
Dim wbAUSWERTUNG As Workbook
Dim ws As Worksheet
Dim a As Integer
Set fso = CreateObject("Scripting.Filesystemobject")
Set wbAUSWERTUNG = ActiveWorkbook
a = wbAUSWERTUNG.Worksheets.Count
Application.DisplayAlerts = False
Application.ScreenUpdating = False
   
'____________________
'Jetzt einlesen.
'--------------------
    For Each f In fso.GetFolder(CSVPFAD).Files
        If LCase(Right(f.Name, 3)) = "csv" Then
            Workbooks.OpenText Filename:=f.Path
            Set wbCSV = ActiveWorkbook
            On Error Resume Next
            Set ws = wbAUSWERTUNG.Worksheets(f.Name)
            If Err <> 0 Then
                Set ws = wbAUSWERTUNG.Worksheets.Add(after:=Sheets(Sheets.Count))
                'MsgBox "Profil wurde erfolgreich geladen: " & f.Name, vbInformation, "Profil geladen" 'funktioniert
                ws.Name = f.Name
                ws.Range("A:ZZ").Clear
            End If
            wbCSV.Worksheets(1).Range("A:ZZ").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Semicolon:=True, TrailingMinusNumbers:=True
            wbCSV.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
            wbCSV.Close False
            wbCSV.Worksheets(1).Copy
            ws.Range("A1").SpecialPaste
            'ws.Name = f.Name
        End If
    Next
    Application.DisplayAlerts = True
    Set fso = Nothing
'_________________________
'Jetzt sortieren

und so weiter und so fort...
Hallo, du hast den Import noch nicht via Power Query probiert??!?!!!
Danke für den Tipp!
erstmal muss ich mich korrigieren: nach den letzten Tests hat das scheinbar gar nichts damit zu tun,
ob ich PASTE oder SPECIALPASTE benutze.

zumindest sollte das doch auch so funktionieren?

aber ich schaue mir dieses Power Query mal an, Danke!
Hallo, :19:

lädst du uns mal so eine CSV-Datei hier hoch? Dann "schau mer mol" - wie der Kaiser sagen würde. :21:
ich muss vorher einige Daten verfälschen etc. (technische Prozessdaten mit wirtschaftlicher Nutzung)

im Allgemeinen kann ich sagen: wenn ich es wie folgt mache, "kriegt" er das Format perfekt hin;
allerdings werden in der Tabelle (unterhalb der 5 Kopfzeilen mit Beschriftung) nur die Spalten A B und C befüllt,
obwohl es Daten bis T (Spalte 20!) gibt:
________________________________________



wbCSV.Worksheets(1).Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Semicolon:=True, TrailingMinusNumbers:=True
            wbCSV.Worksheets(1).Range("A:ZZ").Copy Destination:=ws.Range("A1")
            wbCSV.Close False
            wbCSV.Worksheets(1).Copy
            ws.Range("A1").Paste
_______________________________________________

Es muss also daran liegen, wie der Wertebereich der Tabelle eingefügt wird in das Excel;
er erkennt so die Semikolons, aber bricht ab Spalte 4 ab; ich muss da an den Bereichen was falsch haben;
aber ich habe Range("A:A").TextToColumns und Range("A:ZZ") ausgiebig getestet, dass muss genau so sein.

was Destination:=ws.Range("A1") und ws.Range("A1").Paste angeht (das eigentliche EINFÜGEN), steht bei ->(link)
Microsoft wörtlich:
Destination: A Range object that specifies where Microsoft Excel will place the results. If the range is larger than a single cell, the top left cell is used.
Insofern bin ich bisher ausgegangen, das "A1" die einzig zulässige Zielangabe ist.
so, hier ein Beispiel für die Formatierung.[attachment=23026]
Zielangabe: ws.Range("A:ZZ").Paste hat das Gleiche zur Folge wie "A1"
Hallo, :19:

so öffnet er bei mir richtig: :21:

Code:
Workbooks.Open Filename:="C:\Temp\CSV_example.csv", Local:=True

Bei dir auch (Pfad- und Dateiname natürlich anpassen)?
Du bist einfach Spitze! ;)
DANKE!!!