- ベストアンサー
ExcelVBA ピボットグラフのページアイテム取得
ピボットグラフのページフィールドアイテムの選択を、ツールバーのボタンクリックで順番に選択できるマクロを作成したいと思っています。 またこのツールバーを、データ範囲の違う複数のピボットグラフで利用したいと思っています。 (ページフィールドの項目名は固定されていますが、アイテム数が変動します。データアイテムや系列フィールドも可変です。) ページフィールドのアイテム切り替えをマクロ記録でコードにすると下記のとおりでした。 ActiveChart.PivotLayout.PivotTable.PivotFields("ページフィールド").CurrentPage = "フィールド1" これを利用するために、対象グラフを元にページフィールドのアイテム一覧を取得したいのですが可能でしょうか? また、ほかに良い方法がありましたらぜひ情報をいただきたいです。 Excelは2003を利用しています。宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 対象グラフを元にページフィールドのアイテム一覧を取得したいのですが > 可能でしょうか? 可能です。下記は イミディエイトウインドウ に結果を表示させてます。 Sub SampleProc() Dim pvtPfs As PivotFields Dim pvtPf As PivotField Dim pvtItm As PivotItem ' // PageField がない場合もあるのでエラー処理しておく On Error Resume Next Set pvtPfs = ActiveChart.PivotLayout.PivotTable.PageFields On Error GoTo 0 If pvtPfs Is Nothing Then Exit Sub For Each pvtPf In pvtPfs ' // 処理例1 PF 名取得 Debug.Print pvtPf.Name & "------------------------------" ' // 処理例2 PF アイテム取得 For Each pvtItm In pvtPf.PivotItems Debug.Print vbTab; pvtItm.Value Next Next End Sub
その他の回答 (1)
- OtenkiAme
- ベストアンサー率77% (69/89)
こんにちは。 > 対象グラフを元にページフィールドのアイテム一覧を取得したいのですが可能でしょうか? "ページフィールド"のPivotItemsから一つずつNameプロパティで取り出せばいいのではないでしょうか? (例は、VBEのイミディエイトウィンドウに出力しています。イミディエイトウィンドウが表示されていない時は、Ctrl+Gで表示できます) ちなみに CurrentPageプロパティでは、現在のページフィールドしか取り出せません。 Dim PvtFld As PivotField Dim PvtItem As PivotItem Set PvtFld = ActiveChart.PivotLayout.PivotTable.PivotFields("ページフィールド") For Each PvtItem In PvtFld.PivotItems 'イミディエイトウィンドウに"ページフィールド"の各アイテムを出力 Debug.Print PvtItem.Name Next PvtItem Set PvtFld = Nothing その上のツールバーに登録する意図がよくわかりませんが、普通にページフィールドのアイテムを選択させるのでは駄目なのでしょうか? > またこのツールバーを、データ範囲の違う複数のピボットグラフで利用したいと思っています。 たとえ項目名が同じでもアイテムの内容が異なるなら、対象のグラフが変わった時にアイテムを取得し直さないと、Aを選択させようとしてAがなければ選択できないと思いますが、そういう処理は、きちんとお考えでしょうか?意図した結果が得られないマクロを作ってしまうことにならないでしょうか?
お礼
回答ありがとうございました。 こちらでも希望の処理を実現することができました。 >普通にページフィールドのアイテムを選択させるのでは駄目なのでしょうか? アイテム数が多く、アイテムを順番に選択する操作が手間となるためこのような処理となりました。 その他もアドバイスありがとうございます。 今後の参考とさせていただきます。
お礼
回答ありがとうございます。 記載いただいた内容で希望の処理を実現できました。 自分の力では調べ切れなかったので大変助かりました。 また勉強にもなりました。ありがとうございました。