CSV Dateien zusammen führen und neu abspeichern
Hallo Zusammen,
ich bin neu hier und bitte deshalb bei möglichen Fehlern Nachsicht walten zu lassen.
Ich würde gerne ein VBA Makro für Excel schreiben, dass aus einem Ordner, den ich am Anfang auswählen muss, alle CSV-Dateien einliest, sie in eine neue CSV-Datei untereinander schreibt und diese dann in den am Anfang ausgewählten Ordner abspeichert. Dabei soll der Name der neuen CSV-Datei auch variabel sein bzw. der Name des Ordners, in dem die Dateien liegen soll Teil des Namens sein.
Aktuell habe ich ein Makro das wie folgt aussieht:
Das schreibt die nötigen Sachen alle in der aktuellen Tabelle zusammen, aber speichert es nicht automatisch.
Zudem wäre es wünschenswert, wenn ich das Makro beliebig oft hintereinander ausführen könnte, ohne es jedes Mal neu öffnen zu müssen.
Ich hoffe ich konnte mein Anliegen halbwegs klar formulieren, bei noch offenen Fragen bitte einfach fragen!
Danke schon mal für die Hilfe!
Gruß
Plau
ich bin neu hier und bitte deshalb bei möglichen Fehlern Nachsicht walten zu lassen.
Ich würde gerne ein VBA Makro für Excel schreiben, dass aus einem Ordner, den ich am Anfang auswählen muss, alle CSV-Dateien einliest, sie in eine neue CSV-Datei untereinander schreibt und diese dann in den am Anfang ausgewählten Ordner abspeichert. Dabei soll der Name der neuen CSV-Datei auch variabel sein bzw. der Name des Ordners, in dem die Dateien liegen soll Teil des Namens sein.
Aktuell habe ich ein Makro das wie folgt aussieht:
Sub zusammenfuegen()
Dim strDateiname As String
Dim loLetzte1 As Long
Dim loLetzte2 As Long
Dim inLetzte As Integer
Dim x As Integer
Dim StartPaste As Integer
StartPaste = 0
x = 1
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Title = "Bitte Ordner wählen"
.InitialFileName = ""
.InitialView = msoFileDialogViewThumbnail
.ButtonName = "OK"
If .Show = -1 Then
GetExcelFolder = .SelectedItems(1)
'MsgBox GetExcelfolder
End If
End With
Application.ScreenUpdating = False
'strDateiname = Dir(ThisWorkbook.Path & "\*.csv")
strPath = Dir(GetExcelFolder)
strDateiname = Dir(GetExcelFolder & "\*.csv")
With ThisWorkbook.Worksheets("Tabelle1")
Do While strDateiname <> ""
If strDateiname <> ThisWorkbook.Name Then
'Workbooks.Open Filename:=ThisWorkbook.Path & "\" & strDateiname
Workbooks.Open Filename:=GetExcelFolder & "\" & strDateiname
loLetzte1 = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
loLetzte2 = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
inLetzte = ActiveWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
If x = 1 Then
StartCell = 1
StartPaste = 0
Else
StartCell = 3
StartPaste = 1
End If
x = x + 1
ActiveWorkbook.ActiveSheet.Range(Cells(StartCell, 1), Cells(loLetzte2, inLetzte)).Copy Destination:=.Cells(loLetzte1 + StartPaste, 1)
ActiveWorkbook.Close True
End If
strDateiname = Dir
Loop
End With
Application.ScreenUpdating = True
End Sub
Das schreibt die nötigen Sachen alle in der aktuellen Tabelle zusammen, aber speichert es nicht automatisch.
Zudem wäre es wünschenswert, wenn ich das Makro beliebig oft hintereinander ausführen könnte, ohne es jedes Mal neu öffnen zu müssen.
Ich hoffe ich konnte mein Anliegen halbwegs klar formulieren, bei noch offenen Fragen bitte einfach fragen!
Danke schon mal für die Hilfe!
Gruß
Plau
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4322809694
Url: https://administrator.de/forum/csv-dateien-zusammen-fuehren-und-neu-abspeichern-4322809694.html
Ausgedruckt am: 14.03.2025 um 11:03 Uhr
5 Kommentare
Neuester Kommentar

Moinsens.
Bringst du das logisch zusammen schaffst du das Gewünschte mit diesen Hinweisen nun auch selbst
.
Erste Devise, copy n paste code Zeile für Zeile verstehen und in der Doku nachschlagen dann klappts anschließend auch mit der Nachba... ähh der Ergänzung
p.
aber speichert es nicht automatisch.
Workbook.Save MethodeZudem wäre es wünschenswert, wenn ich das Makro beliebig oft hintereinander ausführen könnte, ohne es jedes Mal neu öffnen zu müssen.
Jetzt rate drei mal was das hier im Code wohl macht ...ActiveWorkbook.Close True
Genau dasBringst du das logisch zusammen schaffst du das Gewünschte mit diesen Hinweisen nun auch selbst
Erste Devise, copy n paste code Zeile für Zeile verstehen und in der Doku nachschlagen dann klappts anschließend auch mit der Nachba... ähh der Ergänzung
p.

Zitat von @PlauSiBell:
Das mit dem Workbook.save hat mir tatsächlich geholfen, ich habe es als "ActiveWorkbook.SaveCopyAs (GetExcelFolder & ".csv")" eingebaut um eine Kopie der erstellten Tabelle zu erstellen. Dabei speichert er es zwar mit .csv als Endung, allerdings bekomme ich beim Öffnen dann die Warnung, dass die Dateiformat und die -endung nicht zusammen passen, kann ich das irgendwie anders lösen?
Ja, benutze die SaveAs Methode mit dem passenden Parameter FileFormatDas mit dem Workbook.save hat mir tatsächlich geholfen, ich habe es als "ActiveWorkbook.SaveCopyAs (GetExcelFolder & ".csv")" eingebaut um eine Kopie der erstellten Tabelle zu erstellen. Dabei speichert er es zwar mit .csv als Endung, allerdings bekomme ich beim Öffnen dann die Warnung, dass die Dateiformat und die -endung nicht zusammen passen, kann ich das irgendwie anders lösen?
https://learn.microsoft.com/de-de/office/vba/api/excel.workbook.saveas
ActiveWorkbook.SaveAs "D:\Ordner\datei.csv", xlCSVWindows
Zitat von @PlauSiBell:
Ich weiß leider nicht genau was du meinst, dein Code liest sich für mich (als Laie) so, als würdest du einfach eine Kopie von der Ursprungs csv erstellen. Es sollen aber ja mehrere csv zusammen gefasst werden.
Wenn ich das falsch verstanden habe, kannst du es dann vielleicht nochmal erklären?
es sind ja CSV- also Textdateien: ein simples
reicht dir nicht?
copy \dir\*.csv \dir\file_new.csv
Ich weiß leider nicht genau was du meinst, dein Code liest sich für mich (als Laie) so, als würdest du einfach eine Kopie von der Ursprungs csv erstellen. Es sollen aber ja mehrere csv zusammen gefasst werden.
Wenn ich das falsch verstanden habe, kannst du es dann vielleicht nochmal erklären?
Hi,
die Idee, die dahintersteckt (jetzt mal von dem ganzen Excel-Overhead weg) ist, zwei oder mehrere Textdateien mit dem "copy"-Befehl auf der Kommandozeile zusammenzuführen. Die Randbedingung ist, dass in deinem Fall beide CSV-Dateien die gleiche Anzahl an Spalten haben und das Trennzeichen das gleiche ist.
Der copy-Befehl anhand von Beispielen etwas ausführlicher erklärt (Verzeichnisse zwecks Übersichtlichkeit weggelassen):
- Kopie von file_a mit Namen file_b anlegen:
copy file_a file_b
- Kopie von file_a und file_b in Datei file_c anlegen:
copy file_a + file_b file_c
- Kopie von allen Dateien ("*") mit der Endung .csv in Datei file_new.csv anlegen:
copy *.csv file_new.csv
Ich hoffe, so ist das etwas verständlicher? Natürlich kannst du das Ganze noch um Pfadangaben ergänzen oder mit Batch/Powershell noch Abfragen nach Dateinamen etc. drumherum basteln.
Grüße
TA