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

Forumthread: Aktivierte Filter eines Pivotfeldes anzeigen

Aktivierte Filter eines Pivotfeldes anzeigen
15.07.2014 13:45:40
Niko
Hallo zusammen,
ich suche einen Weg, um die aktivierten Filter eines Feldes in einer Zelle auszugeben. Wenn ich mehr als zwei Werte aktiviere, wird (mehrere Elemente) angezeigt. Allerdings will ich hier die Werte angezeigt bekommen. Ich hoffe ihr könnte mir weiterhelfen. Als Beispiel habe ich hier eine Datei. Wenn ich in Zelle A1 zwei Kriterien auswähle, sollen diese Kriterien aufgelistet werden. (Dementsprechend bei allen Kriterien alle auflisten)
https://www.herber.de/bbs/user/91510.xlsx
Viele Grüße

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
15.07.2014 17:21:39
fcs
Hallo Niko,
das kann man meines Wissens nur per Makro umsetzen.
Darfs du in deiner Datei Makros einbauen?
In deiner Beispieldatei hast du keinen Pivotbericht sondern einen Autofilter eingerichtet. Für was willst du denn jetzt einen Filter auswerten?
Gruß
Franz

AW: Aktivierte Filter eines Pivotfeldes anzeigen
16.07.2014 09:03:23
Niko
Hallo,
ein Makro wäre grundsätzlich erlaubt. Hier in der Beispieldatei habe ich die Pivottabelle jetzt nicht drin.
In der Pivottabelle kann ich ja den Berichtsfilter einstellen. Man soll nachher halt in der Überschrift für die Pivottabelle sehen, welche Filter eingestellt worden sind. Wenn ich nur das Feld verlinke, wird mir bei mehreren aktivierten Filtern natürlich nur angezeigt, was in dem Feld steht (mehrere Elemente oder alle). Ich möchte allerdings, dass die aktivierten Filter aufgelistet werden.
Habe recherchiert und nichts zu gefunden. Und meine Makro-Kenntnisse sind nicht die Besten :-)
Viele Grüße
Viele Grüße

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
16.07.2014 09:12:21
Niko
Hallo,
ein Makro wäre grundsätzlich erlaubt. Hier in der Beispieldatei habe ich die Pivottabelle jetzt nicht drin.
In der Pivottabelle kann ich ja den Berichtsfilter einstellen. Man soll nachher halt in der Überschrift für die Pivottabelle sehen, welche Filter eingestellt worden sind. Wenn ich nur das Feld verlinke, wird mir bei mehreren aktivierten Filtern natürlich nur angezeigt, was in dem Feld steht (mehrere Elemente oder alle). Ich möchte allerdings, dass die aktivierten Filter aufgelistet werden.
Habe recherchiert und nichts zu gefunden. Und meine Makro-Kenntnisse sind nicht die Besten :-)
Viele Grüße

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
16.07.2014 13:20:30
fcs
Hallo Niko,
irgendwo im Pivot-Objektmodell hat Microsoft noch einen Bug eingebaut für das Item "(Leer")".
Dieses läßt sich nicht immer korrekt auswerten oder es wird "(blank)". Man könnte zwar noch ein paar Klimmzüge machen und die "DataRange" des Berichtsfeldes auswerten, aber 100% kriegt man da auch nicht hin und man muss dann auch noch die Sprache berücksichtigen.
Nachfolgend eine Function, die das per Parameter übergebene Feld auswertet, und ein Ereignismakro, das nach einer Aktualisierung der Pivottabelle gestartet wird.
Gruß
Franz
'Erstellt unter Excel 2010
'Code in einem allgemeinen Modul
Function fncBerichtsfilter(pvTable As PivotTable, strFieldName As String, _
Optional strSep As String = " | ") As String
'Zusammenstellen der selectierten Items im 1. Berichtsfeld eines Pivot-Tabellenberichts
Dim pvField As PivotField, pvItem As PivotItem
'Seitenfeld-Filter auslesen
Set pvField = pvTable.PageFields(strFieldName)
With pvField
fncBerichtsfilter = ""
If .EnableMultiplePageItems = True Then
For Each pvItem In .PivotItems
If Not IsError(pvItem.SourceName) Then
If pvItem.Visible = True Then
If fncBerichtsfilter = "" Then
fncBerichtsfilter = pvItem.Caption
Else
fncBerichtsfilter = fncBerichtsfilter & strSep & pvItem.Caption
End If
End If
End If
Next
Else
If .CurrentPage = "(Alle)" Or .CurrentPage = "(All)" Then
For Each pvItem In .PivotItems
If fncBerichtsfilter = "" Then
fncBerichtsfilter = pvItem.Caption
Else
fncBerichtsfilter = fncBerichtsfilter & strSep & pvItem.Caption
End If
Next
Else
fncBerichtsfilter = .CurrentPage.Caption
End If
End If
End With
End Function
'Ereignis-Makro unter dem Modul der Tabelle mit dem Pivotbericht
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:=";")
End With
End Sub
'PS. sind mehrere Pivottabellen auf dem Tabellenblatt, dann muss _
ggf. eine Prüfung auf den Namen der Pivot-Tabelle eingebaut werden

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
17.07.2014 10:18:49
Niko
Hallo Franz,
wie soll es mit der Prüfung bei 2 Pivottabellen auf einem Arbeitsblatt gehen?
Im Moment habe ich 1 Sheet mit 2 Pivottabellen untereinander. Die Berichtsfilter gehen von B2:C4 (die 1. Tabelle hat immer die Standardgröße von B7:N14) und von B31:C33 (die 2 Tabelle hat immer eine dynamischer Größe, je nach der Datenbank).
Viele Grüße und danke schonmal für deine Bemühungen.
Niko

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
17.07.2014 11:02:13
fcs
Hallo Niko,
bei mehreren Pivottabellen muss du das Ereignismakro anpassen und ein Select Case -Konstrukt für die Prüfung einbauen.
Für jede Pivottabelle, deren Berichtsfilter in einer Zelle eingetragen werden soll, muss dann eine Case-Zeile vorhanden sein. Beim Namen auf genaue Schreibweise achten - am einfachsten ist es den im Menü PivotTable-Tools --- Optionen angezeigten Namen zu kopieren.
Gruß
Franz
Beispiel:
'Ereignis-Makro unter dem Modul der Tabelle mit dem Pivotbericht
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
With Me
Select Case Target.Name
Case "PivotTable 1"
'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:=";")
Case "Pivot001"
.Range("D4").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Währung", strSep:=";")
Case Else
'do nothing
End Select
End With
End Sub

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
18.07.2014 09:55:19
Niko
Hallo Franz,
wie genau kann ich die Funktion =fncBerichtsfilter nun benutzen? Wenn ich die Formel benutze und ein entsprechendes Feld im Berichtsfilter auswähle, kommt #WERT. (Für eine Pivottabelle gibt es 3 Berichtsfilter mit Name, Departement und C/O)
Gruß
Niko

AW: Aktivierte Filter eines Pivotfeldes anzeigen
18.07.2014 12:04:44
fcs
Hallo Niko,
die bisherige Function funktioniert nur in Verbindung mit dem entsprechenden Ereignismakro/Makro, da als Parameter auch das PivotTable-Objekt übergeben werden muss.
Wenn du eine entsprechende Funktion in einer Tabellenformel nutzen willst, dann muss die Function etwas umgebaut werden und die auszuwertende Pivottabelle muss indirekt ermitelt werden.
Nachfolgend eine entsprechend modifizierte Function. Die ensprechende Formel in der Tabelle ist dann:
=fncBerichtsfilter_1(A5;";")

wobei A5 dann die Zelle mit dem Berichtsfeld ist.
Gruß
Franz
'Erstellt unter Excel 2010
'Code in einem allgemeinen Modul
Function fncBerichtsfilter_1(rngBerichtsfeld As Range, _
Optional strSep As String = " | ") As String
'Zusammenstellen der selektierten Items im Berichtsfeld eines Pivot-Tabellenberichts
'rngBerichtsfeld = Zelle mit einem Feldnamen im Berichtsfeld eines Pivotberichtes
'strSep          = Trenntext zwischen den ermittelten Filterwerten (Optional, Vorgabe = " | "
Dim pvTable As PivotTable, pvField As PivotField, pvItem As PivotItem, _
pvPageRange As Range
On Error GoTo Fehler
fncBerichtsfilter_1 = ""
'zur Zelle mit dem Berichtsfeld gehörigen Pivotbericht ermitteln
Set pvTable = rngBerichtsfeld.PivotTable
'Seitenbereich setzen
Set pvPageRange = pvTable.PageRange
'prüfen ob Formel-Zelle in 1. Spalte des Seitenbereiches
If Application.Intersect(rngBerichtsfeld, pvPageRange.Columns(1)) Is Nothing Then
fncBerichtsfilter_1 = "Zelle ist kein Pivottabellen-Berichtsfeld"
Exit Function
End If
'Seitenfeld-Filter auslesen
Set pvField = pvTable.PageFields(rngBerichtsfeld.Text)
With pvField
fncBerichtsfilter_1 = ""
If .EnableMultiplePageItems = True Then
For Each pvItem In .PivotItems
If Not IsError(pvItem.SourceName) Then
If pvItem.Visible = True Then
If fncBerichtsfilter_1 = "" Then
fncBerichtsfilter_1 = pvItem.Caption
Else
fncBerichtsfilter_1 = fncBerichtsfilter_1 & strSep & pvItem.Caption
End If
End If
End If
Next
Else
If .CurrentPage = "(Alle)" Or .CurrentPage = "(All)" Then
For Each pvItem In .PivotItems
If fncBerichtsfilter_1 = "" Then
fncBerichtsfilter_1 = pvItem.Caption
Else
fncBerichtsfilter_1 = fncBerichtsfilter_1 & strSep & pvItem.Caption
End If
Next
Else
fncBerichtsfilter_1 = .CurrentPage.Caption
End If
End If
End With
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 1004
If pvTable Is Nothing Then
fncBerichtsfilter_1 = "Zelle ist außerhalb Pivottabelle"
Exit Function
End If
If pvPageRange Is Nothing Then
fncBerichtsfilter_1 = "Pivot-Tabelle hat keinen Seitenbereich"
Exit Function
End If
Case Else
fncBerichtsfilter_1 = "Fehler: " & .Number
End Select
End With
End Function

Anzeige
AW: Aktivierte Filter eines Pivotfeldes anzeigen
21.07.2014 15:40:05
Niko
Vielen Dank!! Es funktioniert. Tschuldigung wegen der erst späten Antwort.
Viele Grüße :-)
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aktivierte Filter eines Pivotfeldes anzeigen


Schritt-für-Schritt-Anleitung

Um die aktivierten Filter eines Pivotfeldes in einer Zelle anzuzeigen, gehe wie folgt vor:

  1. Öffne Excel und lade deine Datei mit der Pivot-Tabelle.

  2. Öffne den VBA-Editor durch Drücken von ALT + F11.

  3. Erstelle ein neues Modul: Rechtsklicke auf "VBAProject (deineDatei.xlsm)" > Einfügen > Modul.

  4. Füge den folgenden VBA-Code ein:

    'Erstellt unter Excel 2010
    Function fncBerichtsfilter(pvTable As PivotTable, strFieldName As String, _
    Optional strSep As String = " | ") As String
       Dim pvField As PivotField, pvItem As PivotItem
       Set pvField = pvTable.PageFields(strFieldName)
       With pvField
           fncBerichtsfilter = ""
           If .EnableMultiplePageItems = True Then
               For Each pvItem In .PivotItems
                   If pvItem.Visible Then
                       fncBerichtsfilter = fncBerichtsfilter & strSep & pvItem.Caption
                   End If
               Next
           Else
               fncBerichtsfilter = .CurrentPage.Caption
           End If
       End With
    End Function
  5. Füge ein Ereignismakro hinzu: Klicke im VBA-Editor auf das Arbeitsblatt mit deiner Pivot-Tabelle und füge folgenden Code ein:

    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
       With Me
           .Range("B2").Value = fncBerichtsfilter(pvTable:=Target, _
           strFieldName:="Feld01", strSep:=";")
       End With
    End Sub
  6. Schließe den VBA-Editor und kehre zu Excel zurück.

  7. Aktualisiere die Pivot-Tabelle. Die aktivierten Filter erscheinen nun in Zelle B2.


Häufige Fehler und Lösungen

  • Fehler: #WERT!
    Dieser Fehler kann auftreten, wenn du versuchst, die Funktion ohne das Ereignismakro zu nutzen. Stelle sicher, dass beide Teile des Codes korrekt implementiert sind.

  • Excel filtert nicht alle Elemente an:
    Überprüfe, ob die Pivot-Tabelle korrekt konfiguriert ist. Manchmal müssen die Filtereinstellungen in der Pivot-Tabelle angepasst werden.

  • Makro wird nicht ausgeführt:
    Stelle sicher, dass Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen.


Alternative Methoden

Eine Möglichkeit, die aktivierten Filter anzuzeigen, besteht darin, die Pivot-Tabelle in eine Tabelle zu konvertieren und die Filter über die FILTER-Funktion auszulesen. Dies ist jedoch nur in neueren Excel-Versionen möglich.


Praktische Beispiele

Angenommen, du hast eine Pivot-Tabelle, die Verkaufsdaten enthält. Um die aktivierten Filter anzuzeigen:

  1. Wähle mehrere Produkte im Berichtsfilter aus.
  2. Die Zelle B2 zeigt nun alle aktiven Filter aus der Pivot-Tabelle an, getrennt durch ein Semikolon.

Ein Beispiel für den verwendeten Code, um die Filterwerte anzuzeigen:

.Range("B2").Value = fncBerichtsfilter(pvTable:=Target, _
strFieldName:="Produkt", strSep:=";")

Tipps für Profis

  • Anpassung für mehrere Pivot-Tabellen:
    Wenn du mehrere Pivot-Tabellen auf einem Arbeitsblatt hast, kannst du das Ereignismakro anpassen, um spezifische Filter für jede Tabelle zu definieren. Verwende Select Case-Befehle, um die korrekten Zellen anzugeben.

  • Verwendung von benutzerdefinierten Separatoren:
    Du kannst den Separator in der Funktion anpassen, um die Darstellung zu verbessern (z.B. durch Kommas oder Strichpunkte).


FAQ: Häufige Fragen

1. Wie kann ich die Filterwerte in einer anderen Zelle anzeigen?
Du kannst die Zelle, in der die Filterwerte angezeigt werden sollen, einfach im Ereignismakro anpassen. Ändere .Range("B2") in die gewünschte Zelle.

2. Funktioniert das auch in Excel Online?
Leider sind Makros in Excel Online nicht verfügbar. Du benötigst die Desktop-Version von Excel, um diese Funktionen zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige