Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: .csv Datein einlesen und bestimmte Werte auslesen

.csv Datein einlesen und bestimmte Werte auslesen
27.06.2024 20:38:12
Enrico
Hallo zusammen,

ich habe hier ein Problem das ich schon mehrfach auf verschiedenen Wegen lösen wollte.
So richtig bin ich nicht an Ziel gekommen und hab alles wieder weg geschmissen und von vorne begonnen. Manchmal ist das besser als ewig am falschen Ansatz hängen zu bleiben. Ich bin jetzt auch nicht der VBA Fachmann sondern eher Anfänger in dieser Programmiersprache.

Das Problem:

Ich habe einen Ordner mit diversen Excel Dateien die alle einen unterschiedlichen Namen haben.
Die Dateien sollen alle nacheinander gelesen werden und in einer neuen Datei zusammengefasst werden. Soweit wäre das erst mal nicht so schwierig.
ABer: Ich brauche aus jeder Datei nur die erste Zeile. Die ist immer Fix mit 7 gefüllten Zellen belegt.
Das eigentliche Problem liegt an den Zeilen die danach kommen.
Dort hängt in jeder Datei eine Stückliste mit ungefähr 20 Zeilen (variabel gefüllt 10-30 Zeilen)
Diese Zeilen entsprechen nicht der Struktur der ersten Zeile sondern der Stücklisten Code für jede Zeile steht in Spalte A untereinander und danach kommen die Werte die ich brauche.
In der STückliste würde ich gerne prüfen ob bestimmte Stücklistencodes in Spalte A stehen. Es sind 7 Codes die ich fix bräuchte. Würde das bedeuten die Stückliste mit einer Schleife 7 mal zu durchlaufen ?
Wenn ein Code gefunden wird will ich die Werte aus dieser Zeile (Spalte B,C ) HART verdrahtet hinter die Zeile 1 der Datei hängen. Also in meinem Fall Zeile 1 der .csv mit den 7 Feldern A-F. Danach will ich die 7 benötigten Stücklistenwerte z.b. ab Spalte H einfügen. Das aber immer gleich. Also wenn ich den Code ABC suche und den in der STückliste in Zeile 10 finde soll er trotzdem immer in die gleiche Position der Zieltabelle geschrieben werden.
Code ABC = Zieltabelle Spalte H
Code ABD = Zieltabelle Spalte I

Nachdem die Codes in der Quelldatei nicht immer gleich gefüllt werden, war das die Herausforderung an der ich bisher gescheitert bin.

Ich hoffe das war soweit verständlich und e kann mir jemand einen Tipp geben.
Würde mich super freuen.

VG
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .csv Datein einlesen und bestimmte Werte auslesen
27.06.2024 21:41:07
Piet
Hallo

du hast soooviel geschrieben, das war mir zuviel zum lesen. Dazu mein ernstgemeinter Tipp.
Wir können fiel leichter helfen, wenn wir an Hand von Beispieldatei/en den Tabellenaufbau erkennen.
Daten aus vielen Dateien holen ist nicht das Problem. Wir müssen nur den Tabellenaufbau verstehen!
Zu deiner Info. Ich habe mal alle Makros aus 1000 Dateien aufgelistet. ca. 1/2 Stunde Arbeit.

mfg Piet
Anzeige
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




Anzeige
AW: .csv Datein einlesen und bestimmte Werte auslesen
29.06.2024 00:26:59
Piet
Hallo Enrico

anbei eine Beispieldatei mit der du csv Dateifaten (ohne zu Öffnen) auslesen kannst.
Zuerst musst du deinen Ordnerpfad in Zelle C1 eingeben und alle csv Dateien auflisten.
Im Makro in Modul2 kannst du das Dateien auflisten noch verbessern, wenn du das änderst:
temp = Dir$(sPfad & "*.*") --> ändern in --> temp = Dir$(sPfad & "*.csv")
Dann kannst du mit dem 2. Button deine Stückliste erstellen.
https://www.herber.de/bbs/user/170559.xls

mfg Piet
Anzeige
AW: .csv Datein einlesen und bestimmte Werte auslesen
01.07.2024 08:19:18
Enrico
Vielen Dank für Deine Hilfe.
Ich habe noch kleine Änderungen eingebaut und jetzt das Ergebnis, das ich haben wollte.

AW: .csv Datein einlesen und bestimmte Werte auslesen
28.06.2024 08:44:34
Enrico
Hallo Yal,

das war tatsächlich nicht klar formuliert.
Die Quelldateien sind alle .csv mit völlig unterschiedlichen Namen. Als Ergebnis würde ich eine .xls oder .xlsx bauen wollen, die dann wiederum in einem Nachgelagerten System verarbeitet wird.

Deswegen auch die angestrebte feste Struktur in der Excel Zieldatei. Über Import Vorlagen könnte ich diese Datei dann in die nachgelagerte Datenbank einlesen und diesen Vorgang soweit wie möglich automatisieren.

Die Vorschläge aus deinem Post schaue ich mir gerade an und werde das mal durch arbeiten.

VG
Anzeige
AW: .csv Datein einlesen und bestimmte Werte auslesen
01.07.2024 08:20:50
Enrico
Hallo Yal,

ich habe den Ansatz von Piet weiter verfolgt und das Ergebnis was ich haben wollte.
Danke für deine Hilfe.
AW: .csv Datein einlesen und bestimmte Werte auslesen
27.06.2024 21:47:24
Piet
Nachtrag

Bitte vergiss nicht uns deinen Pfad + Ordnernamen anzugeben. Den können wir nicht wissen!
Sind alle Dateien in diesem Ordner, oder gibt es noch andere Ordner??
Müssen die Daten in jeder Datei aus demselben Sheet geholt werden, oder gibt es mehrere Sheets?
Wie heisst das Sheet? Ist es immer dergleiche Name, oder gibt es verschiedene Namen?

mfg Piet
Anzeige
AW: .csv Datein einlesen und bestimmte Werte auslesen
28.06.2024 09:07:56
Enrico
Hallo Piet,

sehr gerne.
Hier die Beispiele dazu:

Quelldatei:
Userbild

wenn nur eine Datei vorhanden ist, sollte die Zieldatei so aussehen: (die Kopfzeile mit den Überschriften kann fest definiert werden. Diese ist immer gleich)
Userbild

wenn mehrere Dateien vorhanden sind, sollte die Zieldatei zusammengefasst werden:
Userbild

Wie gesagt, aus der Quelldatei sollen nur bestimmte Werte der STückliste in die Zieldatei übernommen werden. Die nicht benötigten Werte können weg gelassen bzw übersprungen werden.
Die Werte die aus der Stückliste übernommen werden, sollen immer in die gleichen Spalten der Zieldatei übernommen werden, damit die nachranginge Verarbeitung (einlesen in eine DB) mit einer Importvorlage arbeiten kann.
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige