Excel VBA: Pivot-Tabellen automatisch erstellen – Ein Schritt-für-Schritt-Tutorial
Hier ist ein ausführliches Tutorial, das dir zeigt, wie du mit Excel VBA eine Pivot-Tabelle automatisch erstellst.
Die Automatisierung von Pivot-Tabellen mit VBA ist besonders hilfreich, wenn du regelmäßig Berichte aus ähnlich strukturierten Datensätzen erstellen musst. In diesem Guide lernst du, wie du den Quellbereich definierst, einen Pivot-Cache erstellst und die Felder anordnest.
1. Die Vorbereitung der Daten
Damit das Makro reibungslos funktioniert, sollten deine Daten:
- In der ersten Zeile Überschriften haben.
- Keine komplett leeren Zeilen oder Spalten innerhalb des Datensatzes enthalten.
2. Der vollständige VBA-Code
Kopiere diesen Code in ein neues Modul in deinem VBA-Editor (Öffnen mit ALT + F11 -> Einfügen -> Modul).
Sub ErstellePivotTabelle()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim PCache As PivotCache
Dim PTabelle As PivotTable
Dim PRange As Range
Dim LetzteZeile As Long
Dim LetzteSpalte As Long
' 1. Arbeitsblätter festlegen
Set wsQuelle = ActiveSheet
' Prüfen, ob das Blatt "Pivot_Bericht" schon existiert, falls ja: löschen
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Pivot_Bericht").Delete
Application.DisplayAlerts = True
On Error GoTo 0
' Neues Zielblatt erstellen
Set wsZiel = Sheets.Add(After:=wsQuelle)
wsZiel.Name = "Pivot_Bericht"
' 2. Datenbereich dynamisch ermitteln
LetzteZeile = wsQuelle.Cells(wsQuelle.Rows.Count, 1).End(xlUp).Row
LetzteSpalte = wsQuelle.Cells(1, wsQuelle.Columns.Count).End(xlToLeft).Column
Set PRange = wsQuelle.Cells(1, 1).Resize(LetzteZeile, LetzteSpalte)
' 3. Pivot Cache erstellen (Speicherort der Daten für die Pivot)
Set PCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=PRange)
' 4. Pivot-Tabelle im Zielblatt erstellen
Set PTabelle = PCache.CreatePivotTable( _
TableDestination:=wsZiel.Cells(3, 1), _
TableName:="UmsatzAnalyse")
' 5. Felder anordnen
With PTabelle
' Zeilenfeld hinzufügen (Beispiel: "Region")
With .PivotFields("Region")
.Orientation = xlRowField
.Position = 1
End With
' Spaltenfeld hinzufügen (Beispiel: "Jahr")
With .PivotFields("Jahr")
.Orientation = xlColumnField
.Position = 1
End With
' Filter hinzufügen (Beispiel: "Kategorie")
With .PivotFields("Kategorie")
.Orientation = xlPageField
.Position = 1
End With
' Wertefeld hinzufügen (Beispiel: "Umsatz")
.AddDataField .PivotFields("Umsatz"), "Summe von Umsatz", xlSum
' Zahlenformat im Wertefeld anpassen
.PivotFields("Summe von Umsatz").NumberFormat = "#.##0,00 €"
End With
MsgBox "Pivot-Tabelle wurde erfolgreich erstellt!", vbInformation
End Sub
3. Erläuterung der wichtigsten Schritte
A. Der Pivot Cache (PivotCache)
Bevor Excel eine Pivot-Tabelle zeichnet, lädt es die Daten in einen internen Speicher, den sogenannten Cache. Dies macht die Tabelle performant. Im Code geschieht dies über PivotCaches.Create.
B. Dynamischer Datenbereich
Anstatt einen festen Bereich wie A1:D100 zu nutzen, ermitteln wir die letzte Zeile und Spalte:
LetzteZeile = wsQuelle.Cells(wsQuelle.Rows.Count, 1).End(xlUp).Row
Set PRange = wsQuelle.Cells(1, 1).Resize(LetzteZeile, LetzteSpalte)
Dadurch passt sich das Makro automatisch an, wenn dein Datensatz wächst.
C. Die Orientierung (Orientation)
Hier bestimmst du, wo die Felder landen:
xlRowField: ZeilenxlColumnField: SpaltenxlPageField: Filter (Berichtsfilter)xlDataField: Werte (Berechnungen wie Summe, Anzahl etc.)
4. Anpassung an deine Daten
Damit das Makro bei dir funktioniert, musst du die Namen der Felder in den Anführungszeichen an deine Spaltenüberschriften anpassen:
- Ändere
"Region"in den Namen deiner Zeilenbeschriftung. - Ändere
"Umsatz"in den Namen deiner Zahlenspalte. - Ändere
"Summe von Umsatz"in einen beliebigen Anzeigenamen.
5. So führst du das Makro aus
- Gehe zurück in dein Excel-Fenster.
- Drücke
ALT+F8. - Wähle
ErstellePivotTabelleaus und klicke auf Ausführen.
Profi-Tipp: Fehler vermeiden
Wenn du das Makro mehrmals hintereinander ausführst, würde Excel versuchen, ein Blatt zu erstellen, das bereits existiert. Der Code-Block unter Punkt 1 (On Error Resume Next ... Delete) sorgt dafür, dass das alte Berichtsblatt vorher gelöscht wird, um Fehler zu vermeiden.