PivotFields / Items gruppieren und umbennen

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von joerg_W.

    PivotFields / Items gruppieren und umbennen

    Hallo liebe VBA-Cracks,

    kurz vor dem WM Spiel heute habe ich eine verzweifelte Frage an Euch, bei der ich hoffe, das Ihr mir die Lösung verraten könnt.

    Excel-Version: 2016

    Ich habe eine Pivot-Tabelle, aus der ich einzelne PivotItems aus einem PivotField auswähle und möchte diese Items im Anschluss dann zu drei Gruppen zusammenfassen.

    Mein bisheriger Code - aufgenommen mit dem VBA Rekorder - sieht so aus:

    Sub PivotFields_auswaehlen()
    'relevante WBS-Elemente anfiltern.
    ActiveSheet.PivotTables("PivotTable3").PivotFields( _
    "[Cost Unit].[Costunit Name].[Costunit Name]").VisibleItemsList = Array( _
    "[Cost Unit].[Costunit Name].&[Apfel]", _
    "[Cost Unit].[Costunit Name].&[Cola]", _
    "[Cost Unit].[Costunit Name].&[Birne]", _
    "[Cost Unit].[Costunit Name].&[Orange]", _
    "[Cost Unit].[Costunit Name].&[Fanta]", _
    "[Cost Unit].[Costunit Name].&[Kohl]", _
    "[Cost Unit].[Costunit Name].&[Gurke]")
    End Sub

    Jetzt möchte ich, dass die Felder Apfel, Birne und Orange zu "Obst" gruppiert werden, die Felder Cola und Fanta zu "Getraenke" und Kohl und Gurke zu "Gemuese".

    Der Makro-Rekorder hat mir folgendes Makro für "Obst" aufgezeichnet.

    Sub test()
    Range("A25,A27,A33").Select
    Selection.Group
    ActiveSheet.PivotTables("PivotTable3").PivotFields( _
    "[Cost Unit].[Costunit Name].[Costunit Name1]").PivotItems( _
    "[Cost Unit].[Costunit Name].[Costunit Name1].[GROUPMEMBER.[Costunit_NameXl_Grp_1]].[Cost Unit]].[Costunit Name]].[All]]]" _
    ).Caption = "Obst"
    end sub

    Mein Problem ist nun, dass die Felder für Apfel, Birne und Orange ihren Zelle wechseln können (aus A25 kann A23 werden, aus A27 A45 usw). Wie schaffe ich es, dass das Makro nach meinen Pivotitems sucht und diese entsprechend gruppiert und die Gruppe auch gleich benennt.

    Außerdem wäre ich Euch sehr dankbar, wenn Ihr mir zeigen könnt, wie man diesen Code vereinfachen kann.

    1000 Dank für Eure Hilfe.

    All den Fussballbegeisterten wünsche ich ein schönes und spannendes Spiel und den anderen einen schönen Abend.

    Jörg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „joerg_W“ ()

    Hallo Jörg,

    hat nicht viel gebracht, Deine Wünsche für den Fußballabend. Nichtsdestotrotz kannst es mal mit folgendem Code probieren. Musst ihn halt für Deine weiteren Gruppen weiterführen:

    PS: Es kann auch nichts schaden, wenn Du auf Dein Worksheet verweist, wenn Du den Code über ein Modul laufen lässt.

    Visual Basic-Quellcode

    1. Sub PivotGruppieren()
    2. Dim Apfel, Birne, Orange As Range
    3. Dim SuchRange As Range
    4. Set SuchRange = Range("A1", Range("A1").End(xlDown)) '<- Hier die Range entsprechend der Position Deiner Pivot anpassen
    5. Set Apfel = SuchRange.Find("Apfel")
    6. Set Birne = SuchRange.Find("Birne")
    7. Set Orange = SuchRange.Find("Orange")
    8. If Not Apfel Is Nothing And Not Birne Is Nothing And Not Orange Is Nothing Then
    9. Range(Apfel, Birne, Orange).Group
    10. PivotTables("PivotTable3").PivotFields("Cost Unit").PivotItems( _
    11. "Gruppe1").Caption = "Obst"
    12. Else
    13. MsgBox "Gruppierung konnte nicht ausgeführt werden!"
    14. End If
    15. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „cry.baby“ ()

    Hallo Cry.Baby,

    sorry das ich mich erst jetzt melde. Ich war einige Tage außer Gefecht gesetzt und bin erst heute wieder im Büro.

    Erstmal tausend Dank für deine erneute Hilfe.

    Setze ich das Makro allerdings ein, bekomme ich bei Zeile 13 "Range" folgende Fehlermeldung:

    Fehler beim Kompilieren:
    Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft


    Ich verstehe nicht was hier schief läuft. Hast du eine Idee wie man diesen Fehler in den Griff bekommt?

    Vielen Dank nochmals, bis bald

    Jörg
    Laut Microsoft heißt es zu der Fehlermeldung wie folgt:

    "1. Überprüfen Sie, ob die Anzahl der von Ihnen angegebenen Argumente mit der im Ziel erforderlichen Anzahl übereinstimmt.

    2. Überprüfen Sie die Eigenschaftenzuweisung."

    Kann es sein, dass Deine Suchbegriffe öfter als 1x in Deiner Pivot-Tabelle vorkommen? Am besten Du lädst mal die Excel-Datei hoch.
    Hallo cry.baby,
    hallo petaod,

    vielen Dank für Eure Hilfe. Ich habe mir die Tabellen nochmal angesehen, da es sich um eine Test-Datei handelt, ging die Prüfung ob der Suchbegriff öfter vorkommt ganz schnell. Dies ist nicht der Fall.
    Im Anschluss habe ich "Range" durch "Union" ersetzt. Hier kommt allerdings die Fehlermeldung dann bei Zeile 15 "Fehler beim Kompilieren | Sub oder Function nicht definiert". Erweitere ich diese Zeile um "Active.Sheet" erscheint eine neue Fehlermeldung nun bei Zeile 17 "Else ohne If"

    Ich kann leider von hier aus keine Dateien hochladen. Von daher habe ich das Quell-Sheet und die Pivot 1:1 übertagen:
    Quelle:
    Blattname "Tabelle1"

    A
    B
    C
    1
    Artikel
    Verkauf_1
    Verkauf_2
    2
    Apfel
    10
    30
    3
    Birne
    20
    20
    4
    Orange
    30
    10

    Daraus wird folgende Pivot:
    Blattname "Tabelle3"
    PivotTable-Name "PivotTable2"

    Den PivotTable-Namen und die Position der Pivot habe ich im Makro entsprechend angepasst.


    A
    B
    C
    1



    2

    3
    Zeilenbeschriftung
    Summe von Verkauf_1
    Summe von Verkauf_2
    4
    Apfel
    10
    30
    5
    Birne
    20
    20
    6
    Orange
    30
    10
    7
    Gesamtergebnis
    60
    60

    Cry.baby hat mich aber noch auf einen ganz anderen Punkt gebracht, den ich vergessen habe zu erwähnen, da ich dachte das müsste über das Makro bereits laufen. Und zwar kann es durchaus vorkommen, dass Apfel, Birne oder Orange öfters in der Pivot vorkommen. Diese sollen natürlich alle zur Gruppe "Obst" gruppiert werden.

    Habt Ihr hierzu noch Ideen / Lösungsvorschläge?

    Vielen Dank für Eure Hilfe

    Jörg
    Also ich habe folgenden Code getestet und er funktioniert bei mir. Petaod hatte recht; man muss anstelle Range, Union verwenden. Ich habe zudem die Spalte, in der das Obst gesucht wird, als Pivot-Gruppe (PvtGruppe) und die PivotTable als solche deklariert, um den Fehler in Zeile 15 zu beheben. Du musst lediglich den Namen des Feldes (Header) entsprechend deiner Pivot-Tabelle ändern.

    Visual Basic-Quellcode

    1. Sub PivotGruppieren()
    2. Dim Apfel, Birne, Orange As Range
    3. Dim PvtTbl As PivotTable
    4. Dim PvtGruppe As Range
    5. Set PvtTbl = Sheets("Tabelle3").PivotTables("PivotTable2")
    6. Set PvtGruppe = PvtTbl.PivotFields("Zeilenbeschriftung").DataRange '<- hier den Namen der Spalte anstelle von "Zeilenbeschriftung" eintragen
    7. Set Apfel = PvtGruppe.Find("Apfel")
    8. Set Birne = PvtGruppe.Find("Birne")
    9. Set Orange = PvtGruppe.Find("Orange")
    10. If Not Apfel Is Nothing And Not Birne Is Nothing And Not Orange Is Nothing Then
    11. Union(Apfel, Birne, Orange).Group
    12. PvtTbl.PivotFields("Zeilenbeschriftung").PivotItems( _
    13. "Gruppe1").Caption = "Obst"
    14. Else:
    15. MsgBox "Gruppierung konnte nicht ausgeführt werden!"
    16. End If
    17. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „cry.baby“ ()