Tutorial: Excel-Dateien aus einem Ordner automatisch in einer Master-Datei zusammenführen (VBA)
Hier ist ein ausführliches Tutorial, wie du mit einem VBA-Makro alle Excel-Arbeitsmappen aus einem bestimmten Ordner in einer einzigen Master-Datei zusammenführst.
Dieses Tutorial zeigt dir, wie du Zeit sparst, indem du den Import von Daten aus vielen einzelnen Excel-Dateien automatisierst. Das Makro öffnet nacheinander jede Datei in einem von dir gewählten Ordner und kopiert den Inhalt in deine aktuelle Arbeitsmappe.
1. Vorbereitung
Bevor du den Code verwendest, stelle sicher, dass die Entwicklertools in Excel aktiviert sind:
- Klicke mit der rechten Maustaste auf ein beliebiges Menüband (z. B. "Start") und wähle Menüband anpassen.
- Setze im rechten Fenster ein Häkchen bei Entwicklertools.
- Bestätige mit OK.
2. Der VBA-Code
Kopiere den folgenden Code. Dieser Code öffnet einen Dialog zur Ordnerauswahl, damit du flexibel entscheiden kannst, welche Dateien zusammengeführt werden sollen.
Sub AlleDateienZusammenfuehren()
Dim OrdnerPfad As String
Dim DateiName As String
Dim MasterSheet As Worksheet
Dim QuellWorkbook As Workbook
Dim LetzteZeileMaster As Long
Dim LetzteZeileQuelle As Long
Dim OrdnerDialog As FileDialog
' Bildschirmaktualisierung ausschalten für mehr Speed
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' Zielblatt festlegen (das erste Blatt in dieser Datei)
Set MasterSheet = ThisWorkbook.Sheets(1)
' Ordnerauswahl-Dialog öffnen
Set OrdnerDialog = Application.FileDialog(msoFileDialogFolderPicker)
With OrdnerDialog
.Title = "Wähle den Ordner mit den Excel-Dateien aus"
.AllowMultiSelect = False
If .Show <> -1 Then Exit Sub ' Abbrechen, wenn kein Ordner gewählt wurde
OrdnerPfad = .SelectedItems(1) & "\"
End With
' Die erste Excel-Datei im Ordner suchen
DateiName = Dir(OrdnerPfad & "*.xl*")
Do While DateiName <> ""
' Die Master-Datei selbst ignorieren, falls sie im gleichen Ordner liegt
If DateiName <> ThisWorkbook.Name Then
Set QuellWorkbook = Workbooks.Open(OrdnerPfad & DateiName)
' Letzte Zeile im Master-Blatt finden
LetzteZeileMaster = MasterSheet.Cells(MasterSheet.Rows.Count, "A").End(xlUp).Row
If LetzteZeileMaster = 1 And MasterSheet.Range("A1").Value = "" Then
LetzteZeileMaster = 0 ' Falls das Blatt noch ganz leer ist
End If
' Letzte Zeile in der Quelldatei finden (Blatt 1)
LetzteZeileQuelle = QuellWorkbook.Sheets(1).Cells(QuellWorkbook.Sheets(1).Rows.Count, "A").End(xlUp).Row
' Daten kopieren (hier: ab Zeile 2, um Kopfzeilen zu vermeiden)
' Wenn du Kopfzeilen mitkopieren willst, ändere die 2 in eine 1
If LetzteZeileQuelle >= 2 Then
QuellWorkbook.Sheets(1).Rows("2:" & LetzteZeileQuelle).Copy _
Destination:=MasterSheet.Rows(LetzteZeileMaster + 1)
End If
' Quelldatei schließen ohne zu speichern
QuellWorkbook.Close SaveChanges:=False
End If
' Nächste Datei suchen
DateiName = Dir
Loop
' Einstellungen zurücksetzen
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "Alle Dateien wurden erfolgreich zusammengeführt!", vbInformation, "Abgeschlossen"
End Sub
3. Schritt-für-Schritt Anleitung zur Einrichtung
- VBA-Editor öffnen: Drücke
ALT+F11. - Modul einfügen: Gehe im Menü auf Einfügen -> Modul.
- Code einfügen: Kopiere den obigen Code in das große weiße Textfeld des neuen Moduls.
- Speichern: Speichere deine Excel-Datei unbedingt als Excel-Arbeitsmappe mit Makros (.xlsm), da das Makro sonst verloren geht.
4. Funktionsweise des Makros
- Ordnerauswahl: Das Makro fragt dich beim Start, in welchem Ordner die Dateien liegen.
- Loop (Schleife): Es geht jede Datei einzeln durch (
Dir-Funktion). - Kopier-Logik:
- Es öffnet die Datei im Hintergrund.
- Es sucht die letzte beschriebene Zeile in deiner Master-Datei, um die neuen Daten unten anzuhängen.
- Es kopiert die Daten ab Zeile 2 (unter der Annahme, dass Zeile 1 Überschriften sind, die nicht jedes Mal wiederholt werden sollen).
- Schließen: Die geöffnete Datei wird sofort wieder geschlossen, um Arbeitsspeicher zu sparen.
5. Tipps zur Anpassung
- Überschriften: Wenn du die Überschriften der allerersten Datei mitkopieren möchtest, stelle sicher, dass deine Master-Datei bereits Überschriften hat, oder passe die Zeilenzahl im Code (
Rows("2:"...) an. - Spalten: Der Code orientiert sich an Spalte A, um das Ende der Daten zu finden. Wenn deine Daten in einer anderen Spalte enden, musst du
"A"im Code durch den entsprechenden Buchstaben ersetzen. - Bestimmte Tabellenblätter: Aktuell wird immer das erste Tabellenblatt (
Sheets(1)) jeder Datei kopiert. Falls die Blätter einen bestimmten Namen haben (z.B. "Daten"), kannst duSheets(1)durchSheets("Daten")ersetzen.
6. Sicherheitshinweis
Bevor du das Makro ausführst, erstelle zur Sicherheit immer eine Sicherungskopie deiner Master-Datei. Da VBA-Aktionen nicht mit dem "Rückgängig"-Button rückgängig gemacht werden können, ist dies eine wichtige Vorsichtsmaßnahme.