ピボットテーブルの備忘録 ③フィルター設定
先日から、マクロによるピボットテーブルの扱いを纏めている(備忘録)。
先日は、普段使用する書式をクラスモジュール内で一まとめにメソッド化することで、実際使用する際のコードを圧縮してみた。
infoment.hatenablog.com
今日は作成したピボットテーブルに、フィルターを設定してみる。
方法としては単純で、指定した文字を含むものを、For Each の繰り返し構文で愚直に表示または非表示化するだけ。
' フィルター設定。 Public Sub SetFilter(page_fields As Variant, _ criteria As String, _ Optional item_visible As Boolean = True) ' フィルターで複数選択を可とする。 Pvt.PivotFields(page_fields).EnableMultiplePageItems = True For Each PvtItem In Pvt.PageFields(page_fields).PivotItems If PvtItem.Name Like "*" & criteria & "*" Then PvtItem.Visible = item_visible Else PvtItem.Visible = Not item_visible End If Next End Sub
ポイントは、
Not item_visible
で、表示 ⇔ 非表示を反転させている点だろうか。
item_visibleはTrueまたはFalseであるため、
- Not True ⇒ False
- Not False ⇒ True
となる。
それでは、先日のピボットテーブルに
- 「カレーの食べ方」は、「せき止め」を含む場合を表示する。
- 「キャリア」は「au」を含む場合を表示しない。
の条件を追加してみよう。
ついでに、クラスモジュールをWithステートメントで初期化する方式で、コードをさらに短くしてみた。
Sub Test() With New VBAProject.PvtTable If .MakePivotTable(ActiveSheet.ListObjects(1)) = False Then MsgBox "ピボットテーブルの作成に失敗しました。" Exit Sub Else ' 各フィールドを設定。 .SetFields xlPageField, "カレーの食べ方", "キャリア" .SetFields xlRowField, "都道府県", "性別" .SetFields xlColumnField, "婚姻" .SetFields xlDataField, 6 .SetFilter "カレーの食べ方", "せき止め", True .SetFilter "キャリア", "au", False .SetFavoriteFormat End If End With End Sub
結果は ↓ こちら。
明日に続きます。
参考まで。