3 CSV Dateien automatisch einlesen und strukturiert in eine CSV integrieren
Hallo Zusammen,
ich habe leider keine Erfahrung mit VBA und versuche jetzt schon seit mehreren Tagen vergeblich eine Lösung für mein Problem zu finden. Da ich in diesem Forum viele gute, verwandte Beiträge gefunden habe, hoffe ich mich an euch wenden zu dürfen. Ich versuche aus 3 CSV Dateien die im Minutentakt aktualisiert werden immer die letzte (aktuellste) Zeile in einer gemeinsamen CSV Datei, transponiert in Spaltenform, darzustellen. Zudem sollte die erste Zeile der 3 CSV Dateien auch in Spaltenform in diese gemeinsamen CSV Datei übernommen werden.
Ich versuche das hier mal anhand eines Beispiels zu verdeutlichen:
Datei1.csv
Zeile 1 Text1;Text2;Text3;Text4
Zeile 2 Wert;Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert;Wert (aktuelle Werte)
Datei2.csv
Zeile 1 Text5;Text6;Text7
Zeile 2 Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert (aktuelle Werte)
Datei3.csv
Zeile 1 Text8;Text9;Text10
Zeile 2 Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert (aktuelle Werte)
Die gemeinsame CSV sollte wie folgt aussehen:
Gemeinsam.csv
Text 1;Wert
Text 2;Wert
.
.
Text10;Wert
Dabei sollten die Werte in Spalte 2 automatisch immer durch die neusten Werte der 3 CSV Dateien ersetzt werden.
Die gemeinsame CSV wird dann für eine andere Anwendung benötigt. Ich verwende MS Excel 2007.
Es wäre sehr schön wenn mir jemand weiter helfen könnte. Vielen Dank schon mal im vorraus!
MfG Jay
ich habe leider keine Erfahrung mit VBA und versuche jetzt schon seit mehreren Tagen vergeblich eine Lösung für mein Problem zu finden. Da ich in diesem Forum viele gute, verwandte Beiträge gefunden habe, hoffe ich mich an euch wenden zu dürfen. Ich versuche aus 3 CSV Dateien die im Minutentakt aktualisiert werden immer die letzte (aktuellste) Zeile in einer gemeinsamen CSV Datei, transponiert in Spaltenform, darzustellen. Zudem sollte die erste Zeile der 3 CSV Dateien auch in Spaltenform in diese gemeinsamen CSV Datei übernommen werden.
Ich versuche das hier mal anhand eines Beispiels zu verdeutlichen:
Datei1.csv
Zeile 1 Text1;Text2;Text3;Text4
Zeile 2 Wert;Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert;Wert (aktuelle Werte)
Datei2.csv
Zeile 1 Text5;Text6;Text7
Zeile 2 Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert (aktuelle Werte)
Datei3.csv
Zeile 1 Text8;Text9;Text10
Zeile 2 Wert;Wert;Wert
Zeile 3 ..............................
Zeile 4 Wert;Wert;Wert (aktuelle Werte)
Die gemeinsame CSV sollte wie folgt aussehen:
Gemeinsam.csv
Text 1;Wert
Text 2;Wert
.
.
Text10;Wert
Dabei sollten die Werte in Spalte 2 automatisch immer durch die neusten Werte der 3 CSV Dateien ersetzt werden.
Die gemeinsame CSV wird dann für eine andere Anwendung benötigt. Ich verwende MS Excel 2007.
Es wäre sehr schön wenn mir jemand weiter helfen könnte. Vielen Dank schon mal im vorraus!
MfG Jay
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 214865
Url: https://administrator.de/forum/3-csv-dateien-automatisch-einlesen-und-strukturiert-in-eine-csv-integrieren-214865.html
Ausgedruckt am: 15.04.2025 um 15:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo Jay0603 und willkommen im Forum!
Könnte etwa so gehen:
Vorausgesetzt (da nicht überprüft / abgesichert) wird, dass es in der letzten Zeile zumindest so viele Werte gibt, wie die erste Zeile Feldnamen enthält (und daher insbes nicht eine Zeilenschaltung am Dateiende vorkommt) ...
Grüße
bastla
Könnte etwa so gehen:
Ein = Array("D:\Datei1.csv", "D:\Datei2.csv", "D:\Datei3.csv") 'Liste der zu verarbeitenden Dateien als Array
Aus = "D:\Gemeinsam.csv" 'Ausgabedatei
Delim = ";" 'Trennzeichen
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In Ein 'alle "Eingabe"-Dateien durchgehen
T = Split(fso.OpenTextFile(Datei).ReadAll, vbNewline) 'Dateiinhalt in Zeilenarray einlesen
F = Split(T(0), Delim) 'Feldnamen-Array aus Zeile 1 (= Index 0) erstellen
W = Split(T(UBound(T)), Delim) 'Werte-Array aus letzter Zeile erstellen
For i = 0 To UBound(F) 'alle Felder durchgehen
'Ausgabe zusammensetzen: Zeilenschaltung + Feldname + Trennzeichen + Wert
A = A & vbNewline & F(i) & Delim & W(i)
Next
Next
fso.CreateTextFile(Aus).Write Mid(A, 3) 'ohne erste Zeilenschaltung in Ausgabedatei schreiben
Grüße
bastla
Hallo Jay0603!
Falls ja, sollte es so gehen:
Grüße
bastla
Fehlermeldung "Index außerhalb des gültigen Bereichs"
wäre dann genau der Fall, den ich oben erwähnt hatte: Vermutlich enthält mindestens eine der CSV-Dateien am Ende eine Leerzeile ...Falls ja, sollte es so gehen:
Ein = Array("D:\Datei1.csv", "D:\Datei2.csv", "D:\Datei3.csv") 'Liste der zu verarbeitenden Dateien als Array
Aus = "D:\Gemeinsam.csv" 'Ausgabedatei
Delim = ";" 'Trennzeichen
Set fso = CreateObject("Scripting.FileSystemObject")
For Each Datei In Ein 'alle "Eingabe"-Dateien durchgehen
T = Split(fso.OpenTextFile(Datei).ReadAll, vbNewline) 'Dateiinhalt in Zeilenarray einlesen
F = Split(T(0), Delim) 'Feldnamen-Array aus Zeile 1 (= Index 0) erstellen
L = UBound(T) 'letzte Zeile ermitteln
'letzte nicht leere Zeile suchen
Do While Trim(T(L)) = ""
L = L -1
Loop
W = Split(T(L), Delim) 'Werte-Array aus letzter Zeile erstellen
For i = 0 To UBound(F) 'alle Felder durchgehen
'Ausgabe zusammensetzen: Zeilenschaltung + Feldname + Trennzeichen + Wert
A = A & vbNewline & F(i) & Delim & W(i)
Next
Next
fso.CreateTextFile(Aus).Write Mid(A, 3) 'ohne erste Zeilenschaltung in Ausgabedatei schreiben
bastla