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:

  1. Den Benutzer nach einem Ordner fragt.
  2. Alle Excel-Dateien (.xlsx, .xls, .xlsm) in diesem Ordner nacheinander öffnet.
  3. Alle Tabellenblätter aus diesen Dateien in eine neue Master-Datei kopiert.
  4. Die Quelldateien wieder schließt.

Schritt 1: Die VBA-Umgebung öffnen

  1. Öffne eine leere Excel-Arbeitsmappe.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. 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 .xl beginnen (deckt .xlsx, .xls, .xlsm ab).
  • 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

  1. Schließe den VBA-Editor (einfach das Fenster X-en oder ALT + Q).
  2. Drücke in Excel ALT + F8.
  3. Wähle KombiniereArbeitsmappen aus und klicke auf Ausführen.
  4. Wähle im Dialog den Ordner aus, in dem deine Dateien liegen.
  5. 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:

  1. Gehe auf den Reiter Daten.
  2. Wähle Daten abrufen > Aus Datei > Aus Ordner.
  3. Klicke auf Kombinieren. Dies ist oft stabiler, wenn du nur die Daten (Tabellen) untereinander hängen willst, anstatt ganze Arbeitsblätter zu kopieren.
0