前提・実現したいこと
ピボットテーブルのフィルターにおいて、
あるフィールドのある値がある文字から始まる値で絞りたいです。
VBA実行後は、フィルターの該当する要素にチェックが入った状態としたいです。
・ある要素に格納されているのは数式で別シートから参照している文字列です
・参照先の文字列には値がなく、0と表示される要素もあります
発生している問題
「5*」の値のみ表示(チェックが付いた状態)、
「5*」以外の値は非表示(チェックが外された状態)を望んでいましたが、
「0」のみチェックが外れた状態となり、他の要素はすべてチェックがついていました。
ちなみに、VBAを使わず手動でフィルターを「5*」で検索した場合は問題なく動作します。
該当のソースコード
vba
1For Each pvt In Ws.PivotTables 2 pvt.PivotCache.Refresh 3Next 4 5Set pf = Ws.PivotTables("ピボットテーブル").PivotFields("番号") 6pf.Orientation = xlPageField 7pf.ClearAllFilters 8 9For Each p In pf.PivotItems 10 Select Case True 11 Case p.Value Like "5*" 12 Case Else 13 p.Visible = False 14 End Select 15Next
試したこと
Case文ではなくIf文で試しましたが同様の結果となりました。
vba
1If p.Value Like "5*" Then 2Else 3 p.Visible = False 4End If
全件非表示にするように試してみたところ、
VBA実行後にフィルターの要素を確認してみましたが、
途中まではチェックが外れて非表示となっており、
途中からはチェックが付いたままの状態となり全件非表示にはなりませんでした。
vba
1For i = 1 To pf.PivotItems.count - 1 2 pf.PivotItems(i).Visible = False 3Next
今回の事象に関係ないかもしれませんが、
PivotItemsの数は200件程あり、重複した要素を除くと100件程となります。
上記、VBA実行後は50件までチェックが外れていたイメージです。
vba
1ActiveSheet.PivotTables("ピボットテーブル").PivotFields("番号").CurrentPage = "(All)" 2With ActiveSheet.PivotTables("ピボットテーブル").PivotFields("番号") 3 .PivotItems("12345").Visible = False 4 .PivotItems("23456").Visible = False 5 .PivotItems("34567").Visible = False 6 '以下省略 7End With
また、VBAを使わず手動でフィルターを「5*」で検索した場合のマクロの記録では、
上記の結果となり、「5*」以外の値を明記する必要が生じてしまいます。
補足情報(FW/ツールのバージョンなど)
EXCEL 2016 / Windows10 使用
回答2件
あなたの回答
tips
プレビュー