Ein VBA-Tutorial: Für jeden eindeutigen Wert eine neue Excel-Tabelle automatisch erstellen

Melden

Dieses Tutorial zeigt dir, wie du mit Excel VBA eine Liste durchlässt und für jeden eindeutigen (uniquen) Wert automatisch ein neues Tabellenblatt erstellst.

Das ist besonders hilfreich, wenn du zum Beispiel eine Liste von Verkäufern, Abteilungen oder Regionen hast und für jeden Eintrag einen separaten Bericht erstellen möchtest.


Schritt 1: Die Vorbereitung

  1. Öffne deine Excel-Datei.
  2. Stelle sicher, dass deine Daten in einer Spalte stehen (z. B. Spalte A). In diesem Beispiel gehen wir davon aus, dass in Tabelle1 in Spalte A ab Zeile 2 deine Liste steht.
  3. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  4. Gehe im Menü auf Einfügen -> Modul.

Schritt 2: Der VBA-Code

Kopiere den folgenden Code in das neue Modul:

Sub ErstelleBlaetterAusListe()
    Dim wsQuelle As Worksheet
    Dim bereich As Range
    Dim zelle As Range
    Dim uniqueListe As New Collection
    Dim eintrag As Variant
    Dim newWs As Worksheet
    Dim lastRow As Long

    ' 1. Arbeitsblatt definieren, in dem die Liste steht
    Set wsQuelle = ThisWorkbook.Sheets("Tabelle1") ' Name ggf. anpassen

    ' 2. Letzte Zeile in Spalte A finden
    lastRow = wsQuelle.Cells(wsQuelle.Rows.Count, "A").End(xlUp).Row

    ' 3. Bereich der Liste festlegen (ab Zeile 2 bis zur letzten Zeile)
    Set bereich = wsQuelle.Range("A2:A" & lastRow)

    ' 4. Eindeutige Werte in eine Collection laden
    On Error Resume Next ' Fehler ignorieren, wenn ein Wert doppelt vorkommt
    For Each zelle In bereich
        If zelle.Value <> "" Then
            uniqueListe.Add zelle.Value, CStr(zelle.Value)
        End If
    Next zelle
    On Error GoTo 0 ' Fehlerbehandlung zurücksetzen

    ' 5. Für jeden eindeutigen Eintrag ein Blatt erstellen
    For Each eintrag In uniqueListe
        ' Prüfen, ob das Blatt bereits existiert
        If Not SheetExists(CStr(eintrag)) Then
            Set newWs = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            newWs.Name = Left(CStr(eintrag), 31) ' Max. 31 Zeichen für Blattnamen
        End If
    Next eintrag

    MsgBox "Fertig! Alle Tabellenblätter wurden erstellt.", vbInformation
End Sub

' Hilfsfunktion: Prüft ob ein Blattname bereits existiert
Function SheetExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(sheetName)
    On Error GoTo 0
    SheetExists = Not ws Is Nothing
End Function

Schritt 3: Den Code verstehen (Erklärung)

  1. Collection (uniqueListe): Wir nutzen eine VBA-Collection. Der Clou: Eine Collection akzeptiert keinen "Key" doppelt. Wenn wir versuchen, den gleichen Namen zweimal hinzuzufügen, passiert dank On Error Resume Next einfach nichts. So filtern wir die Duplikate heraus.
  2. Schleife über den Bereich: Wir gehen die Spalte A von oben bis unten durch.
  3. Blatterstellung (Worksheets.Add): Für jeden Wert in unserer Collection erstellen wir ein neues Blatt.
  4. SheetExists Funktion: Bevor VBA ein Blatt erstellt, prüfen wir, ob es schon da ist. Ohne diese Prüfung würde das Makro abstürzen, wenn du es ein zweites Mal ausführst.
  5. Left(..., 31): Excel erlaubt maximal 31 Zeichen für einen Tabellenblattnamen. Dieser Code-Teil verhindert Fehler bei zu langen Namen.

Schritt 4: Das Makro ausführen

  1. Gehe zurück zu Excel.
  2. Drücke ALT + F8.
  3. Wähle ErstelleBlaetterAusListe aus und klicke auf Ausführen.

Profi-Tipps zur Erweiterung

  • Daten direkt kopieren: Wenn du nicht nur leere Blätter erstellen willst, sondern auch die passenden Zeilen aus der Liste in das jeweilige Blatt kopieren möchtest, müsstest du innerhalb der For Each eintrag-Schleife einen Filter setzen und die Ergebnisse kopieren.
  • Ungültige Zeichen: Excel erlaubt keine Zeichen wie / \ ? * [ ] in Blattnamen. Wenn deine Liste solche Zeichen enthält, solltest du sie im Code mit Replace() entfernen.
  • Blätter sortieren: Du kannst am Ende des Makros eine weitere Routine hinzufügen, die die neuen Blätter alphabetisch sortiert.

Sicherheitshinweis

Vergiss nicht, deine Excel-Datei als Excel Arbeitsmappe mit Makros (.xlsm) zu speichern, da der Code sonst beim Schließen verloren geht!

0