Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Pivot Table: Filter auslesen

Pivot Table: Filter auslesen
Jo
Hallo Forum,
ich suche nach einer Möglichkeit, den Berichtsfilter auszulesen und in einer Textbox o.ä. im dazugehörigen PivotChart anzuzeigen.
Wenn nur ein Filterkriterium gesetzt ist reicht es, den Inhalt der Zelle in die Textbox zu schreiben.
Bei mehreren Kriterien steht dort dann aber nur "mehrere Elemente".
Wie kann ich die Elemente selbst auslesen/anzeigen?
Mir geht es darum, die jeweiligen Filterkriterien als zus. Info im Diagramm zu haben.
Oder gibt's dafür noch eine ganz andere Lösung?
Im voraus vielen Dank für Eure Hilfe!!
Grüße
Jo
Anzeige
AW: Pivot Table: Filter auslesen
18.08.2009 15:21:19
fcs
Hallo Jo,
ich kenne keine Formellösung. Deshalb hier eine VBA-Lösung.
Es könnte sein, das man das Textfeld unter Excel 2007 anders behandeln muss als unter Excel 2003.
Gruß
Franz
'Erstellt unter Excel 2003, Windows XP
'Code in einem allgemeinen Modul
Option Explicit
Sub PivotInfosActiveSheet()
Dim objShape As Shape, wks As Worksheet, Diagramm As Chart, _
strTextFeld As String, varPvTab
On Error GoTo Fehler
'  Range("A35")=PivotInfos(pvTable:=ActiveSheet.PivotTables(1))
Select Case ActiveSheet.Name
Case "Diagramm1", "Pivot2" 'Name von Diagram und Tabellenblatts mit Pivotbericht
Set wks = Worksheets("Pivot2") 'Tabellenblatt mit Pivotbericht
Set Diagramm = Charts("Diagramm1") 'zugehöriges Diagramm
strTextFeld = "Textfeld 1" 'Name des Textfelds im Diagramm
varPvTab = 1 'Nummer bzw. Name des Pivottabellenberichts
Case Else
Set wks = Nothing
Set Diagramm = Nothing
End Select
If Not Diagramm Is Nothing And strTextFeld  "" Then
MsgBox PivotInfos(pvTable:=wks.PivotTables(varPvTab))
Set objShape = Diagramm.Shapes(strTextFeld)
objShape.TextFrame.Characters.Text = PivotInfos(pvTable:=wks.PivotTables(varPvTab))
Else
MsgBox "für die PivotTabelle in diesem Blatt gibt es noch " _
& "keine Diagramm/Textfeld-Zuordnung"
End If
Fehler:
With Err
If .Number  0 Then
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & vbLf _
& "Makro funktioniert nur in Tabelle mit Pivottabelle!!"
End If
End With
End Sub
Function PivotInfos(pvTable As PivotTable) As String
'Zusammenstellen der selectierten Items im Pivot-Tabellenbericht
Dim pvField As PivotField, pvItem As PivotItem, bolField1 As Boolean
'Seitenfelder auslesen
bolField1 = False
For Each pvField In pvTable.PageFields
If bolField1 = False Then
PivotInfos = PivotInfos & "Seitenfeld(er)"
bolField1 = True
End If
PivotInfos = PivotInfos & vbLf & pvField.Name & ": " & pvField.CurrentPage
Next
'Zeilenfeld(er) auslesen
bolField1 = False
For Each pvField In pvTable.RowFields
If bolField1 = False Then
PivotInfos = PivotInfos & IIf(PivotInfos = "", "", vbLf) & "Zeilenfelder(er)"
bolField1 = True
End If
PivotInfos = PivotInfos & vbLf & pvField.Name & ": "
If pvField.VisibleItems.Count  pvField.PivotItems.Count Then
PivotInfos = PivotInfos & "Item(s)"
For Each pvItem In pvField.VisibleItems
PivotInfos = PivotInfos & " - " & pvItem.Name
Next
Else
PivotInfos = PivotInfos & "Alle"
End If
Next
'Spaltenfeld(er) auslesen
bolField1 = False
For Each pvField In pvTable.ColumnFields
If bolField1 = False Then
PivotInfos = PivotInfos & IIf(PivotInfos = "", "", vbLf) & "Spaltenfelder(er)"
bolField1 = True
End If
PivotInfos = PivotInfos & vbLf & pvField.Name & ": "
If pvField.VisibleItems.Count  pvField.PivotItems.Count Then
PivotInfos = PivotInfos & "Item(s)"
For Each pvItem In pvField.VisibleItems
PivotInfos = PivotInfos & " - " & pvItem.Name
Next
Else
PivotInfos = PivotInfos & "Alle"
End If
Next
End Function

Mit dem folgenden Makro zusätzlich im Tabellenmodul (Tabelle das Pivotbericht enthält) wird bei jeder aktualisierung des Pivotberichtes auch die Filterinformation aktualisiert.
'Tabellen-Modul
'Erstellt unter Excel 2003, Windows XP
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call PivotInfosActiveSheet
End Sub

Anzeige
AW: Pivot Table: Filter auslesen
18.08.2009 16:02:55
Jo
Wow. Vielen Dank, Franz!
Ich habe das Makro in mein Worksheet kopiert und entsprechend angepasst. Offenbar aber nicht ganz richtig. Leider melder es nur "Fehler 9, Index ausserhalb des gültigen Bereichs". Mein Pivot-Diagramm und -Tabelle sind auf separaten Blättern. Liegt es daran?
O.g. Fehler kommt sowohl bei aktivem Tabellenblatt als auch bei aktivem Diagrammblatt.
Dann bin ich nicht sicher, ob ich den Namen des Diagramms richtig habe. Die Pivottabelle heisst "PivotTable1". Das zeigt mir Excel. Aber den des Diagramms finde ich nicht.
Kannst Du mir noch ein paar Tipps dazu geben?
Danke!
Gruß
Jo
Anzeige
AW: Pivot Table: Filter auslesen
18.08.2009 17:31:43
fcs
Hallo Jo,
bei getrennten Blättern für Pivot-Bericht und Diagramm (übrigens die einfacher zu handhabende Lösung) ist der Name des Diagramms die Bezeichnung, die auf den Registern der einzelnen Blätter steht, genau wie bei Tabellenblättern.
Den Namen der Pivottabelle oder einfacher ihre Zählnummer (=1 wenn nur ein Pivotbericht im Tabellenblatt) trägst du für die Variable varPvTab ein.
Gruß
Franz
Anzeige
AW: Pivot Table: Filter auslesen
19.08.2009 10:51:15
Jo
Hallo Franz,
ich lasse die PivotInfos in eine Zelle neben der Pivottabelle ausgeben (Range(..)=PivotInfos(...)). Klappt auch grundsätzlich.
Allerdings steht dann dort:
Seitenfeld(er)
Feld1: (All)
Feld2: (All)

Obwohl aus Feld1 nur ein Element als Filter gesetzt wurde und aus Feld2 meherere Elemente.
Wie kann das?
Ich hatte es selbst mal mit VisibleItems versucht, klappte aber nicht.
Zusätzlich kommt immer Fehler 9 (Index ausserhalb des gültigen Bereichs), wobei ich nicht sehe,welcher Index da nicht passt.
Das Hineinschreiben in das Diagramm können wir erstmal weglassen. Wenn die ausgewählten Filter in einer Zelle stehen, reicht mir das.
Wäre schön, wenn Du mir nochmal helfen könntest.
Danke!
Gruß
Jo
Anzeige
AW: Pivot Table: Filter auslesen
19.08.2009 13:28:48
fcs
Hallo Jo,
hier die von mir verwendete Beispiel-Datei (Erstellt unter Excel 2003)
https://www.herber.de/bbs/user/63927.xls
Die von dir angegebene Fehlermeldung wird dann angezeigt, wenn Excel bei VBA-Ausführung das Element mit dem angegeben Namen nicht findet.
Gruß
Franz
Anzeige
AW: Pivot Table: Filter auslesen
19.08.2009 14:40:43
Jo
Hallo Franz,
ich bin fast am Ziel. Das Makro läuft jetzt fehlerfrei (hatte einen Tabellennamen falsch angegeben), allerdings simmen die Ergebnisse nur für Zeilen- und Spaltenfelder.
Bei den Seitenfeldern wird immer "(All)" angegeben auch wenn ich nur einen Filter gesetzt habe.
Ansonsten funktioniert das in Deiner Tabelle (Danke!) genau so wie ich das wollte.
In Deiner Tabelle ist es mir aber nicht gelungen, mehrere Filter der Seitenfelder zu setzen, z.B. Test = Test01 und Test03. Entweder nur einer oder alle.
Hier scheint irgendwo ein Unterschied zwischen xl2003 und 2007 zu sein.
Ich habe aber keine Ahnung, wie und wo.
Fällt Dir dazu noch was ein?
Schöne Grüße
Jo
Anzeige
AW: Pivot Table: Filter auslesen
19.08.2009 17:53:28
fcs
Hallo Jo,
die Mehrfach-Auswahl bei den Seitenfeldern scheint neu unter Excel2007 zu sein.
Ich probier das heute Abend nochmals aus, welche Anpassung da nötig ist.
Gruß
Franz
AW: Pivot Table: Filter auslesen
20.08.2009 02:36:44
fcs
Hallo Jo,
die Mehrfachauswahl von Items eines Seitefeldes ist mit Excel2007 neu eingeführt worden.
Leider konnte ich den Visibility-Status der Seitenfelder mit gesetzter Mehrfachauswahl nicht auslesen und so die Liste der ausgewählten Items erstellen.
Merkwürdiger Weise war es mir jedoch möglich per VBA den Visibility-Statuts für einzelne Elemente eines Seitenfeldes zu aktivieren oder deaktivieren. hmmm?
Das einzige was ich per VBA machen kann ist, den Wert "Mehrfachselektion" anzuzeigen, wenn 2 oder mehr (aber nicht alle) Elemente ausgewählt sind. Die Prozedur enthält auch eine Excelversionsprüfung, um ggf. Lauffehler zu vermeiden. Ich konnte aber nicht testen ob dies unter älteren Excelversionen so funktioniert.
Gruß
Franz
  'Seitenfelder auslesen
bolField1 = False
For Each pvField In pvTable.PageFields
If bolField1 = False Then
PivotInfos = PivotInfos & "Seitenfeld(er)"
bolField1 = True
End If
If Val(Application.Version) 

Anzeige
AW: Pivot Table: Filter auslesen
20.08.2009 08:42:30
Jo
Hallo Franz,
das ist kurios. Mit dem neuen Code wird das Filterelement korrekt angezeigt, wenn nur ein Element ausgewählt ist. Soweit OK. Werden 2 oder mehr angewählt, erscheint nur "(Mehrere Elemente)" - leider nicht die Elemente selbst wie bei den Zeilen- und Spaltenfeldern - bzw. "(All)" wenn alle ausgewählt.
Ich fürchte, ich muss damit leben.
Du hast mir aber trotzdem sehr geholfen, danke nochmals!
Warum die Seitenfelder Excel-intern anders als Zeilen- und Spaltenfelder behandelt werden, weiss wohl nur Microsoft.
Herzliche Grüße
Jo
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Pivot Table: Filter auslesen in Excel


Schritt-für-Schritt-Anleitung

Um die Filter einer Pivot-Tabelle auszulesen und diese in einer Textbox oder Zelle anzuzeigen, kannst Du die folgende VBA-Lösung verwenden. Der Code wurde für Excel 2003 erstellt, sollte jedoch auch in neueren Versionen funktionieren, wobei einige Anpassungen notwendig sind.

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11.
  2. Füge ein neues Modul hinzu:

    • Klicke im Projektfenster mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

Option Explicit

Sub PivotInfosActiveSheet()
    Dim objShape As Shape, wks As Worksheet, Diagramm As Chart, _
    strTextFeld As String, varPvTab
    On Error GoTo Fehler

    Select Case ActiveSheet.Name
        Case "Diagramm1", "Pivot2"
            Set wks = Worksheets("Pivot2")
            Set Diagramm = Charts("Diagramm1")
            strTextFeld = "Textfeld 1"
            varPvTab = 1
        Case Else
            Set wks = Nothing
            Set Diagramm = Nothing
    End Select

    If Not Diagramm Is Nothing And strTextFeld <> "" Then
        MsgBox PivotInfos(pvTable:=wks.PivotTables(varPvTab))
        Set objShape = Diagramm.Shapes(strTextFeld)
        objShape.TextFrame.Characters.Text = PivotInfos(pvTable:=wks.PivotTables(varPvTab))
    Else
        MsgBox "Für die PivotTabelle in diesem Blatt gibt es noch " & _
        "keine Diagramm/Textfeld-Zuordnung"
    End If

Fehler:
    With Err
        If .Number <> 0 Then
            MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf & _
            vbLf & "Makro funktioniert nur in Tabelle mit Pivottabelle!!"
        End If
    End With
End Sub

Function PivotInfos(pvTable As PivotTable) As String
    Dim pvField As PivotField, pvItem As PivotItem, bolField1 As Boolean
    bolField1 = False

    For Each pvField In pvTable.PageFields
        If bolField1 = False Then
            PivotInfos = PivotInfos & "Seitenfeld(er)"
            bolField1 = True
        End If
        PivotInfos = PivotInfos & vbLf & pvField.Name & ": " & pvField.CurrentPage
    Next

    ' Zeilenfeld(er) auslesen
    bolField1 = False
    For Each pvField In pvTable.RowFields
        If bolField1 = False Then
            PivotInfos = PivotInfos & IIf(PivotInfos = "", "", vbLf) & "Zeilenfelder(er)"
            bolField1 = True
        End If
        PivotInfos = PivotInfos & vbLf & pvField.Name & ": "
        If pvField.VisibleItems.Count <> pvField.PivotItems.Count Then
            PivotInfos = PivotInfos & "Item(s)"
            For Each pvItem In pvField.VisibleItems
                PivotInfos = PivotInfos & " - " & pvItem.Name
            Next
        Else
            PivotInfos = PivotInfos & "Alle"
        End If
    Next

    ' Spaltenfeld(er) auslesen
    bolField1 = False
    For Each pvField In pvTable.ColumnFields
        If bolField1 = False Then
            PivotInfos = PivotInfos & IIf(PivotInfos = "", "", vbLf) & "Spaltenfelder(er)"
            bolField1 = True
        End If
        PivotInfos = PivotInfos & vbLf & pvField.Name & ": "
        If pvField.VisibleItems.Count <> pvField.PivotItems.Count Then
            PivotInfos = PivotInfos & "Item(s)"
            For Each pvItem In pvField.VisibleItems
                PivotInfos = PivotInfos & " - " & pvItem.Name
            Next
        Else
            PivotInfos = PivotInfos & "Alle"
        End If
    Next
End Function
  1. Füge im Tabellenmodul den folgenden Code hinzu:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Call PivotInfosActiveSheet
End Sub

Häufige Fehler und Lösungen

  • Fehler 9: Index außerhalb des gültigen Bereichs: Dieser Fehler tritt häufig auf, wenn Du den Namen des Diagramms oder der Pivot-Tabelle nicht korrekt angegeben hast. Stelle sicher, dass die Namen exakt mit den Namen im Excel übereinstimmen.

  • "Für diesen Bericht kann keine Zeitachse erstellt werden": Dies kann auftreten, wenn die Datenquelle für die Pivot-Tabelle nicht korrekt formatiert ist. Überprüfe die Datenquelle auf Datumsformate.

  • Pivot-Tabelle Filter funktioniert nicht: Stelle sicher, dass die Filter korrekt gesetzt sind. Manchmal kann es an der Version von Excel liegen, insbesondere bei Mehrfachauswahlen in Seitenfeldern.


Alternative Methoden

Wenn Du eine einfache Lösung ohne VBA bevorzugst, kannst Du die Filter direkt in eine Zelle schreiben, indem Du die GETPIVOTDATA-Funktion verwendest. Diese Funktion ermöglicht es Dir, spezifische Daten aus einer Pivot-Tabelle zu extrahieren, ohne dass Du VBA verwenden musst.

Ein Beispiel für die Verwendung von GETPIVOTDATA:

=GETPIVOTDATA("Wert", "PivotTable1", "Feldname", "Kriterium")

Praktische Beispiele

  1. Anzeige der Filter in Zelle:

    • Du kannst den Code so anpassen, dass die Filterinformationen in eine Zelle geschrieben werden:
      Range("A1").Value = PivotInfos(pvTable:=ActiveSheet.PivotTables(1))
  2. Filter für Diagramme:

    • Um die Pivot-Filterinformationen in ein Diagramm zu integrieren, stelle sicher, dass Du die Textfeldnamen korrekt angegeben hast.

Tipps für Profis

  • VBA Debugging: Nutze die Debug.Print-Anweisung, um Variablen während der Ausführung des Codes zu überwachen. Dies kann helfen, Fehlerquellen schnell zu identifizieren.

  • Excel Version beachten: Sei dir bewusst, dass einige Funktionen, wie die Mehrfachauswahl in Seitenfeldern, neu in Excel 2007 eingeführt wurden. Teste Deinen Code in der entsprechenden Excel-Version.

  • Pivot Filter VBA: Wenn Du regelmäßig mit Pivot-Tabellen arbeitest, könnte es sich lohnen, eigene Makros zu schreiben, um die Effizienz zu steigern.


FAQ: Häufige Fragen

1. Wie kann ich die Filter einer Pivot-Tabelle in Excel auslesen? Verwende das VBA-Makro, um die Filterinformationen auszulesen und in eine Zelle oder ein Textfeld zu schreiben.

2. Warum werden bei Mehrfachauswahl nur "Mehrere Elemente" angezeigt? Das Verhalten ist abhängig von der Excel-Version. In Excel 2007 und neuer ist diese Funktionalität anders implementiert.

3. Was tun, wenn der Pivot-Filter nicht funktioniert? Überprüfe die Filtereinstellungen und die Datenquelle. Manchmal kann auch ein einfaches Schließen und erneutes Öffnen der Datei helfen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige