Pivot-Tabellen programmieren

Transcription

Pivot-Tabellen programmieren
Kapitel 17
Pivot-Tabellen
programmieren
Der Pivot-Tabellen-Assistent
500
Pivot-Tabellen-Objekte
502
Pivot-Tabellen löschen
503
Eine Pivot-Tabelle erzeugen
504
Gleichzeitig zwei Pivot-Tabellen erzeugen
505
Berechnungen in Pivot-Tabellen
508
Eine Pivot-Tabelle automatisch aktualisieren
510
Pivot-Tabelle sortieren
511
Pivot-Tabellenfelder vertauschen
511
Pivot-Tabellenfelder formatieren
512
Eine komplett formatierte Pivot-Tabelle erzeugen
514
499
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Auswertungstechniken
anwenden
In diesem Kapitel:
Kapitel 17
Pivot-Tabellen programmieren
Oftmals steht man als Excel-Anwender vor der Aufgabe, bestimmte Daten aus einer umfangreichen
Tabelle auszuwerten. Mit verschiedenen Formeln und Filtern kann man zwar vieles erreichen, dennoch reichen diese Möglichkeiten oft nicht aus. Der Einsatz von Pivot-Tabellen drängt sich auf.
Damit lassen sich in der Regel innerhalb kürzester Zeit große Datenmengen auf einfache Weise auswerten. Das Schöne daran ist, dass man die Daten per Mausklick in den verschiedensten Varianten
zusammenstellen und wieder umstellen kann, ohne dabei die Originaltabelle zu berühren. PivotTabellen kann man sich im Grunde genommen vorstellen wie eine Schablone. Die Daten darin sind
lediglich zur Quelle verlinkt. Das Ändern von Daten in der Pivot-Tabelle selbst ist von daher nicht
zugelassen.
Die Möglichkeiten von Pivot-Tabellen sind schier unerschöpflich. Pivot-Tabellen können auf verschiedenste Weise gestaltet werden. Es stehen diverse Berechnungsmöglichkeiten und Optionen zur
Verfügung. Pivot-Daten können sogar in einem Pivot-Diagramm grafisch dargestellt werden.
Die nachfolgenden Beispiele werden Ihnen zeigen, wie Sie mit dem Objekt PivotTables und den hierarchisch untergeordneten Objekten, wie zum Beispiel PivotField, umgehen können.
Der Pivot-Tabellen-Assistent
Bevor wir mit dem Programmieren von Pivot-Tabellen beginnen, werden wir zuerst Schritt für
Schritt eine Pivot-Tabelle erstellen. In unserer Beispieldatei besteht eine Tabelle, die ausgewertet
werden soll. Um daraus eine Pivot-Tabelle entstehen zu lassen, wird zuerst das Dialogfeld PivotTable
erstellen geöffnet. Dies geschieht über die Multifunktionsleiste auf der Registerkarte Einfügen in der
Gruppe Tabellen mit einem Klick auf die Schaltfläche PivotTable.
Abbildg. 17.1
PivotTable erstellen
Im Dialogfeld PivotTable erstellen geben Sie den Quellbereich Ihrer Daten an sowie den Zielbereich,
in den die Pivot-Tabelle eingefügt werden soll. Sobald dies geschehen ist, erscheinen auf der ExcelOberfläche die notwendigen Elemente, um die Pivot-Tabelle zusammenzustellen.
500
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Der Pivot-Tabellen-Assistent
Abbildg. 17.2
Vorgaben zum Erstellen der Pivot-Tabelle
Sie können die Pivot-Tabelle nun nach Belieben gestalten, indem Sie in der PivotTable-Feldliste die
Felder aktivieren, die im Pivot-Tabellen-Bereich erscheinen sollen. Die aktiven Felder können Sie in
den unteren Bereich der Feldliste ziehen. Damit beeinflussen Sie das Layout.
Eine fertige Pivot-Tabelle
Auswertungstechniken
anwenden
Abbildg. 17.3
501
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Kapitel 17
Pivot-Tabellen programmieren
Pivot-Tabellen-Objekte
Falls Sie Ihre Pivot-Tabellen immer nach dem gleichen Grundprinzip erstellen möchten, können Sie
sich die Schritte des Assistenten sparen, indem Sie eine geeignete Prozedur erstellen.
Wenn Sie Ihren Code per Makrorekorder aufzeichnen, muss dieser in der Regel zuerst einmal übersichtlich angeordnet werden. Ohne die notwendigsten Pivot-Tabellen-Objekte zu kennen, fällt es
schwer, einen aufgezeichneten Code zu bereinigen. Deshalb finden Sie in der nachfolgenden Tabelle
die wichtigsten Objekte und deren Beschreibung sowie einen Hierarchieüberblick:
Tabelle 17.1
Abbildg. 17.4
Die wichtigsten Pivot-Tabellen-Objekte
Objekte
Beschreibung
PivotCache
Der Zwischenspeicher (Daten-Buffer) der Pivot-Tabellendaten. Unter Zugabe von AddMethode und weiteren Anweisungen wird die Pivot-Tabelle erzeugt (ein WorkbookObjekt).
PivotTables
Die Pivot-Tabelle selbst (ein Worksheet-Objekt)
PivotFields
Die Felder der Pivot-Tabelle (ein PivotTable-Objekt)
PivotItems
Jedes Pivot-Tabellenfeld enthält eine Ansammlung an Pivot-Items. In unserem Beispiel sind
das u.a. »Rotwein«, »Weißwein«, »Champagner« usw. (ein PivotField-Objekt).
Hierarchie der Objekte aus Tabelle 17.1
Wissenswert ist zudem, dass eine Pivot-Tabelle in die folgenden vier Bereiche aufgeteilt ist, in die die
Datenfelder PivotFields gezogen werden können:
502
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Pivot-Tabellen löschen
Tabelle 17.2
Pivot-Tabellen-Bereiche
Element
Konstante
Beschreibung
Seite
xlPageField
Seitenfelder
Zeile
xlRowField
Anordnung der Daten in Zeilen
Spalte
xlColumnField
Anordnung der Daten in Spalten
Daten
xlDataField
Felder für den zu berechnenden Datenbereich
Die Elemente entsprechen dem folgenden Pivot-Tabellen-Aufbau:
Abbildg. 17.5
Pivot-Tabellen-Aufbau
Pivot-Tabellen löschen
Vielleicht klingt es etwas verfrüht, wenn wir uns zuerst ansehen, wie Pivot-Tabellen per VBA aus
einem Tabellenblatt gelöscht werden, noch bevor wir überhaupt eine Pivot-Tabelle erstellt haben.
Da jedoch das Löschen alter Pivot-Tabellen ein Bestandteil einer Prozedur ist, die eine neue PivotTabelle erzeugt, werden wir diesen Schritt vorziehen.
Die folgende Prozedur bedient sich einer For Each-Schleife, die sämtliche im Tabellenblatt enthaltenen Pivot-Tabellen löscht. Wichtig dabei ist die Eigenschaft TableRange2, denn sie bezieht die Seitenfelder mit ein, während TableRange1 die Seitenfelder nicht einschließt.
Selbst wenn keine Pivot-Tabelle im aktiven Tabellenblatt enthalten ist, erzeugt diese Prozedur keinen
Fehler. Dadurch ersparen wir uns eine Fehlerbehandlung, wie z.B. ein On Error Resume Next für
unser nächstes Beispiel.
Listing 17.1
Pivot-Tabellen löschen
With ActiveSheet
For Each pt In .PivotTables
pt.TableRange2.Delete
Next pt End With
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_01.xlsm. Die Prozedur ist im Modul mdl_01_PTDelete untergebracht.
503
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Auswertungstechniken
anwenden
Sub DeleteAllPivottables()
Dim pt As PivotTable
Kapitel 17
Pivot-Tabellen programmieren
Eine Pivot-Tabelle erzeugen
Nachdem Sie nun die wichtigsten Objekte kennen und auch das Löschen von Pivot-Tabellen
bekannt ist, können wir per VBA eine neue Pivot-Tabelle erzeugen.
Abbildg. 17.6
Quelldaten und Pivot-Tabelle
In der ersten For-Schleife werden bereits vorhandene Pivot-Tabellen des aktiven Tabellenblattes
gelöscht (wie zuvor beschrieben). Dies ist erforderlich, da die Prozedur sonst mit einer Fehlermeldung antworten würde, sofern im Zielbereich bereits eine Pivot-Tabelle vorhanden wäre.
Danach werden mit Set die Objekte referenziert, die zum Erstellen der Pivot-Tabelle erforderlich
sind. Da unsere Pivot-Tabelle auf demselben Tabellenblatt ausgegeben werden soll, auf dem auch die
Daten zu finden sind, geben wir bei der zweiten Referenzierung den Zielort an:
TableDestination:=ActiveSheet.Range("H1")
In der zweiten With-Anweisung werden die vier Felder aufbereitet, die unsere Pivot-Tabelle ausmachen. Wahlweise können auch weitere Felder des Quellbereiches mit einbezogen werden, oder Sie
können die Felder anders anordnen.
Am Ende der Prozedur werden die Spalten automatisch in der Breite angepasst. Danach werden die
referenzierten Objekte wieder freigegeben.
Listing 17.2
Pivot-Tabelle per VBA erzeugen
Sub CreatePivotTable()
Dim ptCache As PivotCache
Dim ptTable As PivotTable
Dim i As Integer
' Alle Pivot-Tabellen des aktiven Blattes löschen
With ActiveSheet
For Each ptTable In .PivotTables
ptTable.TableRange2.Delete
Next ptTable
End With
504
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Gleichzeitig zwei Pivot-Tabellen erzeugen
Listing 17.2
Pivot-Tabelle per VBA erzeugen (Fortsetzung)
' Neue Pivot-Tabelle mit dynamischer Zeilenzahl erstellen
Set ptCache = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, _
SourceData:="A1:F" & _
ActiveSheet.UsedRange.Rows.Count)
' Pivot-Tabelle auf aktuellem Tabellenblatt erstellen
Set ptTable = ptCache.CreatePivotTable _
(TableDestination:=ActiveSheet.Range("H1"), _
TableName:="MyPivotTable")
With ptTable
.PivotFields("Kaufdatum").Orientation = xlPageField
.PivotFields("Kunde").Orientation = xlRowField
.PivotFields("Getränk").Orientation = xlColumnField
.PivotFields("Total").Orientation = xlDataField
End With
' Spaltenbreite automatisch anpassen
Columns("A:N").AutoFit
Set ptCache = Nothing
Set ptTable = Nothing
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_01.xls. Die Prozedur ist im Modul mdl_02_PTCreate untergebracht.
Gleichzeitig zwei Pivot-Tabellen erzeugen
Auf Wunsch können Sie gleichzeitig zwei unterschiedliche Pivot-Tabellen auf einem Tabellenblatt
erzeugen.
Beim Referenzieren der Datenquelle können Sie nun als Source auf den zuvor definierten Namen
zugreifen:
SourceData:="MeinePivotTabelle"
Damit die erste Pivot-Tabelle auf einem neuen Tabellenblatt entsteht, wird keine Destination angegeben:
505
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Auswertungstechniken
anwenden
Damit die Datenquelle in unserem Code leicht anzusprechen ist, weisen wir ihr einen Namen zu.
Gehen Sie dazu wie folgt vor:
1. Markieren Sie den Datenbereich.
2. Drücken Sie die Tastenkombination (Strg)+(F3), um den Namens-Manager aufzurufen. Klicken Sie darin auf die Schaltfläche Neu, um das Dialogfeld Namen definieren zu öffnen.
3. Geben Sie in die Eingabezeile den Namen MeinePivotTabelle ein.
4. Klicken Sie auf die Schaltfläche OK, um das Dialogfeld zu schließen.
Kapitel 17
Pivot-Tabellen programmieren
TableDestination:=""
Die zweite Pivot-Tabelle soll auf demselben (neuen) Tabellenblatt erstellt werden wie die erste. Wir
geben deshalb bei der Referenzierung das Ziel vor:
TableDestination:=Worksheets(1).Rows(Rows.Count).End(xlUp).Offset(5, 0)
Da wir nicht wissen, wie viele Zeilen die erste Pivot-Tabelle einnimmt, müssen wir dynamisch vorgehen. Das neu erzeugte Tabellenblatt mit der ersten Pivot-Tabelle befindet sich an erster Stelle in
der Arbeitsmappe Worksheets(1). Die zweite Pivot-Tabelle soll unterhalb eingefügt werden
Rows(Rows.Count).End(xlUp), wobei ein Abstand von zwei Zeilen entstehen soll Offset(5, 0). Auf
den ersten Blick ist es etwas verwirrend, dass für zwei Zeilen bei Offset der Zeilenindex mit 5 verwendet wird. Dies begründet sich darin, dass die eigentliche Pivot-Tabelle ausschließlich des Seitenfeldes gerechnet werden muss.
Abbildg. 17.7
Zwei Pivot-Tabellen auf einem Tabellenblatt
HINWEIS
Beachten Sie, dass für jede Pivot-Tabelle ein eigener Name definiert werden muss:
TableName:="MyFirstPivotTable"
TableName:="MySecondPivotTable"
506
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Gleichzeitig zwei Pivot-Tabellen erzeugen
Der vollständige Code sieht somit wie folgt aus:
Listing 17.3
Zwei Pivot-Tabellen auf einem neuen Tabellenblatt erzeugen
Sub CreateTwoPivotTables()
Dim ptCache As PivotCache
Dim ptTable As PivotTable
Dim i As Integer
' Die Datenquelle angeben
Set ptCache = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, _
SourceData:="MeinePivotTabelle")
' ---------------------------------------------------' DIE ERSTE PIVOT-TABELLE ERSTELLEN
' ---------------------------------------------------Set ptTable = ptCache.CreatePivotTable _
(TableDestination:="", _
TableName:="MyFirstPivotTable")
' Pivot-Tabellenfelder anordnen
With ptTable
.PivotFields("Kaufdatum").Orientation = xlPageField
.PivotFields("Kunde").Orientation = xlRowField
.PivotFields("Getränk").Orientation = xlColumnField
.PivotFields("Total").Orientation = xlDataField
End With
' ---------------------------------------------------' DIE ZWEITE PIVOT-TABELLE ERSTELLEN
' ---------------------------------------------------Set ptTable = ptCache.CreatePivotTable _
(TableDestination:=Worksheets(1). _
Rows(Rows.Count).End(xlUp). _
Offset(5, 0), _
TableName:="MySecondPivotTable")
' Pivot-Tabellenfelder anordnen
With ptTable
.PivotFields("Kunde").Orientation = xlPageField
.PivotFields("Kaufdatum").Orientation = xlRowField
.PivotFields("Getränk").Orientation = xlColumnField
.PivotFields("Total").Orientation = xlDataField
End With
Set ptCache = Nothing
Set ptTable = Nothing
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_02.xlsm. Die Prozedur ist im Modul mdl_01_PTCreateTwo untergebracht.
507
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Auswertungstechniken
anwenden
' Spaltenbreite automatisch anpassen
Columns("A:N").AutoFit
Kapitel 17
Pivot-Tabellen programmieren
Berechnungen in Pivot-Tabellen
In unseren bisherigen Beispielen haben wir im Datenbereich jeweils die Summe der Datenfelder
ausgegeben. Auf Wunsch können Sie die Berechnungsmethode ändern.
Manuell gehen Sie dabei wie folgt vor:
1. Klicken Sie mit der rechten Maustaste auf den Datenbereich.
2. Wählen Sie im Kontextmenü den Eintrag Wertefeldeinstellungen aus, um das gleichnamige Dialogfeld zu öffnen.
3. Wählen Sie im Listenfeld die gewünschte Funktion aus und klicken Sie auf die Schaltfläche OK,
um das Dialogfeld wieder zu schließen.
Abbildg. 17.8
Berechnungsmethoden für Pivot-Tabellenfelder
Der Tabelle 17.3 können Sie die verfügbaren Funktionen und deren Konstanten entnehmen.
Tabelle 17.3
Berechnungsmöglichkeiten für Pivot-Tabellenfelder
Konstante
Index
Funktion
xlCount
–4112
Anzahl
xlCountNums
–4113
Anzahl Zahlen
xlMax
–4136
Maximum
xlMin
–4139
Minimum
xlAverage
–4106
Mittelwert
xlProduct
–4149
Produkt
xlStDev
–4155
Standardabweichung (Stichprobe)
xlStDevP
–4156
Standardabweisung (Grundgesamtheit)
xlSum
–4157
Summe
xlUnknown
1000
Unbekannt
508
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Berechnungen in Pivot-Tabellen
Tabelle 17.3
Berechnungsmöglichkeiten für Pivot-Tabellenfelder (Fortsetzung)
Konstante
Index
Funktion
xlVarP
–4165
Varianz (Grundgesamtheit)
xlVar
–4164
Varianz (Stichprobe)
Um das Auswahlverfahren für die am häufigsten benutzten Funktionen zu verkürzen, erstellen wir
in unserem Beispiel auf dem Tabellenblatt ein Zellen-Dropdown-Feld.
Selektieren Sie die Zelle, in der die gewünschten Funktionen zur Auswahl stehen sollen, zum Beispiel die Zelle H10.
1. Klicken Sie auf der Registerkarte Daten in der Gruppe Datentools auf den Befehl Datenüberprüfung.
2. Wählen Sie im Kombinationsfeld Zulassen den Wert Liste aus.
3. Geben Sie unter Quelle die Namen der gewünschten Funktionen ein. Zum Beispiel: Summe;
Anzahl;Mittelwert;Minimum;Maximum.
4. Klicken Sie auf die Schaltfläche OK, um das Dialogfeld Datenüberprüfung zu schließen.
Abbildg. 17.9
Funktion über ein Zellen-Dropdown-Feld auswählen
Zu Beginn der Prozedur wird in der If-Entscheidung festgelegt, dass die Ereignisprozedur nur aufgeführt werden soll, wenn in der Zelle H10 eine Auswahl getroffen wird.
In der Select Case-Entscheidung wird, je nach Auswahl der Funktion, die Berechnung für die PivotTabellenfelder geändert. Im Kopf der With-Anweisung wird die erste Zelle im Datenbereich angegeben. Me ist eine verkürzte Form, um die Pivot-Tabelle anzusprechen.
509
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Auswertungstechniken
anwenden
Damit bei der Auswahl der gewünschten Funktion die Pivot-Tabelle die Berechnung umstellt, benötigen wir eine Change-Ereignisprozedur, die an das Tabellenblatt gebunden ist.
Kapitel 17
Listing 17.4
Pivot-Tabellen programmieren
Ereignisprozedur für das Berechnen aufgrund der Auswahl aus dem Zellen-Dropdown-Feld
Private Sub Worksheet_Change(ByVal Target As Range)
' Prozedur nur ausführen, wenn sich in Zelle "H10" etwas ändert
If Target.Address <> "$H$10" Then
Exit Sub
End If
' Berechnungen für Zellendropdown-Auswahl
With Me.Range("I5")
Select Case Range("H10")
Case "Summe"
.PivotField.Function = xlSum
Case "Anzahl"
.PivotField.Function = xlCount
Case "Mittelwert"
.PivotField.Function = xlAverage
Case "Minimum"
.PivotField.Function = xlMin
Case "Maximum"
.PivotField.Function = xlMax
End Select
End With
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_03.xlsm. Die Ereignisprozedur ist im Modul Tabelle1 untergebracht.
Eine Pivot-Tabelle automatisch aktualisieren
Wenn Daten in der Quelltabelle geändert werden, wird die Pivot-Tabelle nicht automatisch aktualisiert. Die Aktualisierung muss explizit ausgeführt werden. Klicken Sie dazu mit der rechten Maustaste auf die Pivot-Tabelle und wählen Sie aus dem Kontextmenü den Befehl Aktualisieren.
Wenn Sie veranlassen möchten, dass die Pivot-Tabelle bei jeder Änderung der Quelltabelle automatisch aktualisiert wird, arbeiten Sie am besten mit dem Worksheet_Change-Ereignis. Dabei muss der
Quellbereich mittels Intersect eingeschränkt werden, da die Neuberechnung sonst zu lange dauern
würde.
Es wird zudem die Bildschirmaktualisierung (ScreenUpdating) deaktiviert, um die Geschwindigkeit
der Prozedur zu erhöhen und das Bildschirmflackern zu unterdrücken.
Die Methode zur Aktualisierung der Pivot-Tabelle lautet RefreshTable.
Listing 17.5
Pivot-Tabelle aktualisieren
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not (Application.Intersect(Range("A1:F40"), Target) _
Is Nothing) Then
Me.PivotTables(1).RefreshTable
End If
Application.ScreenUpdating = True
End Sub
510
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Pivot-Tabellenfelder vertauschen
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_04.xlsm. Die Ereignisprozedur ist im Modul Tabelle1 untergebracht.
Pivot-Tabelle sortieren
Pivot-Tabellenfelder können auf- oder absteigend sortiert werden. Der Aufruf über die Multifunktionsleiste erfolgt mit PivotTable-Tools/Optionen/Sortieren.
Die beiden folgenden Prozeduren zeigen, wie Daten eines Pivot-Tabellenfeldes wahlweise auf- oder
absteigend sortiert werden können. Zur Sortierung wird die Methode AutoSort verwendet. Die Konstante für aufsteigend lautet xlAscending und die Konstante für absteigend xlDescending.
Listing 17.6
Pivot-Tabellenfeld aufsteigend sortieren
Sub SortAscending()
ActiveSheet.PivotTables("MyPivotTable"). _
PivotFields("Kunde"). _
AutoSort xlAscending, "Kunde"
End Sub
Listing 17.7
Pivot-Tabellenfeld absteigend sortieren
Sub SortDescending()
ActiveSheet.PivotTables("MyPivotTable"). _
PivotFields("Kunde"). _
AutoSort xlDescending, "Kunde"
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_05.xlsm. Die Prozeduren sind im Modul mdl_01_PTSort untergebracht.
Pivot-Tabellenfelder vertauschen
Um die Felder per VBA gegeneinander auszutauschen, verwenden Sie die Eigenschaft Orientation,
gefolgt von der entsprechenden Konstanten (xlColumnField oder xlRowField).
Die folgende Prozedur ist an eine ActiveX-Umschaltfläche gebunden. Bei jedem Klick auf die
Umschaltfläche werden die beiden Felder miteinander vertauscht.
511
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Auswertungstechniken
anwenden
In unseren bisherigen Beispieldateien haben wir jeweils mit den Pivot-Tabellenfeldern Kunde und
Getränk gearbeitet, wobei das eine in der Spalte und das andere in der Zeile angeordnet war. Auf
Wunsch können Sie die beiden Felder gegeneinander vertauschen. Manuell können Sie die Felder
nach Belieben vertauschen, indem Sie sie mit der Maus an die gewünschte Stelle im Pivot-Tabellenlayout ziehen.
Kapitel 17
Listing 17.8
Pivot-Tabellen programmieren
Pivot-Tabellenfelder vertauschen
Private Sub ToggleButton1_Click()
With ActiveSheet.PivotTables("MyPivotTable")
If .PivotFields("Kunde").Orientation = xlColumnField Then
.PivotFields("Kunde").Orientation = xlRowField
.PivotFields("Getränk").Orientation = xlColumnField
Else
.PivotFields("Getränk").Orientation = xlRowField
.PivotFields("Kunde").Orientation = xlColumnField
End If
End With
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_06.xlsm. Die Ereignisprozedur ist an den ToggleButton1 gebunden.
Pivot-Tabellenfelder formatieren
Eine Pivot-Tabelle verfügt über drei Hauptelemente, die gestaltet werden können. Jedes Element
wird durch eine andere Eigenschaft angesprochen. Welche das sind, können Sie der Abbildung 17.10
entnehmen:
Abbildg. 17.10 Die drei Hauptelemente einer Pivot-Tabelle
Im folgenden Code nehmen wir verschiedene Formatierungen an einigen der Pivot-Tabellenelemente vor:
512
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Pivot-Tabellenfelder formatieren
Listing 17.9
Pivot-Tabellenelemente formatieren
Sub MyFormatting()
With ActiveSheet.PivotTables("MyPivotTable")
With .PivotFields("Kunde")
.LabelRange.Interior.Color = vbGreen
.DataRange.Interior.Color = vbYellow
End With
With .PivotFields("Getränk")
.LabelRange.Interior.Color = vbBlue
.DataRange.Interior.Color = vbCyan
End With
With .PivotFields("Kaufdatum")
.LabelRange.Interior.Color = vbRed
.DataRange.Interior.Color = vbMagenta
End With
With .DataBodyRange
.Interior.Color = vbBlack
.Font.Color = vbWhite
End With
End With
End Sub
Abbildg. 17.11 Formatierte Pivot-Tabellenelemente
Auswertungstechniken
anwenden
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_07.xlsm. Die Prozedur ist im Modul mdl_01_PTFormatting untergebracht.
513
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Kapitel 17
Pivot-Tabellen programmieren
Eine komplett formatierte Pivot-Tabelle
erzeugen
Die nachfolgende Prozedur zeigt, wie eine Pivot-Tabelle fertig formatiert erzeugt werden kann.
Abbildg. 17.12 Eine fertig formatierte Pivot-Tabelle erzeugen
Die Beschreibung der einzelnen Formatierungen ist direkt im Code untergebracht.
Listing 17.10
Formatierte Pivot-Tabelle einfügen
Sub CreateFormattedPivotTable()
Dim ptCache As PivotCache
Dim ptTable As PivotTable
Dim i As Integer
With ActiveSheet
For Each ptTable In .PivotTables
ptTable.TableRange2.Delete
Next ptTable
End With
Set ptCache = ActiveWorkbook.PivotCaches.Add _
(SourceType:=xlDatabase, _
SourceData:="A1:F" & _
ActiveSheet.UsedRange.Rows.Count)
Set ptTable = ptCache.CreatePivotTable _
(TableDestination:=ActiveSheet.Range("H1"), _
TableName:="MyPivotTable")
With ptTable
.PivotFields("Kaufdatum").Orientation = xlPageField
.PivotFields("Getränk").Orientation = xlRowField
.PivotFields("Kunde").Orientation = xlColumnField
.PivotFields("Total").Orientation = xlDataField
End With
514
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Eine komplett formatierte Pivot-Tabelle erzeugen
Listing 17.10
Formatierte Pivot-Tabelle einfügen (Fortsetzung)
' ----------------------------------------------' FORMATIERUNGEN
' ----------------------------------------------With ptTable
' Seitenfeld formatieren
With .PivotFields("Kaufdatum")
' Farbe und fett für Feld
With .LabelRange
.Interior.ColorIndex = 5 ' Blau
.Font.Bold = True
' Fett
.Font.Color = vbWhite
' Weiß
End With
' Farbe und kursiv für Daten
With .DataRange
.Interior.ColorIndex = 34 ' Hellblau
.Font.Italic = True
' Kursiv
End With
End With
' Spaltenfeld formatieren
With .PivotFields("Kunde")
' Farbe und fett für Feld
With .LabelRange
.Interior.ColorIndex = 3
.Font.Bold = True
End With
' Rot
' Fett
' Farbe und kursiv für Daten
With .DataRange
.Interior.ColorIndex = 38 ' Rosa
.Font.Italic = True
' Kursiv
End With
End With
' Zeilenfeld formatieren
With .PivotFields("Getränk")
' Farbe und fett für Feld
With .LabelRange
.Interior.ColorIndex = 4
.Font.Bold = True
End With
' Grün
' Fett
Auswertungstechniken
anwenden
' Farbe und kursiv für Daten
With .DataRange
.Interior.ColorIndex = 35 ' Hellgrün
.Font.Italic = True
' Kursiv
End With
End With
' Datenfeld formatieren
With .PivotFields("Summe von Total")
' Farbe und fett für Feld
With .LabelRange
.Interior.ColorIndex = 6 ' Gelb
515
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2
Kapitel 17
Listing 17.10
Pivot-Tabellen programmieren
Formatierte Pivot-Tabelle einfügen (Fortsetzung)
.Font.Bold = True
End With
' Fett
' Farbe und kursiv für Daten
With .DataRange
.Interior.ColorIndex = 36 ' Hellgelb
.Font.Italic = True
' Kursiv
End With
End With
End With
' Spaltenbreite automatisch anpassen
Columns("A:N").AutoFit
Set ptCache = Nothing
Set ptTable = Nothing
End Sub
Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe
nennt sich Bsp17_08.xlsm. Die Prozedur ist im Modul mdl_01_PTFormatted untergebracht.
516
Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2