Hallo Basti,
irgendwo hast du ja noch geschrieben, dass du gerne aufeinanderfolgende Trennzeichen wie ein einziges behandeln würdest. Damit wird bei einer korrekten CSV Datei natürlich die Spaltenzugehörigkeit aufgegeben, also wenn es leere Zellen gibt, können die Inhalte in die falsche Spalte verschoben werden. Da ich gerade vor ein paar Tagen angefangen habe, mich mit PowerQuery etwas näher zu beschäftigen, habe ich da einfach mal rumgespielt und diese Lösung erarbeitet (wie gesagt, ich bin noch Anfänger, wer also konstruktive Anmerkungen hat, darüber freue ich mich - mir ist aber auch klar, dass wir hier in einem VBA-Forum sind).
Hier mein M-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | let
CSVFILE = "E:\tmp\del\die.txt" ,
DELIMITER = "#(tab)" ,
Source = Table.FromColumns({Lines.FromBinary(File.Contents(CSVFILE), null , null , 65001)}),
deleted_dbl_delims =
Table.ReplaceValue(Source, "" , "" ,
(thetext as nullable text, old as text, new as text) =>
Text.Combine(List.RemoveMatchingItems(Text.Split(thetext, DELIMITER), { "" }), DELIMITER),
{ "Column1" }
),
f_count_columns = (the_text as text) =>
if List.Contains({ "" , null }, the_text)
then 0
else List.Count(Text.Split(the_text, DELIMITER)),
new_columns_count = List.Max(
List.Generate(
() => [ i = 0, count = f_count_columns(deleted_dbl_delims[Column1]{i}) ],
(_) => [i] < List.Count(deleted_dbl_delims[Column1]),
(_) => [ i = _[i]+1, count = f_count_columns(deleted_dbl_delims[Column1]{i}) ],
(_) => _[count]
)),
splitted = Table.SplitColumn(deleted_dbl_delims,
"Column1" ,
Splitter.SplitTextByDelimiter(DELIMITER, null ),
List.Generate(
() => [i = 1, column_name = Text.Combine({ "col " , Text.From(i)}) ],
(_) => _[i] < new_columns_count + 1,
(_) => [i = _[i]+1, column_name = Text.Combine({ "col " , Text.From(i)}) ],
(_) => _[column_name]
)
)
in
splitted
|
Das ist kein VBA!
Falls du überhaupt nicht weißt, wovon ich spreche und es dennoch ausprobieren möchtest, kannst du einfach eine neue Datei nehmen (bestehende geht auch, aber zum Auspbrobieren)...
Bei mir unter Excel2016 geht das so:
Über Daten => Abrufen und Transformieren => neue Abfrage => Aus anderen Quellen => leere Abfrage
das öffnet den PowerQuery Editor.
Hier kannst du auf links oben unter "Home" => "Abfrage" => auf "Erweiterter Editor" klicken. Jetzt öffnet sich ein Fenster in welchem wahrscheinlich 4 Codezeilen stehen. Die kannst du einfach rauslöschen und stattdessen meine hineinkopieren.
Jetzt musst du noch in der ersten Codezeile den Pfad zu deiner Textdatei anpassen.
Wenn du nun den Erweiterten Editor über "Fertig" verlässt, solltest du bereits die Daten sehen.
Jetzt gilt es nur noch auf "Speichern und Laden" (Oder "Speichern und laden in") zu klicken und schon hast du die Daten in einem neuen (oder wahlweise auch in einem bestehenden) Tabellenblatt. Der Import wird direkt als "Intelligente Tabelle" abgelegt.
Jederzeit kannst du nun auf mit Rechtsklick auf der "Intelligenten Tabelle" das Kontextmenü aufrufen und dort über "Aktualisieren" die Daten erneut einlesen (vielleicht hat sich die Datei ja geändert ...).
Das Aktualisieren klappt natürlich auch über "Daten" => "Verbindungen" => ...
Wenn du eine andere Excelversion hast, dann kann der Weg mehr oder weniger anders heißen.
Grüße, Ulrich
|