Excel-VBA Tutorial: Arbeitsblatt nach Spaltenwert in mehrere Tabellenblätter aufteilen
Hier ist ein ausführliches Tutorial, wie du ein Excel-Arbeitsblatt basierend auf den Werten einer bestimmten Spalte automatisch in mehrere Arbeitsblätter aufteilen kannst.
Dieses Tutorial zeigt dir, wie du mit einem VBA-Makro Datenmengen effizient organisierst. Wenn du beispielsweise eine Liste mit Verkaufsdaten hast, kannst du für jeden Vertriebsmitarbeiter oder jede Region automatisch ein eigenes Tabellenblatt erstellen lassen.
1. Voraussetzungen
Damit das Makro funktioniert, stelle sicher, dass:
- Deine Datei als Excel-Arbeitsmappe mit Makros (.xlsm) gespeichert ist.
- Die Registerkarte Entwicklertools im Menüband sichtbar ist (Rechtsklick auf das Menüband > Menüband anpassen > Haken bei Entwicklertools).
2. Der VBA-Code
Kopiere den folgenden Code. Er ist so geschrieben, dass er flexibel angepasst werden kann.
Sub SpalteAufteilenInBlaetter()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim letzteZeile As Long
Dim spalteIndex As Integer
Dim bereich As Range
Dim eindeutigeWerte As Collection
Dim zelle As Range
Dim wert As Variant
' --- EINSTELLUNGEN ---
Set wsQuelle = ThisWorkbook.ActiveSheet ' Das aktuelle Blatt wird aufgeteilt
spalteIndex = 1 ' IN WELCHER SPALTE STEHEN DIE WERTE? (A=1, B=2, C=3, ...)
' ---------------------
Application.ScreenUpdating = False ' Verhindert Bildschirmflackern
letzteZeile = wsQuelle.Cells(wsQuelle.Rows.Count, spalteIndex).End(xlUp).Row
Set eindeutigeWerte = New Collection
' 1. Eindeutige Werte aus der Spalte sammeln
On Error Resume Next
For Each zelle In wsQuelle.Range(wsQuelle.Cells(2, spalteIndex), wsQuelle.Cells(letzteZeile, spalteIndex))
If zelle.Value <> "" Then
eindeutigeWerte.Add zelle.Value, CStr(zelle.Value)
End If
Next zelle
On Error GoTo 0
' 2. Für jeden eindeutigen Wert ein Blatt erstellen/befüllen
For Each wert In eindeutigeWerte
' Prüfen, ob Blatt bereits existiert, sonst erstellen
On Error Resume Next
Set wsZiel = Sheets(CStr(wert))
On Error GoTo 0
If wsZiel Is Nothing Then
Set wsZiel = Sheets.Add(After:=Sheets(Sheets.Count))
wsZiel.Name = CStr(wert)
Else
wsZiel.Cells.ClearContents ' Bestehende Daten löschen
End If
' 3. Daten filtern und kopieren
wsQuelle.UsedRange.AutoFilter Field:=spalteIndex, Criteria1:=wert
wsQuelle.UsedRange.SpecialCells(xlCellTypeVisible).Copy Destination:=wsZiel.Range("A1")
' Spaltenbreite automatisch anpassen
wsZiel.Columns.AutoFit
' Zielvariable zurücksetzen für den nächsten Durchlauf
Set wsZiel = Nothing
Next wert
' Filter entfernen und Abschluss
wsQuelle.AutoFilterMode = False
Application.ScreenUpdating = True
MsgBox "Fertig! Die Daten wurden auf " & eindeutigeWerte.Count & " Blätter aufgeteilt.", vbInformation
End Sub
3. Schritt-für-Schritt-Anleitung zur Einrichtung
Schritt 1: Den VBA-Editor öffnen
Drücke die Tastenkombination ALT + F11, um den Visual Basic Editor zu öffnen.
Schritt 2: Ein neues Modul einfügen
Klicke im Menü oben auf Einfügen -> Modul. Ein weißes Textfenster erscheint.
Schritt 3: Code einfügen
Kopiere den obigen Code und füge ihn in das Fenster ein.
Schritt 4: Einstellungen anpassen
Im Code findest du den Bereich --- EINSTELLUNGEN ---.
- Ändere die Zahl bei
spalteIndex = 1, wenn deine Daten nach einer anderen Spalte als Spalte A aufgeteilt werden sollen (z.B.2für Spalte B).
Schritt 5: Das Makro ausführen
Es gibt zwei Möglichkeiten:
- Drücke direkt im VBA-Editor F5.
- Gehe zurück zu Excel, klicke auf Entwicklertools -> Makros, wähle
SpalteAufteilenInBlaetteraus und klicke auf Ausführen.
4. Funktionsweise erklärt
- Eindeutige Werte finden: Das Makro durchläuft die gewählte Spalte und merkt sich jeden Wert (z.B. jeden Namen) genau einmal in einer "Collection".
- Blatt-Erstellung: Für jeden Namen in der Liste prüft das Makro, ob bereits ein Tabellenblatt mit diesem Namen existiert. Wenn nicht, wird eines erstellt.
- Autofilter: Das Makro nutzt die eingebaute Filterfunktion von Excel. Es filtert die Haupttabelle nach dem aktuellen Namen.
- Kopieren: Nur die sichtbaren Zeilen (die zum Namen passen) werden kopiert und in das jeweilige Blatt eingefügt.
- Aufräumen: Der Filter wird am Ende wieder deaktiviert, damit deine Originaldaten unverändert sichtbar bleiben.
5. Tipps & Fehlerbehebung
- Überschriften: Das Makro geht davon aus, dass die erste Zeile deiner Tabelle Überschriften enthält.
- Sonderzeichen: Die Werte in der Spalte werden als Blattnamen verwendet. Vermeide daher Sonderzeichen wie
:,\,/,?,*,[oder], da Excel diese in Blattnamen nicht erlaubt. - Datenschutz: Wenn du die Datei weitergibst, denke daran, dass die Makros nur in einer
.xlsm-Datei gespeichert bleiben. - Bestehende Blätter: Falls ein Blatt bereits existiert, löscht das Makro im aktuellen Code den alten Inhalt, bevor es die neuen gefilterten Daten einfügt. Das verhindert Dubletten.