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

Forumthread: Filter bei Pivot-Tabellen über VBA

Filter bei Pivot-Tabellen über VBA
26.07.2017 20:23:30
Stefan
Hallo Zusammen,
ich hoffe Ihr könnt mir einmal mehr helfen.
Folgendes:
Ich habe eine Pivot-Tabelle mit mehreren Daten (aus mehreren Monaten - Umsatz, Kosten etc.).
Ich benötige einen VBA-Code, der im Filter der Monate immer nach dem einem bestimmten Monat sucht, den ich im Code entsprechend festlege. Bspw. Juni.
Bei jedem neuen Monat gibt es eine neue Datei.
Ich würde dann nur den Code kopieren und entsprechend Juni in Juli verwandeln.
Später vielleicht auch mehrere Monate.
Könnt Ihr mir dabei bitte helfen?
Wenn ich es über den Rekorder versuche, gibt er mir immer nur die anderen "Monate = False" aus, aber nie den Monat der schlicht "true" sein soll, so dass ich letztlich nur den aktuellen Monat ändern müsste.
Oder gibt es sogar noch eine schickere Lösung, wie bspw. ein Eingabefeld?
Bin leider nicht so stark in VBA-Programmierung und hoffe es war einigermaßen verständlich.
Vielen Dank für eure Hilfe.
Ich wäre Euch sehr dankbar für gute Ideen.
Beste Grüße und schönen Abend
Stefan
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Würde Dir da nicht ein Datenschnitt reichen?
27.07.2017 10:43:07
Michael
Hallo Stefan!
Schau Dir doch mal die Pivot-Funktion "Datenschnitt" an - da brauchst Du gar kein VBA und kannst per Klick die jeweiligen Monatsdaten anzeigen lassen (sofern die Pivot-/Datenstruktur passt).
LG
Michael
AW: Würde Dir da nicht ein Datenschnitt reichen?
27.07.2017 17:07:59
Stefan
Hallo Michael,
erstmal vielen Dank für deinen Vorschlag.
Leider geht es beim Datenschnitt nicht ganz um das wonach ich letztendlich Suche. Aber vielleicht kannst Du mir bei untenstehendem Code weiterhelfen.
Wenn ich der Pivot-Tabelle über den VBA-Code sagen möchte er soll mir bspw. aus der Monatsauswahl Januar, Februar, März und April nur den Februar wiedergeben soll und ich das über den Rekorder aufzeichne kommt folgendes Ergebnis:
ActiveSheet.PivotTables("PivotTable3").PivotFields("Monat").CurrentPage = _
"(All)"
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Monat")
.PivotItems("Januar").Visible = False
.PivotItems("März").Visible = False
.PivotItems("April").Visible = False
End With
Die Bedeutung ist klar, es werden alle Kriterien ausgeschlossen mit False bzw. wo keine Haken beim aufzeichnen gesetzt wurden.
Geht das auch andersherum, dass ich im Code sagen kann suche nur das Kriterium Februar?
So etwas wäre super und würde mich sehr viel weiterbringen.
Besten Dank!!
Grüße
Stefan
Anzeige
AW: Würde Dir da nicht ein Datenschnitt reichen?
01.08.2017 09:54:31
Michael
Hallo!
es werden alle Kriterien ausgeschlossen mit False bzw. wo keine Haken beim aufzeichnen gesetzt wurden. Geht das auch andersherum, dass ich im Code sagen kann suche nur das Kriterium Februar?
Das Prinzip ist in beiden Fällen das Gleiche, wie auch schon von Dir (per Makrorekorder) aufgezeigt: Geh alle PivotItems des jeweiligen PivotFelds durch und setze entsprechend True oder False. Das sieht dann als gesäuberter, erweiterter Makro-Rekorder-Code so aus (schematisch, Blattname noch anpassen):
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle2")
Dim p As PivotTable: Set p = Ws.PivotTables("PivotTable3")
Dim f As PivotField: Set f = p.PivotFields("Monat")
Dim i As PivotItem, s$
s = "Februar"
With f
For Each i In .PivotItems
If i.Name  s Then
i.Visible = False
Else:
i.Visible = True
End If
Next
End With
End Sub
Kommst Du damit hin?
LG
Michael
Anzeige
AW: Würde Dir da nicht ein Datenschnitt reichen?
01.08.2017 11:00:58
Stefan
Hallo Michael,
das ist schon sehr gut.
Vielen Dank Dir.
Kannst Du mir noch sagen, wie eine Mehrfachauswahl aussehen könnte, wenn ich bspw. neben dem Februar, auch noch den Januar und den August im Filter haben möchte?
Ich habe zwar etwas rumprobiert, aber leider nicht hinbekommen.
Vielen Dank.
Beste Grüße
Stefan
Anzeige
AW: Würde Dir da nicht ein Datenschnitt reichen?
01.08.2017 11:18:11
Stefan
Und wenn ich für weitere Pivot-Felder filtern möchte, dann ist letztlich nur oben einzutragen bspw.
Dim z As PivotField: Set z = p.PivotFields("Region")
Und den Code entsprechend anzupassen?
Danke nochmal!!
AW: Würde Dir da nicht ein Datenschnitt reichen?
01.08.2017 11:24:09
Michael
Hallo!
Bzgl. einer mehrfachen Monatsauswahl (wie bspw. Januar, Februar, August) würde ich den Code leicht modifizieren, etwa:
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Tabelle2")
Dim p As PivotTable: Set p = Ws.PivotTables("PivotTable3")
Dim f As PivotField: Set f = p.PivotFields("Monat")
Dim i As PivotItem
With f
For Each i In .PivotItems
Select Case i.Name
Case Is = "Januar", "Februar", "August"
i.Visible = True
Case Else
i.Visible = False
End Select
Next
End With
End Sub
Zu Deiner zweiten Frage: Ja!
LG
Michael
Anzeige
AW: Würde Dir da nicht ein Datenschnitt reichen?
02.08.2017 15:06:56
Stefan
Hallo Michael,
das klappt überragend!
Perfekt!
Vielen Dank Dir für die Mühe!
Beste Grüße
Stefan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Pivot-Filter in Excel mit VBA effektiv einsetzen


Schritt-für-Schritt-Anleitung

Um einen Pivot-Filter in VBA zu setzen, folge diesen Schritten:

  1. Öffne Excel und lade die Arbeitsmappe mit deiner Pivot-Tabelle.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu:
    • Klicke mit der rechten Maustaste auf „VBAProject (deineArbeitsmappe)“.
    • Wähle „Einfügen“ > „Modul“.
  4. Kopiere den folgenden VBA-Code in das Modul:
Sub SetPivotFilter()
    Dim Wb As Workbook
    Set Wb = ThisWorkbook
    Dim Ws As Worksheet
    Set Ws = Wb.Worksheets("Tabelle2") ' Passe den Blattnamen an
    Dim p As PivotTable
    Set p = Ws.PivotTables("PivotTable3") ' Passe den Pivot-Tabellen-Namen an
    Dim f As PivotField
    Set f = p.PivotFields("Monat") ' Passe das Pivot-Feld an
    Dim i As PivotItem
    Dim s As String
    s = "Februar" ' Monat, den du filtern möchtest

    With f
        For Each i In .PivotItems
            If i.Name <> s Then
                i.Visible = False
            Else
                i.Visible = True
            End If
        Next
    End With
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, um den Filter zu setzen.

Häufige Fehler und Lösungen

  • Fehler: „PivotField nicht gefunden“

    • Stelle sicher, dass der Name des Pivot-Felds exakt mit dem in der Pivot-Tabelle übereinstimmt.
  • Fehler: „PivotItem sichtbar machen funktioniert nicht“

    • Überprüfe, ob die Pivot-Tabelle korrekt aktualisiert wurde. Manchmal kann es helfen, die Tabelle zu aktualisieren, bevor du die Sichtbarkeit von PivotItems änderst.
  • Wertefilter funktioniert nicht

    • Wenn du Werte filtern möchtest, verwende PivotFilters anstelle von Visible. Beispiel:
p.PivotFields("Umsatz").PivotFilters.Add2 Type:=xlValueEquals, Value1:=1000

Alternative Methoden

Eine alternative Methode zum Filtern von Pivot-Tabellen ist die Verwendung des Datenschnitts. Dies ermöglicht dir, die Daten visuell zu filtern, ohne VBA zu verwenden. Du kannst einen Datenschnitt hinzufügen, indem du:

  1. Auf die Pivot-Tabelle klickst.
  2. Im Menü „PivotTable-Analyse“ auf „Datenschnitt einfügen“ klickst.
  3. Die gewünschten Felder auswählst und auf „OK“ klickst.

Mit einem Datenschnitt-Suchfeld kannst du auch eine Mehrfachauswahl aktivieren.


Praktische Beispiele

  1. Einzelner Monatsfilter:

    Verwende den vorherigen VBA-Code, um nur den Februar anzuzeigen.

  2. Mehrfachauswahl im Filter:

    Um mehrere Monate (z. B. Januar, Februar, August) sichtbar zu machen, passe den Code an:

Select Case i.Name
    Case Is = "Januar", "Februar", "August"
        i.Visible = True
    Case Else
        i.Visible = False
End Select
  1. Filter für andere Pivot-Felder:

    Um weitere Felder zu filtern, füge einfach eine neue Zeile im Code hinzu:

Dim z As PivotField: Set z = p.PivotFields("Region")

Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler frühzeitig zu erkennen.

  • Verwende Fehlerbehandlung in deinen VBA-Skripten, um unerwartete Probleme zu vermeiden:

On Error Resume Next
' Dein Code hier
On Error GoTo 0
  • Halte deine Pivot-Tabelle regelmäßig aktualisiert, um sicherzustellen, dass alle Daten korrekt gefiltert werden.

FAQ: Häufige Fragen

1. Wie kann ich einen Filter in einer Pivot-Tabelle über VBA setzen? Du kannst den Filter mit dem oben beschriebenen VBA-Code setzen, indem du die Sichtbarkeit der PivotItems entsprechend anpasst.

2. Was ist ein Datenschnitt und wie wird er verwendet? Ein Datenschnitt ist ein visuelles Steuerelement, das dir erlaubt, Daten in einer Pivot-Tabelle einfach zu filtern. Du kannst mehrere Elemente gleichzeitig auswählen.

3. Kann ich mehrere Filter mit VBA setzen? Ja, indem du den Code entsprechend anpasst, kannst du mehrere Bedingungen im Filter verwenden.

4. Wie kann ich einen Filter zurücksetzen? Um alle Filter zurückzusetzen, setze die Sichtbarkeit aller PivotItems auf „True“:

For Each i In .PivotItems
    i.Visible = True
Next

Mit diesen Anleitungen bist du gut gerüstet, um Pivot-Filter in Excel über VBA effektiv zu nutzen!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige