Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pivot Berichtsfilter auslesen

Forumthread: Pivot Berichtsfilter auslesen

Pivot Berichtsfilter auslesen
06.08.2014 18:18:11
Johann

Hallo zusammen,
ich möchte alle Berichtsfilter meiner Pivottabelle auslesen, um mit diesen Infos ein Diagramm zu beschriften.
Wie kann ich mir die Informationen anzeigen lassen, wenn mehrere Elemente des jeweiligen Filterfeldes markiert sind? Die markierten Elemente sollen anschließend einzeln in das Feld C1, D1, usw. geschrieben werden. Die Elemente des nächsten Filterfeldes in C2, D2, ...
Da meine VBA-Kenntnisse relativ bescheiden sind, ist mir eine Nicht VBA-Lösung auch sehr willkommen. Könnte man das z.B. mit getpivotdata() lösen?
Viele Grüße
Johann
PS: Eine Umstrukturierung der Tabelle, so dass "Country" als zusätzliches Spaltenelement hinzugenommen wird, ist leider nicht möglich.

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot Berichtsfilter auslesen
07.08.2014 09:49:19
Johann
Gueten Morgen,
habe einen Codeschnipsel gefunden und angepasst..
 Sub Read_filter()
Dim pi As PivotItem
For Each pi In ActiveSheet.PivotTables("MeritOrder").PivotFields( _
"[Pivot_MerO_DataImport].[Country].[Country]").PivotItems
If pi.Visible Then MsgBox pi.Name & " is selected"
Next pi
End Sub
Leider kommt kein PopUp, das mir den Inhalt anzeigt. Oder wird es zu kurz angezeigt?
Gruß
Johann

Anzeige
Wirklich keiner eine Idee?
07.08.2014 11:56:39
Johann
Gruß Johann

AW: Pivottabelle, Berichtsfilter gewählte Elemente
07.08.2014 13:13:13
fcs
Hallo Johann,
ohne Makros kommt man an die Filterinformation des Berichtfilters nicht heran.
Ich hab hier mal für eine ähnliche Fragestelltung entsprechende Makros bzw. eine Function erstellt.
https://www.herber.de/forum/archiv/1368to1372/t1370486.htm#1370486
Die gewählten Filter werden in einer Zelle ausgegeben.
Das könnte man aber ggf. noch anpassen.
Gruß
Franz

Anzeige
AW: Pivottabelle, Berichtsfilter gewählte Elemente
07.08.2014 14:05:19
Johann
Hallo Franz,
vielen Dank für den Link!
Leider passiert nicht viel bei mir, wenn ich die Pivot Tabelle aktualisiere.
Verstehe ich dich richtig, dass dieses Makro nur dann startet, wenn die PT aktualisiert wird? Wenn ich mir dein Makro im VBA Editor ansehe und aus dem Editor starten will, fragt er welches Makro ich ausführen soll (habe noch zwei weitere in der Mappe). Deins tauch darunter nicht auf.
Und noch zwei Fragen: Ist "B2" die Zelle, in welche der Filterinhalt ausgegebn wird? Wenn mehrere Bereichsfilter existieren, werden dann die Inhalte darunter (B3) geschrieben oder wird nur ein Filter ausgewertet bzw. darf die PT nur einen Filter haben, damit das Makro funktioniert?
Sorry, wenns blöde Fragen sind, aber mit VBA hab ich mich noch nicht wirklich angefreundet ^^
Gruß Johann

Anzeige
AW: Pivottabelle, Berichtsfilter gewählte Elemente
07.08.2014 16:29:22
fcs
Hallo Johann,
es sind ja 2 Makros:
1.: Public Function fncBerichtsfilter(pvTable As ....
Dieses Makro musst du in einem allgemeinen Modul in deiner Datei einfügen.
2.: Ereignismakro
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
With Me
'in nächster Zeile _
- die Zelle (wo Filter eingetragen werden soll), _
- Name des Berichtsfeldes, _
- und ggf. den Trenntext zwischen den Filterwerten _
anpassen.
.Range("B2").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Feld01", strSep:=";")
.Range("B3").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Feld02", strSep:=";")
End With
End Sub

Dieses muss im VBA-Editor jeweils unter den Tabellenblättern mit den Pivot-Tabellenberichten eingefügt werden.
Das Makro schreibt dann alle Filterwerte zu dem unter strFieldName angegebenen Berichtsfeld in die Zelle.
Nachfolgend eine Variante. Diese arbeitet alle Felder im Seitenbereich ab und trägt die selektierten Elemente in die rechten Nachbarzellen ein. Für die Ausgabe der Werte kann man sich natürlich auch etwas anderes zusammenstellen.
Gruß
Franz
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim pvField As PivotField, varFilterwerte As Variant, intV, intZeile As Integer, intSpalte As  _
Integer
With Me
'Alle slektierten Elemente der >Berichtsfelder in den rechten nachbarzellen anzeigen
For Each pvField In Target.PageFields
pvField.LabelRange.Offset(0, 2).Resize(1, 10).ClearContents
varFilterwerte = fncBerichtsfilter(pvTable:=Target, _
strFieldName:=pvField.Name, strSep:=";")
If varFilterwerte <> "" Then
varFilterwerte = Split(varFilterwerte, ";")
intZeile = 0
intSpalte = 0
For intV = LBound(varFilterwerte) To UBound(varFilterwerte)
intSpalte = intSpalte + 1
pvField.LabelRange.Offset(0 + intZeile, 2 + intSpalte).Value = varFilterwerte(intV)
Next
End If
Next
End With
End Sub

Anzeige
Berichtsfilter lesen - läuft nicht durch
07.08.2014 18:48:53
Johann
Hallo Franz,
vielen Dank! Ich glaube, die beiden Codes nun an der richtigen Stelle eingefügt zu haben.
Wenn ich meine PT aktualisiere stoppt das Makro im allgemeinen Modul an der ersten If Bedingung mit dem LZ Fehler 5: "Ungültiger Prozeduraufruf oder ungültiges Argument".
  With pvField
fncBerichtsfilter = ""
If .EnableMultiplePageItems = True Then
For Each pvItem In .PivotItems
If Not IsError(pvItem.SourceName) Then
Weißt du Rat?
Sofern relevant: Ich lade die Daten für meine PT über ein Datenmodell (Power Pivot)
Viele Grüße
Johann

Anzeige
AW: Berichtsfilter lesen - läuft nicht durch
08.08.2014 10:16:08
fcs
Hallo Johann,
wenn das Makro bis an diese Stelle kommt, dann hast du alles an der richtigen Position eingefügt.
Das Makro hab erstellt für einen "normalem" Pivot-Bericht. Ich hab keine Erfahrungen wie das Makro mit einer PowerPivot-basierten Pivot-Tabelle funktioniert.
Diese Prüfzeile hab ich eingebaut, damit Items "(Leer)" bzw. "(blank)" erkannt werden. Diese haben ein Problem bei der nachfolgenden Prüfung auf die Visble-Eigenschaft.
Wenn du keine (Leer)-Einträge unter den Berichtsfeld-Elementen hast dann kannst du diese Zeile inklusive der zugehörigen EndIf-Zeile löschen.
Alternativ könntest du die Zeile durch folgende erstzen:
          If pvItem.Name <> "(blank)" Then
funktioniert zumendest für eine normale Pivot-Tabelle.
Gruß
Franz

Anzeige
AW: Berichtsfilter lesen - läuft nicht durch
08.08.2014 14:06:19
Johann
Hallo Franz,
es scheint sich wirklich um ein Problem zu handeln, das durch die Nutzung eines Datenmodells als Datenquelle enststeht.
Dein Code hat auch nach den Änderungen nicht funktioniert.
Habe folgenden Code ausprobiert, den ich in einem anderen Forum gefunden habe und für mich leichter anzupassen, weil kürzer ist. Er fuktioniert für eine "normale" Pivot Tabelle. Ich werde einen anderen Thread aufmachen, der das Problem mit Power Pivot konkretisiert.
Viele Grüße
Johann
Sub Get_Current_PageFilters_OnePageField()
Dim PT As PivotTable
Dim sArray() As String
Dim i As Long
On Error Resume Next
Set PT = Worksheets("PivotData").Range("A1").PivotTable
If PT.PageFields.Count < 1 Then
MsgBox "There are no PageFields in this Pivot Table"
Exit Sub
End If
With PT.PageFields(1)
'---store field name in sArray(0)
ReDim sArray(0)
sArray(0) = .Name
If .EnableMultiplePageItems Then
'---store visible items in sArray(1) and up
For i = 1 To .PivotItems.Count
If .PivotItems(i).Visible Then
ReDim Preserve sArray(UBound(sArray) + 1)
sArray(UBound(sArray)) = .PivotItems(i)
End If
Next i
Else
ReDim Preserve sArray(UBound(sArray) + 1)
sArray(UBound(sArray)) = .CurrentPage
End If
End With
'---display results in Immediate Window
For i = 0 To UBound(sArray)
'Debug.Print sArray(i)
Worksheets("Filter").Range("A" & i + 1).Value = sArray(i)
Next i
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

Pivot Berichtsfilter auslesen in Excel


Schritt-für-Schritt-Anleitung

Um die Berichtsfilter einer Pivottabelle in Excel auszulesen und die ausgewählten Werte in bestimmte Zellen zu schreiben, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineMappe.xlsx)" und wähle "Einfügen" > "Modul".

  3. Füge den folgenden Code ein:

    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
       Dim pvField As PivotField, varFilterwerte As Variant, intV As Integer, intSpalte As Integer
       With Me
           For Each pvField In Target.PageFields
               varFilterwerte = fncBerichtsfilter(pvTable:=Target, strFieldName:=pvField.Name, strSep:=";")
               If varFilterwerte <> "" Then
                   varFilterwerte = Split(varFilterwerte, ";")
                   intSpalte = 0
                   For intV = LBound(varFilterwerte) To UBound(varFilterwerte)
                       pvField.LabelRange.Offset(0, intSpalte).Value = varFilterwerte(intV)
                       intSpalte = intSpalte + 1
                   Next
               End If
           Next
       End With
    End Sub
  4. Ereignismakro anpassen: Stelle sicher, dass die Zelle, in die die Filterwerte geschrieben werden, korrekt angegeben ist.

  5. Speichere deine Änderungen und schließe den VBA-Editor.

  6. Aktualisiere die Pivottabelle: Klicke mit der rechten Maustaste auf die Pivottabelle und wähle "Aktualisieren".


Häufige Fehler und Lösungen

  • Fehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument: Dieser Fehler tritt auf, wenn das Makro auf ein nicht vorhandenes Element zugreifen möchte. Stelle sicher, dass alle Berichtsfelder korrekt benannt sind und existieren.
  • Keine Ausgabe in den Zellen: Überprüfe die strFieldName-Argumente im Makro. Diese sollten exakt mit den Namen der Berichtsfelder übereinstimmen.
  • Pop-Up wird nicht angezeigt: Wenn ein MsgBox nicht erscheint, könnte das daran liegen, dass die Bedingung zur Anzeige nicht erfüllt ist. Füge Debugging-Statements ein, um den Ablauf zu verfolgen.

Alternative Methoden

Falls du keine VBA-Programmierung verwenden möchtest, kannst du die Funktion GETPIVOTDATA() verwenden, um Werte aus der Pivottabelle auszulesen. Zum Beispiel:

=GETPIVOTDATA("Summe von Umsatz"; A3; "Land"; "Deutschland")

Hierbei ersetzt du "Summe von Umsatz" und "Land" mit den spezifischen Feldnamen deiner Pivottabelle.


Praktische Beispiele

  1. Mehrere Filterwerte in Zellen ausgeben: Verwende das folgende VBA-Skript, um alle sichtbaren Filterwerte in die Zellen C1, D1 usw. zu schreiben:

    For Each pi In ActiveSheet.PivotTables("DeinePivotTabelle").PivotFields("DeinFeld").PivotItems
       If pi.Visible Then
           Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1).Value = pi.Name
       End If
    Next pi
  2. Verwendung von Excel Slicern: Wenn du Slicer in deiner Pivottabelle verwendest, kannst du die sichtbaren Werte ebenfalls auslesen, indem du die Slicer-Objekte in deinem VBA-Code ansprechen.


Tipps für Profis

  • Optimierung der Performance: Wenn du mit großen Datenmengen arbeitest, achte darauf, den Code so zu gestalten, dass er nur sichtbare Items abruft, um die Ausführungsgeschwindigkeit zu erhöhen.
  • Verwende Excel-Datenmodelle: Wenn du Power Pivot nutzt, stelle sicher, dass dein VBA-Code auf die spezifischen Eigenschaften von Power Pivot-Tabellen abgestimmt ist.
  • Zellen dynamisch anpassen: Statt fester Zellreferenzen kannst du dynamische Bereiche verwenden, um deine Daten flexibler zu gestalten.

FAQ: Häufige Fragen

1. Kann ich die Filterwerte auch ohne VBA auslesen?
Ja, du kannst die Funktion GETPIVOTDATA() verwenden, um Werte direkt aus der Pivottabelle anzuzeigen.

2. Was tun, wenn mein Makro nicht funktioniert?
Überprüfe, ob alle Namen der Pivot-Felder korrekt sind und ob das Makro im richtigen Modul eingefügt wurde.

3. Ist es möglich, die Daten automatisch zu aktualisieren?
Ja, du kannst das Ereignismakro so einstellen, dass es beim Öffnen der Datei oder beim Aktualisieren der Pivottabelle automatisch ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige