AW: .csv Datein einlesen und bestimmte Werte auslesen
27.06.2024 22:40:14
Yal
Hallo Enrico,
ja, VBA ist eine Möglichkeit. Die andere wäre mit Power Query.
Eine Fragen dazu: sind in dem Verzeichnis nur Dateien, die es zu lesen gilt oder haben diese Dateien eine Namensmuster, die erlaubt diese eindeutig zu isolieren?
Dann wäre Power Query geeignet.
Wenn die Frage in beiden Teile mit nein beantwortet wurde, gibt es noch die Möglichkeit, die Dateien aus dem Verzeichnis zu lesen und in Excel diese einzel auszuwählen.
(Du redest zuerst von "Excel-Dteien", dann von "csv". csv sind Textdatei, die standardmässig mit Excel geöffnet werden. Es sind trotzdem keine Exceldatei)
Zu Möglichkeit 1:
- gehe im Menü "Daten", "Daten abrufen", "Aus Dateien", "Aus Ordner" (habe xl 365, könnte in xl16 leicht abweichend sein)
- wähle das Verzeichnis, dann "Daten transformieren"
- filtere die relevante Dateien, z.B. mit Textfilter auf dem Dateiname "beginnt mit..."
- achte das auch Unterverzeichnis einbezogen sind. Man muss diesen ev. herausfiltern
- in der Spalte "Content", auf dem Doppelpfeil-Symbol klicken ("Datei kombinieren")
- es beginnt eine Verarbeitung der Dateien auf Basis von einem Beispieldatei.
Du hast schon eine vollständige "Vorschau" der gelesenen Dateien.
- Die letzte "angewendete Schritten" rechts sollte "geänderter Typ" sein. Diese Schritt löschen.
- Die Verarbeitung der Dateien wird in einer "Funktion" abgelegt, die "Datei transformieren" heisst.
- darin gibt es eine Abfrage "Beispieldatei transformieren", klicke diese an, um diese zu bearbeiten.
- sollte es in den "angewendete Schritten" rechts einen Eintrag "Höher gestufte Header", diese Schritt löschen.
- mit Menü "Start", "Zeilen Beibehalten", "erste Zeilen beibehalten", Anzahl zeilen: 1
- markiere die 7 Spalten ("7 gefüllten Zellen" in deinem Beschreibung)
- Menü "Transformieren", "Spalten zusammenführen", Semikolon als Trenner auswählen.
- gehe in Menü "Start", "erweiterte Editor", der sichtbare Code sieht ungefähr so:
let
Quelle = Excel.Workbook(Parameter1, null, true),
Tabelle1_Sheet = Quelle{[Item="Tabelle1",Kind="Sheet"]}[Data],
#"Beibehaltene erste Zeilen" = Table.FirstN(Tabelle1_Sheet,1),
#"Zusammengeführte Spalten" = Table.CombineColumns(Table.TransformColumnTypes(#"Beibehaltene erste Zeilen", {{"Column1", type text}}, "de-DE"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt")
in
#"Zusammengeführte Spalten"
- andere den Code, sodass die Zeilen "Beibehaltene erste Zeilen" und "Zusammengeführte Spalten" so aussehen (könnte bei Dir leicht abweichend sein, u.a. die Spaltennamen "Column1", ..):
#"Beibehaltene erste Zeilen" = Table.CombineColumns(Table.TransformColumnTypes(Table.FirstN(Tabelle1_Sheet,1), {{"Column1", type text}}, "de-DE"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt"),
#"Zusammengeführte Spalten" = #"Beibehaltene erste Zeilen"
- drücke ok. Du bist zurück im "einfachen Editor".
- gehe auf die letzte angewendete Schritt. Diese zeigt in der Bearbeitungsleiste "= #"Beibehaltene erste Zeilen" "
- lösche diese Schritt
- gehe wieder in den erweiterte Editor,
(Spaßeshalber: schau, was diese Löschung verursacht hat: nach dem "in" steht immer den Namen der letzten Ergebnis.)
-markiere die Zeile
#"Beibehaltene erste Zeilen" = Table.CombineColumns(Table.TransformColumnTypes(Table.FirstN(Tabelle1_Sheet,1), {{"Column1", type text}}, "de-DE"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt"),
- und kopiere diese in eine separaten Ablage (z.B. Notepad: Win+r, "Notepad", enter)
- lösche das abschliessende Komma
- gehe wieder raus zum einfachen Editor,
- lösche die letzte Schritt (wir haben diese zur Seite gelegt!)
- Menü "Start", "Zeilen entfernen", "erste Zeilen entfernen", Anzahl Zeilen: 1
- gehe in dem Filter von "Spalte1" und wähle die 7 Code, die Du behalten möchtest.
- Spalte 2 und 3 markieren, Rechtsklick auf dem Spaltenüberschrift und "andere Spalten entfernen"
- Menü "Spalten hinzufügen", "benutzerdefinierte Spalte",
- im Formelbereich, füge von der abgelegten Code den Teil nach der "=" hinter den bereit vorhandenen (und nicht löschbaren) Gleichzeichen
Table.CombineColumns(Table.TransformColumnTypes(Table.FirstN(Tabelle1_Sheet,1), {{"Column1", type text}}, "de-DE"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Zusammengeführt")
- gehe auf dem Überschrift dieser neuen Spalte und klicke auf dem Symbol mit den 2 auseinandergehende Pfeilen
- Ursprüngliche Präfix rausnehmen, ok.
- Spalte markieren, Menü "Transformieren", "Spalte teilen", "nach Trennzeichen", Semikolon als Trennzeichen wählen
Gehe zurück auf deine Ursprungsabfrage in "Andere Abfragen" und siehe das Ergebnis bzw. Vorschau an.
- Menü "Datei", "Schliessen & laden".
Fertig.
Sollte die Quelle sich ändern, einfach auf das geladene Ergebnis rechtklicken und "aktualisieren".
Es ist kein VBA, daher kann die Datei als normalen xlsx gespeichert werden.
Wenn Du noch mehr über Power Query erfahren möchtest, Turorial und Video unter: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/
VG
Yal