Tutorial: Excel-Dateien aus einem Ordner automatisch in einer Master-Datei zusammenführen (VBA)

Melden

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:

  1. Klicke mit der rechten Maustaste auf ein beliebiges Menüband (z. B. "Start") und wähle Menüband anpassen.
  2. Setze im rechten Fenster ein Häkchen bei Entwicklertools.
  3. 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

  1. VBA-Editor öffnen: Drücke ALT + F11.
  2. Modul einfügen: Gehe im Menü auf Einfügen -> Modul.
  3. Code einfügen: Kopiere den obigen Code in das große weiße Textfeld des neuen Moduls.
  4. 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 du Sheets(1) durch Sheets("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.

0