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

VBA, Pivotfilter alles <>0, Leer, N.N.

Forumthread: VBA, Pivotfilter alles <>0, Leer, N.N.

VBA, Pivotfilter alles <>0, Leer, N.N.
07.04.2020 16:29:40
Georg
Hallo Excel Welt,
hierzu finde ich keinen Ansatz im Forum oder im Netz. Problem: ich bekomme eine fertige Pivotabelle, aus der ich bestimmte Daten rauskopieren muss. Dazu muss ich die Tabelle in erster Linie in einer Spalte filtern und den Filter so setzen, dass alles AUSSER: 0, (Leer) und N.N. gezeigt wird. In der Spalte sind immer wechselnde Einträge und nur die leeren, etc sollen raus. Mit dem Recorder renne ich gegen die Wand, da er die verbleibenden aufzählt und nicht die die raussollen.
Statt dem "...=Array(.." brauche ich etwas wie: "...Array(.." Da meckert VBA aber.
(a, b und c stehen für 0, leer und N.N.)
Sub Makro4()
ActiveSheet.PivotTables("PivotTable1").PivotFields("[PSP_Kurz].[SDM NEU].[SDM NEU]"). _
VisibleItemsList = Array( _
"[PSP_Kurz].[SDM NEU].&[a]", _
"[PSP_Kurz].[SDM NEU].&[b]", _
"[PSP_Kurz].[SDM NEU].&[c]")
End Sub

Wie muss ich das machen?
Danke für eure Hilfe
Gruß Georg
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA, Pivotfilter alles <>0, Leer, N.N.
07.04.2020 20:52:25
Dieter
Hallo Georg,
das könnte z.B. folgendermaßen aussehen:
Sub Filter_setzen()
Dim pf As PivotField
Dim pi As PivotItem
Dim pt As PivotTable
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Pivot")
Set pt = ws.PivotTables("PivotTable1")
Set pf = pt.PivotFields("Unterkapitel")
For Each pi In pf.PivotItems
Debug.Print pi.Name
If pi.Name = "N.N" Or _
pi.Name = CStr(0) Or _
pi.Name = "(blank)" Then
pi.Visible = False
End If
Next pi
End Sub
Der Programmcode ist auf die beigefügte Datei bezogen.
Ggf. müsstest du deine Datei posten (Werte bel. verändert und anonymisiert).
https://www.herber.de/bbs/user/136509.xlsm
Viele Grüße
Dieter
Anzeige
komplizierter als erwartet...
08.04.2020 10:52:00
Georg
Hallo Dieter,
uiii, das ist ja deutlich aufwändiger als erwartet..! Aber vielen Dank - werd ich auf alle Fälle umbauen und aufnehmen.
Gruß Georg
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA für Pivotfilter: Alles außer 0, Leer und N.N. filtern


Schritt-für-Schritt-Anleitung

Um in einer Pivot-Tabelle alles außer 0, Leer und N.N. zu filtern, kannst Du den folgenden VBA-Code verwenden. Dieser Code durchläuft die Elemente einer PivotField und setzt die Sichtbarkeit entsprechend.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub Filter_setzen()
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim pt As PivotTable
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("Pivot") 'Arbeitsblattname anpassen
    Set pt = ws.PivotTables("PivotTable1") 'Pivot-Tabellenname anpassen
    Set pf = pt.PivotFields("Unterkapitel") 'Feldname anpassen

    For Each pi In pf.PivotItems
        If pi.Name = "N.N" Or _
           pi.Name = CStr(0) Or _
           pi.Name = "(blank)" Then
            pi.Visible = False
        End If
    Next pi
End Sub
  1. Passe den Namen des Arbeitsblatts und der Pivot-Tabelle entsprechend Deiner Datei an.
  2. Schließe den VBA-Editor und führe das Makro aus.

Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“

    • Lösung: Überprüfe, ob der Name des Arbeitsblatts und der Pivot-Tabelle korrekt sind.
  • Fehler: „PivotField nicht gefunden“

    • Lösung: Stelle sicher, dass der Name des PivotFields exakt mit dem in der Pivot-Tabelle übereinstimmt.
  • VBA gibt einen Laufzeitfehler aus

    • Lösung: Überprüfe die Daten in der Pivot-Tabelle, um sicherzustellen, dass es keine unerwarteten Werte gibt.

Alternative Methoden

Eine Alternative zum VBA-Filter wäre die manuelle Filterung direkt in Excel:

  1. Klicke auf den Dropdown-Pfeil der Pivot-Tabelle.
  2. Wähle „Label-Filter“ und dann „Benutzerdefinierter Filter“.
  3. Setze die Filterbedingungen: Wähle „ist ungleich“ und füge die Werte 0 und N.N. hinzu.

Diese Methode ist jedoch weniger flexibel und erfordert manuelle Anpassungen.


Praktische Beispiele

Angenommen, Du hast eine Pivot-Tabelle mit Verkaufsdaten. Du möchtest alle Einträge, die 0 oder leer sind, ausblenden. Der oben angegebene VBA-Code filtert diese Einträge effektiv.

Wenn Du die Pivot-Tabelle nach einem bestimmten Kriterium filtern möchtest, kannst Du den If-Befehl im Code entsprechend anpassen.

Beispiel: Um nur Werte größer als 100 anzuzeigen, könnte die Bedingung so aussehen:

If CInt(pi.Value) <= 100 Then
    pi.Visible = False
End If

Tipps für Profis

  • Verwende die Debug.Print-Anweisung, um die Namen der PivotItems während der Ausführung zu überwachen.
  • Speichere regelmäßig Deine Arbeit, insbesondere nach umfangreichen Änderungen im VBA-Code.
  • Experimentiere mit dem Recorder, um den VBA-Code für andere Filter zu generieren, und passe ihn an Deine Bedürfnisse an.

FAQ: Häufige Fragen

1. Wie filtere ich mehrere Werte gleichzeitig?
Du kannst mehrere Bedingungen im If-Statement kombinieren, um mehrere Werte auszuschließen.

2. Kann ich den Filter automatisch anwenden, wenn die Daten aktualisiert werden?
Ja, Du kannst das Makro in das Worksheet-Change-Ereignis einfügen, um die Filterung automatisch auszuführen, wenn die Daten aktualisiert werden.

3. Wie kann ich die Sichtbarkeit wiederherstellen?
Um alle Elemente wieder sichtbar zu machen, kannst Du eine Schleife erstellen, die pi.Visible = True für jedes PivotItem setzt.

4. Gibt es eine Möglichkeit, die Pivot-Tabelle nach dem Filtern automatisch einzuklappen?
Ja, Du kannst pt.PivotFields("Feldname").ShowDetail = False verwenden, um die Pivot-Tabelle nach dem Filtern einzuklappen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige