
139097
09.03.2019, aktualisiert um 14:41:22 Uhr
Excel VBA Marko um CSV-Dateien in BESTIMMTER REIHENFOLGE auf einem Excel Sheet zusammenzuführen
Hallo,
ich habe hier im Forum in einem anderen Thread bereits den Code von colinardo zum zusammenführen der CSV-Dateien gefunden Besagter Thread,
Ich habe CSV-Dateien die eine Spalte mit Zeitstempel und eine Zeile mir Messwerten haben, das Trennzeichen ist ; .
Die Dateien sind im Ordner so benannt, dass Sie nummerisch aufgelistet werden .
01.19 (1)
01.19 (2)
01.19 (3)
...
01.19 (10)
01.19 (11)
...
02.19(1)
02.19(2)
...
Jetzt werden mir die Datenreihen im Excel-Sheet leider nicht wie im Ordner hinterlegt einfach direkt untereinander gepackt, sondern Excel packt erst alle Dateien mit einer 1 an erster Stelle der "Prüfsumme" , dann mit einer 2 etc etc. untereinander.
BSP:
01.19 (1)
01.19 (11)
01.19 (12)
01.19 (13)
...
02.19 (2)
02.19 (21)
...
wie kann das im Code ändern, beziehungsweise wie kann die meine Dateien sinnvoll bennen damit dieser richtig zusammengeführt werden. Es handelt sich um Temperatur Messreihen von Solarmodulen die täglich in 15-Minuten Taktung erstellt werden. Ich hätte diese gerne in einer großen Excel-Tabelle um sie auszuwerten. Im besten Fall enthät der Name der Datei das jeweilige Datum, da dieses nicht in der CSV-Dateien enthalten ist, und von mir von Hand gerade angepasst wird, lässt sicht vlt auch irgendwie einfacher lösen.
Ich hoffe ich konnte alles sinnvoll erklären, bewege mich wenig in diesem Bereich und werfe bestimmt den einen oder anderen Begriff durcheinander!
Vielen Dank für die Hilfe!
Binnichhier
ich habe hier im Forum in einem anderen Thread bereits den Code von colinardo zum zusammenführen der CSV-Dateien gefunden Besagter Thread,
Sub ImportCSVFromFolder()
Dim wsTemp As Worksheet, wsTarget As Worksheet, curCell As Range, CSVPFAD As String, fso As Object, f As Object, strCSVDelimiter As String
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:\"
.Title = "Ordnerauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
CSVPFAD = .SelectedItems(1)
Else
Exit Sub
End If
End With
'Legt das CSV-Trennzeichen für die Dateien fest
strCSVDelimiter = ";"
Set fso = CreateObject("Scripting.Filesystemobject")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'Zielarbeitsblatt für die importierten Daten
Set wsTarget = Worksheets(1)
wsTarget.Name = "Zusammenfassung"
'temporäres Arbeitsblatt für den Import der Daten erstellen
Set wsTemp = Worksheets.Add(After:=Worksheets(Worksheets.Count))
'Inhalt des Zusammenfassungsblattes löschen
wsTarget.UsedRange.Clear
'Startausgabezelle festlegen
Set curCell = wsTarget.Range("B1")
For Each f In fso.GetFolder(CSVPFAD).Files
If LCase(fso.GetExtensionName(f.Name)) = "csv" Then
'Temporäres Sheet löschen
wsTemp.UsedRange.Clear
'CSV-Daten in Temporäres Sheet importieren
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & f.Path, Destination:=wsTemp.Range("$A$1"))
.Name = "import"
.FieldNames = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileOtherDelimiter = strCSVDelimiter
.Refresh BackgroundQuery:=False
.Delete
End With
With wsTemp
'Daten in Zielsheet kopieren
.UsedRange.Copy curCell
' Dateinamen in erste Spalte vor die Zeilen schreiben
curCell.Offset(1, -1).Resize(.UsedRange.Rows.Count - 1, 1).Value = f.Name
End With
'Ausgabezeile eins nach unten schieben
Set curCell = wsTarget.Cells(wsTarget.UsedRange.Rows.Count + 2, 2)
End If
Next
'Temporäres Sheet löschen
wsTemp.Delete
'Spalten anpassen
wsTarget.Columns.AutoFit
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Vorgang beendet!", vbInformation
Set fso = Nothing
End Sub
Ich habe CSV-Dateien die eine Spalte mit Zeitstempel und eine Zeile mir Messwerten haben, das Trennzeichen ist ; .
Die Dateien sind im Ordner so benannt, dass Sie nummerisch aufgelistet werden .
01.19 (1)
01.19 (2)
01.19 (3)
...
01.19 (10)
01.19 (11)
...
02.19(1)
02.19(2)
...
Jetzt werden mir die Datenreihen im Excel-Sheet leider nicht wie im Ordner hinterlegt einfach direkt untereinander gepackt, sondern Excel packt erst alle Dateien mit einer 1 an erster Stelle der "Prüfsumme" , dann mit einer 2 etc etc. untereinander.
BSP:
01.19 (1)
01.19 (11)
01.19 (12)
01.19 (13)
...
02.19 (2)
02.19 (21)
...
wie kann das im Code ändern, beziehungsweise wie kann die meine Dateien sinnvoll bennen damit dieser richtig zusammengeführt werden. Es handelt sich um Temperatur Messreihen von Solarmodulen die täglich in 15-Minuten Taktung erstellt werden. Ich hätte diese gerne in einer großen Excel-Tabelle um sie auszuwerten. Im besten Fall enthät der Name der Datei das jeweilige Datum, da dieses nicht in der CSV-Dateien enthalten ist, und von mir von Hand gerade angepasst wird, lässt sicht vlt auch irgendwie einfacher lösen.
Ich hoffe ich konnte alles sinnvoll erklären, bewege mich wenig in diesem Bereich und werfe bestimmt den einen oder anderen Begriff durcheinander!
Vielen Dank für die Hilfe!
Binnichhier
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 426808
Url: https://administrator.de/forum/excel-vba-marko-um-csv-dateien-in-bestimmter-reihenfolge-auf-einem-excel-sheet-zusammenzufuehren-426808.html
Ausgedruckt am: 12.05.2025 um 14:05 Uhr
2 Kommentare
Neuester Kommentar
Jetzt werden mir die Datenreihen im Excel-Sheet leider nicht wie im Ordner hinterlegt einfach direkt untereinander gepackt, sondern Excel packt erst alle Dateien mit einer 1 an erster Stelle der "Prüfsumme" , dann mit einer 2 etc etc. untereinander.
Da liegt an der Sortierung der Dateien im Verzeichnis. 1 kommt vor 11.wie kann das im Code ändern, beziehungsweise wie kann die meine Dateien sinnvoll bennen damit dieser richtig zusammengeführt werden.
Als Dateiname bietet sich folgendes Format an: YYYY-MM-TT HH_mm_ss.csv
Somit sind die Dateien immer sortiert nach Jahr, Monat und Tag.
Als zweiten Punkt würde ich die Datums- und Zeitangaben der jeweiligen Datei für die Dauer der Dateiverarbeitung in einer Variable speichern und mit in die Tabelle in der Datumsspalte hinterlegen, bis zum Beginn der neuen Datei.

Wozu für sowas noch VBA hernehmen, das erledigt dir Powershell auch ohne vorheriges umbenennen in einem Einzeiler:
(gci 'D:\Ordner' -File -Filter *.csv | sort {[regex]::replace($_.Basename,'\((\d+)\)',{param($m) $m.Groups[1].Value.padLeft(3,'0')})} | select -Expand Fullname | import-csv -Delimiter ";") | export-csv .\merged.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8