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
- Öffne deine Excel-Datei.
- 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.
- Drücke
ALT + F11, um den VBA-Editor zu öffnen. - 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)
- 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 dankOn Error Resume Nexteinfach nichts. So filtern wir die Duplikate heraus. - Schleife über den Bereich: Wir gehen die Spalte A von oben bis unten durch.
- Blatterstellung (
Worksheets.Add): Für jeden Wert in unserer Collection erstellen wir ein neues Blatt. SheetExistsFunktion: 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.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
- Gehe zurück zu Excel.
- Drücke
ALT + F8. - Wähle
ErstelleBlaetterAusListeaus 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 mitReplace()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!