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

CSV Import - mehre Dateien nacheinander abarbeiten

Forumthread: CSV Import - mehre Dateien nacheinander abarbeiten

CSV Import - mehre Dateien nacheinander abarbeiten
06.02.2026 18:44:13
Andreas
Hallo,

ich bräuchte kurz Hilfe, ich würde gerne das folgende Makro so ändern, dass im ersten Schritt alle CSV-Dateien in einem Ordner ausgewählt werden können, und dann alle nacheinander abgearbeitet werden?

Kann mir da jemand helfen?

Danke!



Sub Import()
Dim Datei As String
Datei = Application.GetOpenFilename("CSV, *.csv")
If Not LCase(Datei) Like "*.csv" Then Exit Sub
Workbooks.Open Datei, Local:=True
ActiveSheet.UsedRange.Copy ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1)
ActiveWorkbook.Close False

Application.ScreenUpdating = False

Worksheets("Tabelle1").UsedRange.Replace what:=" ", Replacement:="", lookat:=xlPart


Worksheets("Tabelle1").Range("Q3").Copy
Worksheets("Tabelle1").Range("V2").PasteSpecial Paste:=xlValues

Worksheets("Tabelle1").Range("S6:U6").Copy
Worksheets("Tabelle1").Range("W2").PasteSpecial Paste:=xlValues


' Gesamtstunden kopieren
Sheets("Tabelle1").Range("Gesamtstunden").Cells(1).Copy _
Destination:=Sheets("Berechnung").Range("Std").Cells(Rows.Count - 1).End(xlUp).Offset(1, 0) ' In erste freie Zelle von Spalte G einfügen

' Erstes Leistungsdatum kopieren
Sheets("Tabelle1").Range("Leistungszeitraum_Beginn").Cells(1).Copy _
Destination:=Sheets("Berechnung").Range("Leistungszeitraum_Beginn").Cells(Rows.Count - 1).End(xlUp).Offset(1, 0) ' In erste freie Zelle von Spalte E einfügen

' Letztes Leistungsdatum kopieren
Sheets("Tabelle1").Range("Leistungszeitraum_Ende").Cells(1).Copy _
Destination:=Sheets("Berechnung").Range("Leistungszeitraum_Ende").Cells(Rows.Count - 1).End(xlUp).Offset(1, 0) ' In erste freie Zelle von Spalte C einfügen

' Kundennamen kopieren
Sheets("Tabelle1").Range("Klient").Cells(1).Copy _
Destination:=Sheets("Berechnung").Range("Klient").Cells(Rows.Count - 1).End(xlUp).Offset(1, 0) ' In erste freie Zelle von Spalte F einfügen

Worksheets("Tabelle1").Range("A1:M1000").Clear
End Sub
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Import - mehre Dateien nacheinander abarbeiten
06.02.2026 19:26:18
Yal
Hallo Andreas,

Du hast mit VBA angefangen und es ist verständlich, dass Du den VBA weiter zu erweitern möchtest, aber ein Datenimport aus mehrere CSV mit dieselben Struktur und alle in einem Verzeichnis geht sehr einfach mit Power Query.
Siehe Punkt 5 von folgenden Tutorial:
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/
(Die 4 Videos davor sind auch sehenswert)

Wenn Du eine Beispieldatei hier posten möchtest (anonymisiert!), kann man einen Entwurf machen.

VG
Yal
Anzeige
Du kannst...
06.02.2026 20:52:27
Case
Moin Andreas, :-)

... für alle CSV in einem Ordner sowas nutzen (Pfade und Namen anpassen): ;-)

Option Explicit

Public Sub Main_1()
Dim dblTMP As Double
dblTMP = Shell("cmd /c type C:\Temp\CS\*.csv >> C:\Temp\AlleCSV.csv")
Application.Wait (Now + TimeValue("0:00:02"))
Workbooks.Open "C:\Temp\AlleCSV.csv", Local:=True
End Sub
Public Sub Main_2()
Dim dblTMP As Double
dblTMP = Shell("cmd /c type C:\Temp\CS\*.csv >> C:\Temp\AlleCSV.csv")
Do Until Dir("C:\Temp\AlleCSV.csv") > ""
DoEvents
Loop
Workbooks.Open "C:\Temp\AlleCSV.csv", Local:=True
End Sub

Das Wait oder der Loop ist drin, wenn es viele große CSV sind - probiere es einfach mal aus. ;-)

Oder du nutzt die neue Funktion "IMPORTTEXT": ;-)
https://support.microsoft.com/de-de/office/importtext-funktion-119f9145-f275-4713-a2ba-2a11ef83f6d0

Wenn du die Gesamt-CSV erstellt hast, kannst du einfach so schreiben (wenn sie Semikolon getrennt ist): ;-)

Public Sub Main_3()

Range("E1").Formula2 = "=IMPORTTEXT(""C:\Temp\AlleCSV.csv"","";"")"
End Sub

Ist jetzt keine Komplettlösung, aber ein Ansatz. Ich würde es auch - wie YAL - mit Power Query lösen. Einmal erstellt - nur noch Aktualisieren. ;-)

Servus
Case
Anzeige
Wenn du das...
07.02.2026 14:02:16
Case
Moin Andreas, :-)

... "Zusammenpacken der CSVs in eine CSV" nutzen kannst/willst, dann eher so: ;-)

Option Explicit

Public Sub Main_Last()
Dim objWSS As Object
If Dir("C:\Temp\AlleCSV.CSV") > "" Then Kill "C:\Temp\AlleCSV.CSV"
Set objWSS = CreateObject("WScript.Shell")
objWSS.Run "CMD /C Type C:\Temp\CS\*.CSV >> C:\Temp\AlleCSV.CSV", 0, True
Workbooks.Open "C:\Temp\AlleCSV.CSV", Local:=True
End Sub

WScript.Shell - Run - True blockiert bis der Prozess fertig ist. Kein Wait-Gefrickel usw. nötig. ;-)

Servus
Case
Anzeige
AW: Wenn du das...
09.02.2026 02:27:08
Andreas
Ich möchte nicht alle auf einmal importieren und die Daten zusammenfügen.

Bei dem aktuellen VBA hab ich einen Datei öffnen Dialog in dem ich nur eine einzige CSV auswählen kann.

Ziel wäre es, mehrere Dateien auswählen zu können, die dann mit den vorhandenen Befehlen nacheinander abgearbeitet werden.

Ich möchte also aus jeder CSV den Arbeitszeitraum und die Stunden usw. auslesen und in mein Berechnungsblatt einfügen. Bisher muss ich das für jede CSV einzeln machen, das soll wenn möglich automatisiert gehen indem ich einfach die gewünschten Dateien im Öffnen Dialog auswählen kann.


Anzeige
Mit Mehrfachauswahl...
09.02.2026 07:27:47
Case
Moin, :-)

... dann z. B. so: ;-)

Option Explicit

Public Sub Main()
Dim FileDlg As FileDialog
Dim dname As String
Dim Dati As Long
Set FileDlg = Application.FileDialog(msoFileDialogFilePicker)
With FileDlg
.Title = "CSV-Datei(en) auswählen..."
.InitialFileName = "C:\Temp\"
.Filters.Clear
.Filters.Add "Nur EXCEL Tabellen", "*.csv", 1
'Andere Filterauswahlen sind möglich
.FilterIndex = 1
.ButtonName = "Dateien öffnen"
'AllowMultiSelect = False dann kann nur eine Datei gewählt werden
.AllowMultiSelect = True
' Dialog anzeigen...
.Show
' Datei(en) ausgewählt, oder nicht...
If .SelectedItems.Count = 0 Then
MsgBox "Sie haben keine Datei gewählt", vbCritical + vbOKOnly, "Dateifehler"
Else
For Dati = 1 To .SelectedItems.Count
dname = dname & vbCrLf & .SelectedItems(Dati)
Next Dati
MsgBox "Sie haben diese Dateien gewählt: " & vbCrLf & dname
' Hier verarbeitest du die CSVs... mit deinen Befehlen...
End If
End With
Set FileDlg = Nothing
End Sub

Und dann mit der STRG-Taste, oder der Shift/Umschalttaste Datei(en) auswählen. ;-)

Servus
Case
Anzeige
Hier die...
09.02.2026 10:33:22
Case
Moin, :-)

... Version ohne MsgBox: ;-)

Option Explicit

Public Sub Main()
Dim dlgFile As FileDialog
Dim varTMP As Variant
Set dlgFile = Application.FileDialog(msoFileDialogOpen)
With dlgFile
.AllowMultiSelect = True 'User darf mehrere Dateien auswählen
.InitialFileName = "C:\Temp\" 'Pfad
.Filters.Clear
.Filters.Add "*.CSV", "*.CSV", 1 'Nur CSV-Dateien anzeigen
.InitialView = msoFileDialogViewDetails
.Title = "CSVs auswählen..." 'Titel
End With
If dlgFile.Show = True Then
For Each varTMP In dlgFile.SelectedItems 'jede ausgewählte Datei wird bearbeitet
' Deine Befehle, um die einzelnen CSVs zu bearbeiten...
Next varTMP
End If
Set dlgFile = Nothing
End Sub

Servus
Case
Anzeige
AW: Hier die...
09.02.2026 11:31:45
Muerte
Servus,

danke für die Hilfe, das Makro läuft durch, nur beim kopieren der Daten aus der CSV in mein Tabellenblatt "Tabelle1" das ich vorher über

ActiveSheet.UsedRange.Copy ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1)

gelöst hab, fügt er mir jetzt Daten aus dem geöffneten Tabellenblatt in meiner Mappe ein. Hast du eine Idee wie ich das löse?

Danke, LG


Anzeige
Bei mir funktionieren...
09.02.2026 11:49:49
Case
Moin, :-)

... beide Codes: ;-)

Option Explicit

Public Sub Main()
Dim dlgFile As FileDialog
Dim varTMP As Variant
Set dlgFile = Application.FileDialog(msoFileDialogOpen)
With dlgFile
.AllowMultiSelect = True 'User darf mehrere Dateien auswählen
.InitialFileName = "C:\Temp\" 'Pfad
.Filters.Clear
.Filters.Add "*.CSV", "*.CSV", 1 'Nur CSV-Dateien anzeigen
.InitialView = msoFileDialogViewDetails
.Title = "CSVs auswählen..." 'Titel
End With
If dlgFile.Show = True Then
For Each varTMP In dlgFile.SelectedItems 'jede ausgewählte Datei wird bearbeitet
Workbooks.Open varTMP, Local:=True
ActiveSheet.UsedRange.Copy ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1)
ActiveWorkbook.Close False
'Weitere Befehle...
Next varTMP
End If
Set dlgFile = Nothing
End Sub
Public Sub Main_1()
Dim dlgFile As FileDialog
Dim varTMP As Variant
Set dlgFile = Application.FileDialog(msoFileDialogOpen)
With dlgFile
.AllowMultiSelect = True 'User darf mehrere Dateien auswählen
.InitialFileName = "C:\Temp\" 'Pfad
.Filters.Clear
.Filters.Add "*.CSV", "*.CSV", 1 'Nur CSV-Dateien anzeigen
.InitialView = msoFileDialogViewDetails
.Title = "CSVs auswählen..." 'Titel
End With
If dlgFile.Show = True Then
For Each varTMP In dlgFile.SelectedItems 'jede ausgewählte Datei wird bearbeitet
Workbooks.Open varTMP, Local:=True
Workbooks(Dir$(varTMP)).Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets("Tabelle1").Cells(1, 1)
Workbooks(Dir$(varTMP)).Close False
'Weitere Befehle...
Next varTMP
End If
Set dlgFile = Nothing
End Sub

Servus
Case
Anzeige
AW: Bei mir funktionieren...
09.02.2026 15:26:43
Muerte
Klappt perfekt, beide Varianten. Ganz herzlichen Danke für deine Hilfe!!

Aber was ist jetzt der Unterschied in den beiden Varianten die du mir am Schluss geschickt hast? Am Anfang war mit und ohne Msg.Box, aber die sind beide ohne?

LG
Das ist nur eine...
09.02.2026 15:56:22
Case
Moin, :-)

... unterschiedliche Art die Datei "anzusprechen". In der Regel kannst du nach Workbook.Open... mit Active... arbeiten, da es dann sowieso das Aktive ist. Man kann es aber auch direkt ansprechen, oder einer Variablen zuordnen. ;-)
Meinen ersten Code von heute früh habe ich nur aus meiner Toolsammlung (MzTools) rauskopiert. Der ist nicht ganz richtig. ;-)

Aber die anderen zwei laufen ja - und du hast es hinbekommen. ;-)

Servus
Case
Anzeige
AW: Das ist nur eine...
10.02.2026 08:56:33
Muerte
Alles klar, danke für deine Hilfe, das läuft perfekt so.
LG
AW: CSV Import - mehre Dateien nacheinander abarbeiten
06.02.2026 20:44:14
Andreas
Wenns irgendwie geht würd ichs gern mit VBA weitermachen, aber danke für deine Antwort. Wenn ichs nicht anders gelöst bekomme, würd ich mich sehr gern bei dir melden.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige