Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : その他)
ピボットテーブル更新後、「フィルター」に新たに表れたアイテムにチェックをいれる方法
投稿日時: 20/07/10 13:08:18
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
ピボットテーブル更新後、データが出てきた為「フィルター」項目でこれまで表示されなかったアイテムが表れるようになりました。
 
ただ、そのアイテムにチェックを入れるコードを入れないと、データは存在しているけれどピボットテーブルには表示されない為、この状態を判別してチェックを入れるVBAのコードで苦慮しています。
 
下記コードを使用してチェックをすることも考えましたが、PivotItemsは処理対象以外のアイテムも取ってきてしまうようで、無駄な処理時間がかかると思われ、ワークシート上で表示されているピボットテーブルのアイテム(実際は1つ)だけチェックできないかと考えています。
 
For Each itm In ActiveSheet.PivotTables(1).PivotFields("テストフィールド").PivotItems
                  
Next
 
どなたか、良い知恵をお持ちの方がいらっしゃいましたらアドバイスをいただけると幸いです。
 
宜しくお願い致します。

回答
投稿日時: 20/07/10 21:34:53
投稿者: takesi
回答
投稿日時: 20/07/11 06:21:15
投稿者: simple

・どのようなフィルターを掛けていて
・どのような状態の時に、どのようにしたい、
ということを具体例で示してもらうと、
議論が進めやすいのではないでしょうか。

投稿日時: 20/07/12 08:44:57
投稿者: Alice87

takesi様
 
早速の書き込みありがとうございます。
 
参考になると思ったのですが、こちらでふれられている「フィールドの追加」ではなかった為、今回の件の解決にはつながりませんでした。
 
今後、ピボットテーブルに関するVBAを作成する時の参考にはなりましたので、書き込み感謝しております。

投稿日時: 20/07/12 09:02:47
投稿者: Alice87

simple様
 
書込みありがとうございます。
 
ピボットテーブルのレポートフィルターで、更新後にデータが存在すると”アイテム”(実際作業しているファイルは「経理部」等といった部署名が表示)が表示されるのですが、どこの箇所にもチェックが入っていない状態です。
 
イメージ的には、下記サイトの5の図の状態
http://www4.synapse.ne.jp/yone/excel2010/excel2010_pivot3.html
 
その為、表示された”アイテム”にチェックを入れたいのが今回行いたいことです。
 
チェックを入れる必要がない他の”アイテム”はレポートテーブルに表れないようなので、表れた”アイテム”にチェックが入れられれば大丈夫そうですが、表示されている”アイテム”名を取得してチェックを入れる対象か否か判別できる方法がもしあるならば、その方がより確実なので知りたいと思っています。

回答
投稿日時: 20/07/12 09:52:25
投稿者: simple

参照サイトの5の図ということは、
レポートフィルターの選択肢のことでしょうか。
そうであれば、マクロ記録をとれば、すべての選択肢を選択するコードが得られます。
  
数個レベルでも具体例が示されると思いましたが示されず、また、
>データは存在しているけれどピボットテーブルには表示されない
という事例が想像つかないので、私はここまでです。

回答
投稿日時: 20/07/13 10:20:33
投稿者: mattuwan44

ども。
 
データベースに新しいデータが追加された。
 ↓
ピボットテーブルを更新した。
 ↓
レポートフィルターに今までにない項目が追加された。
 ↓
レポートフィルターは「複数のアイテムを選択」にチェックを入れている。
 ↓
新しく追加された項目も「選択」に含めたい。
 
ということでしょうか?
 
ならば、ウェブ上でピンポイントの情報を探すのは困難ですし、
一言や二言でこうすればいいよというアドバイスは難しいです。
 
まずは、
ピボットテーブルのオブジェクト構造を探るところから始めないといけないかも知れません。
こういうのは、
「マクロの記録」で探れるとは思いますが、やってみましたか?
 
また、選択に含める(あるいは選択に含めない例外)のルールがあれば、
ご説明願います。

投稿日時: 20/07/13 18:58:40
投稿者: Alice87

mattuwan44様
 
書込みありがとうございます。
 
>ピボットテーブルのオブジェクト構造を探るところから始めないといけないかも知れません。
→おっしゃるとおりの方法を思い付き、自己解決しました。
 
【解決方法】
該当の「レポートフィルター」をオブジェクト変数にしたところ、手掛かりになりそうな情報があったので人力で探し、それを元に更新前の状態が更新後にpivotitemを確認する必要があるかフラグをたてて、該当の場合はpivotitemを一つずつチェックする方法で、行いたかった動作ができたので、これで解決にしています。
 
Dim pf As PivotField
〜〜途中割愛〜〜
Set pf = ActiveSheet.PivotTables(1).PivotFields("部門")
                 
 If pf.DataRange.Text = "(すべて)" Then '「(すべて) 」ではない時は、以降の処理不要
    ch_flg = 1 'ピボットテーブル更新後、チェックを入れる必要があるかもしれないのでチェックフラグ付与
End If
                 
  With ActiveSheet
        .PivotTables(1).PivotCache.Refresh
   End With
                 
   'ピボットテーブル更新後、表示されているか確認
   If ch_flg = 1 Then
                       
start_kakko = InStr(ActiveSheet.Name, "(")
finish_kakko = InStr(ActiveSheet.Name, ")")
                           
code = Mid(ActiveSheet.Name, start_kakko + 1, finish_kakko - start_kakko - 1)
     
 For Each itm In ActiveSheet.PivotTables(1).PivotFields("部門").PivotItems
     If InStr(itm, code) > 0 Then
        itm.Visible = True
        GoTo operation_TABLE
    End If
 Next
                       
 End If