Excel VBA: Mehrere Arbeitsmappen aus einem Ordner kombinieren
Melden
Dieses Tutorial zeigt dir Schritt für Schritt, wie du mithilfe von Excel VBA alle Excel-Dateien aus einem bestimmten Ordner automatisch in einer einzigen, neuen Arbeitsmappe zusammenführst.
Zielsetzung
Wir erstellen ein Makro, das:
- Den Benutzer nach einem Ordner fragt.
- Alle Excel-Dateien (
.xlsx,.xls,.xlsm) in diesem Ordner nacheinander öffnet. - Alle Tabellenblätter aus diesen Dateien in eine neue Master-Datei kopiert.
- Die Quelldateien wieder schließt.
Schritt 1: Die VBA-Umgebung öffnen
- Öffne eine leere Excel-Arbeitsmappe.
- Drücke
ALT + F11, um den VBA-Editor zu öffnen. - Gehe im Menü auf Einfügen > Modul. Ein leeres Fenster für den Code erscheint.
Schritt 2: Der VBA-Code
Kopiere den folgenden Code und füge ihn in das neue Modul ein:
Sub KombiniereArbeitsmappen()
Dim fso As Object
Dim folderPath As String
Dim selectedFolder As Object
Dim fileName As String
Dim wbSource As Workbook
Dim wbTarget As Workbook
Dim ws As Worksheet
Dim fileCount As Integer
' 1. Bildschirmaktualisierung ausschalten (für mehr Speed)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' 2. Ordner-Auswahldialog anzeigen
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Wähle den Ordner mit den Excel-Dateien aus"
.AllowMultiSelect = False
If .Show = -1 Then
folderPath = .SelectedItems(1) & "\"
Else
MsgBox "Kein Ordner ausgewählt. Abbruch.", vbExclamation
Exit Sub
End If
End With
' 3. Neue Ziel-Arbeitsmappe erstellen
Set wbTarget = Workbooks.Add
fileCount = 0
' 4. Dateien im Ordner suchen (nur Excel-Dateien)
fileName = Dir(folderPath & "*.xl*")
Do While fileName <> ""
' Die Master-Datei selbst nicht mit sich selbst kombinieren
If fileName <> wbTarget.Name Then
fileCount = fileCount + 1
' Quelldatei öffnen
Set wbSource = Workbooks.Open(folderPath & fileName)
' Alle Blätter der Quelldatei in die Ziel-Datei kopieren
For Each ws In wbSource.Worksheets
ws.Copy After:=wbTarget.Sheets(wbTarget.Sheets.Count)
' Optional: Blattname um Dateiname ergänzen, um Duplikate zu vermeiden
wbTarget.Sheets(wbTarget.Sheets.Count).Name = Left(fileName, 15) & "_" & ws.Name
Next ws
' Quelldatei schließen ohne zu speichern
wbSource.Close SaveChanges:=False
End If
' Nächste Datei suchen
fileName = Dir
Loop
' 5. Aufräumen
' Das standardmäßig erste leere Blatt in der neuen Mappe löschen
If wbTarget.Sheets.Count > 1 Then
wbTarget.Sheets(1).Delete
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox fileCount & " Dateien wurden erfolgreich zusammengeführt!", vbInformation, "Fertig"
End Sub
Schritt 3: Den Code verstehen
Application.FileDialog(msoFileDialogFolderPicker): Öffnet ein Fenster, in dem du bequem den Ordner auswählen kannst, anstatt den Pfad manuell in den Code tippen zu müssen.Dir(folderPath & "*.xl*"): Sucht nach allen Dateien, die mit.xlbeginnen (deckt.xlsx,.xls,.xlsmab).ws.Copy After:=wbTarget.Sheets(...): Dies ist der Kernbefehl. Er kopiert das gesamte Tabellenblatt ans Ende der neuen Arbeitsmappe.wbTarget.Sheets(...).Name = ...: Da Excel keine zwei Blätter mit demselben Namen erlaubt, fügen wir einen Teil des Dateinamens vorne an den Blattnamen an.Application.ScreenUpdating = False: Verhindert, dass das Flackern der sich öffnenden und schließenden Fenster zu sehen ist, was den Prozess erheblich beschleunigt.
Schritt 4: Das Makro ausführen
- Schließe den VBA-Editor (einfach das Fenster X-en oder
ALT + Q). - Drücke in Excel
ALT + F8. - Wähle
KombiniereArbeitsmappenaus und klicke auf Ausführen. - Wähle im Dialog den Ordner aus, in dem deine Dateien liegen.
- Warte kurz – Excel erstellt nun eine neue Mappe mit allen Inhalten.
Wichtige Hinweise
- Dateinamen-Länge: Excel erlaubt maximal 31 Zeichen für einen Tabellenblattnamen. Wenn der Dateiname + Blattname zu lang ist, könnte der Code einen Fehler ausgeben. Der Code oben kürzt den Dateinamen deshalb auf 15 Zeichen.
- Makro-Arbeitsmappe speichern: Wenn du dieses Makro behalten möchtest, speichere deine Excel-Datei als Excel-Arbeitsmappe mit Makros (.xlsm).
- Große Datenmengen: Wenn die Dateien sehr groß sind (z.B. jeweils 100.000 Zeilen), kann der Prozess je nach Arbeitsspeicher einen Moment dauern.
Alternative: Power Query
Für modernere Excel-Versionen (ab 2016 oder Office 365) gibt es auch einen Weg ohne Programmierung:
- Gehe auf den Reiter Daten.
- Wähle Daten abrufen > Aus Datei > Aus Ordner.
- Klicke auf Kombinieren. Dies ist oft stabiler, wenn du nur die Daten (Tabellen) untereinander hängen willst, anstatt ganze Arbeitsblätter zu kopieren.