'ラベルを「文字で」フィルター
With ActiveSheet.PivotTables(1)
.PivotFields("商品").ClearAllFilters
.PivotFields("商品").PivotFilters.Add2 xlCaptionEquals, , "いちご"
End With
'引数の一覧'指定の値に等しい(xlCaptionEquals)'指定の値に等しくない(xlCaptionDoesNotEqual)'指定の値で始まる(xlCaptionBeginsWith)'指定の値で始まらない(xlCaptionDoesNotBeginWith)'指定の値で終わる(xlCaptionEndsWith)'指定の値で終わらない(xlCaptionDoesNotEndWith)'指定の値を含む(xlCaptionContains)'指定の値を含まない(xlCaptionDoesNotContain)'指定の値より大きい(xlCaptionIsGreaterThan)'指定の値以上(xlCaptionIsGreaterThanOrEqualTo)'指定値より小さい(xlCaptionIsLessThan)'指定の値以下(xlCaptionIsLessThanOrEqualTo)'指定の範囲内(xlCaptionIsBetween)'指定の範囲外(xlCaptionIsNotBetween)'ラベルを「数値で」フィルター
With ActiveSheet.PivotTables(1)
.PivotFields("点数").ClearAllFilters
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsGreaterThanOrEqualTo, , 20
End With
'引数の一覧'指定の値より大きい(xlCaptionIsGreaterThan)'指定の値以上(xlCaptionIsGreaterThanOrEqualTo)'指定値より小さい(xlCaptionIsLessThan)'指定の値以下(xlCaptionIsLessThanOrEqualTo)'指定の範囲内(xlCaptionIsBetween)'指定の範囲外(xlCaptionIsNotBetween)'ラベルを「日付で」フィルター
With ActiveSheet.PivotTables(1)
.PivotFields("年").ClearAllFilters
.PivotFields("月").ClearAllFilters
.PivotFields("日付").ClearAllFilters
.PivotFields("日付").PivotFilters.Add2 xlDateBetween, , "2021/9/1", "2021/11/1"
End With
'引数の一覧'指定の値に等しい(xlSpecificDate)'指定の値より前(xlBefore)'指定の値より後(xlAfter)'指定の範囲内(xlDateBetween)'「ラベルの値」をフィルター
With ActiveSheet.PivotTables(1)
.PivotFields("商品").ClearAllFilters
.PivotFields("商品").PivotFilters.Add2 xlValueIsGreaterThanOrEqualTo, .PivotFields("合計 / 売上"), 1400
End With
'引数の一覧'指定の範囲に等しい(xlValueEquals)'指定の値に等しくない(xlValueDoesNotEqual)'指定の値より大きい(xlValueIsGreaterThan)'指定の値以上(xlValueIsGreaterThanOrEqualTo)'指定の値より小さい(xlValueIsLessThan)'指定の値以下(xlValueIsLessThanOrEqualTo)'指定の範囲内(xlValueIsBetween)'指定の範囲外(xlValueIsNotBetween)
では、解説していきます。
VBAでピボットテーブルのラベルを文字でフィルターする
VBAで、ピボットテーブルのラベルを「文字」でフィルターしてみます。
フィルターする箇所
フィルターする箇所は、ここです。
「ラベル」をフィルターしたい
では、フィルターしてみます。
ラベルを文字でフィルターする
「商品」ラベルを「文字」でフィルターしてみます。
「商品」ラベルでフィルターする
VBAコードは、こんな感じになります。
Sub TEST1()
With ActiveSheet.PivotTables(1)
'「商品」ラベルを「いちご」でフィルター
.PivotFields("商品").PivotFilters.Add2 xlCaptionEquals, , "いちご"
End With
End Sub
Sub TEST2()
With ActiveSheet.PivotTables(1)
.PivotFields("商品").ClearAllFilters 'フィルターを解除'「商品」ラベルを「いちご」でフィルター
.PivotFields("商品").PivotFilters.Add2 xlCaptionEquals, , "いちご"
End With
End Sub
では、VBAコードを実行してみます。
VBAでピボットテーブルの「商品」ラベルでフィルターできました。
「支店」ラベルをフィルターする
次は、「支店」ラベルを「文字」でフィルターしてみます。
Sub TEST3()
With ActiveSheet.PivotTables(1)
.PivotFields("支店").ClearAllFilters 'フィルターを解除'「支店」ラベルを「東京」でフィルター
.PivotFields("支店").PivotFilters.Add2 xlCaptionEquals, , "東京"
End With
End Sub
Sub TEST5()
With ActiveSheet.PivotTables(1)
.PivotFields("点数").ClearAllFilters 'フィルター解除'「点数」ラベルを「20以上」でフィルター
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsGreaterThanOrEqualTo, , 20
End With
End Sub
では、VBAコードを実行してみます。
「数値」でフィルターできた
VBAで、ピボットテーブルのラベルを「数値」でフィルターできました。
ラベルのフィルター種類の一覧
ピボットテーブルのラベルを「数値」でフィルターする際の引数の一覧です。
指定の値より大きい(xlCaptionIsGreaterThan)
指定の値以上(xlCaptionIsGreaterThanOrEqualTo)
指定値より小さい(xlCaptionIsLessThan)
指定の値以下(xlCaptionIsLessThanOrEqualTo)
指定の範囲内(xlCaptionIsBetween)
指定の範囲外(xlCaptionIsNotBetween)
VBAコードの例を挙げると、こんな感じになります。
Sub TEST6()
With ActiveSheet.PivotTables(1)
.PivotFields("点数").PivotFilters.Add2 xlCaptionEquals, , 20 '「20」に等しい
.PivotFields("点数").PivotFilters.Add2 xlCaptionDoesNotEqual, , 20 '「20」に等しくない
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsGreaterThan, , 20 '「20」より大きい
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsGreaterThanOrEqualTo, , 20 '「20」以上
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsLessThan, , 20 '「20」より小さい
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsLessThanOrEqualTo, , 20 '「20」以下
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsBetween, , 20, 30 '「20」~「30」の間,
.PivotFields("点数").PivotFilters.Add2 xlCaptionIsNotBetween, , 20, 30 '「20」~「30」の範囲外
End With
End Sub
目的にあったフィルターの引数を使いましょう。
VBAでピボットテーブルの日付をフィルターする
VBAでピボットテーブルの日付をフィルターしてみます。
フィルターする箇所
フィルターする箇所は、ここです。
「日付」でフィルターしたい
では、ピボットテーブルのラベルを「日付」フィルターしてみます。
日付をフィルターする
「日付」ラベルを日付フィルターするVBAコードは、こんな感じになります。
Sub TEST7()
With ActiveSheet.PivotTables(1)
'フィルター解除
.PivotFields("年").ClearAllFilters
.PivotFields("月").ClearAllFilters
.PivotFields("日付").ClearAllFilters
'「2021/9/1」~「2021/11/1」の範囲内でフィルター
.PivotFields("日付").PivotFilters.Add2 xlDateBetween, , "2021/9/1", "2021/11/1"
End With
End Sub
では、VBAコードを実行してみます。
「日付」でフィルターできた
VBAでピボットテーブルのラベルを日付でフィルターできました。
日付のフィルター種類の一覧
日付フィルターする際の、引数の一覧は、こんな感じです。
指定の値に等しい(xlSpecificDate)
指定の値より前(xlBefore)
指定の値より後(xlAfter)
指定の範囲内(xlDateBetween)
VBAコードの例を挙げておくと、こんな感じになります。
Sub TEST8()
With ActiveSheet.PivotTables(1)
.PivotFields("日付").PivotFilters.Add2 xlSpecificDate, , "2021/9/1" '「2021/9/1」に等しい
.PivotFields("日付").PivotFilters.Add2 xlBefore, , "2021/9/1" '「2021/9/1」より前
.PivotFields("日付").PivotFilters.Add2 xlAfter, , "2021/9/1" '「2021/9/1」より後
.PivotFields("日付").PivotFilters.Add2 xlDateBetween, , "2021/9/1", "2021/11/1" '「2021/9/1」と「2021/11/1」の範囲内
End With
End Sub
フィルターする項目で、引数がちょっと変わります。
VBAでピボットテーブルの値をフィルターする
VBAで、ピボットテーブルの「ラベルの値」をフィルターしてみます。
フィルターする箇所
フィルターする箇所は、「ラベルの値」です。
「ラベルの値」をフィルターしたい
では、ピボットテーブルの値をフィルターしてみます。
値をフィルターする
「商品」ラベルの「値」をフィルターしてみます。
「商品」ラベルの「値」をフィルター
VBAコードは、こんな感じです。
Sub TEST9()
With ActiveSheet.PivotTables(1)
.PivotFields("商品").ClearAllFilters 'フィルター解除'「商品」ラベルの「値」を「1400以上」でフィルター
.PivotFields("商品").PivotFilters.Add2 xlValueIsGreaterThanOrEqualTo, .PivotFields("合計 / 売上"), 1400
End With
End Sub
では、VBAコードを実行してみます。
VBAで、ピボットテーブルの「商品」の値をフィルターできました。
「商品」ラベルの「値」をフィルターしてみます。
「支店」ラベルの「値」をフィルター
VBAコードは、こんな感じです。
Sub TEST10()
With ActiveSheet.PivotTables(1)
.PivotFields("支店").ClearAllFilters 'フィルター解除'「支店」ラベルの「値」を「1500以上」でフィルター
.PivotFields("支店").PivotFilters.Add2 xlValueIsGreaterThanOrEqualTo, .PivotFields("合計 / 売上"), 1500
End With
End Sub
Sub TEST12()
'「商品」ラベルをループ
For Each A In ActiveSheet.PivotTables(1).PivotFields("商品").PivotItems
Select Case A.Value
Case "いちご", "キウイ"
A.Visible = True
Case Else
A.Visible = False
End Select
Next
End Sub
では、実行してみます。
複数の項目でフィルターできた
VBAで、ピボットテーブルのラベルを「複数の項目」でフィルターできました。
手順を追ってVBAコードをみてみます。
複数のラベルでフィルターする手順
複数のラベルでフィルターする手順です。
「PivotItems」で表示と非表示ができる
「PivotItems」を使ってラベルを「非表示」にしてみます。
Sub TEST13()
'「商品」ラベルの「いちご」を「非表示」
ActiveSheet.PivotTables(1).PivotFields("商品").PivotItems("いちご").Visible = False
End Sub
VBAコードを実行します。
VBAで商品のラベルを「非表示」にできた。
「PivotItems」を使ってラベルを「表示」してみます。
Sub TEST14()
'「商品」ラベルの「いちご」を「表示」
ActiveSheet.PivotTables(1).PivotFields("商品").PivotItems("いちご").Visible = True
End Sub
VBAコードを実行します。
VBAで商品のラベルを「表示」できた。
ラベル内をFor Eachでループする
「For Each」を使うと、ラベル内をループすることができます。
Sub TEST15()
'「商品」ラベルをループ
For Each A In ActiveSheet.PivotTables(1).PivotFields("商品").PivotItems
Debug.Print A.Value
Next
End Sub
「商品」ラベル内の項目をループして取得します。
では、VBAコードを実行します。
VBAで、「商品」ラベル内の項目をループして取得できました。
Select Caseで表示か非表示にする
「Select Case」を使って、ラベルの項目を表示か、非表示にします。
Sub TEST16()
'「商品」ラベルをループ
For Each A In ActiveSheet.PivotTables(1).PivotFields("商品").PivotItems
Select Case A.Value
Case "いちご"
A.Visible = True
Case Else
A.Visible = False
End Select
Next
End Sub
では、VBAコードを実行します。
VBAで1つのラベルだけをフィルターできました。
複数の項目でフィルターする
先ほどと同じ要領で、「複数の項目」でフィルターします。
Sub TEST17()
'「商品」ラベルをループ
For Each A In ActiveSheet.PivotTables(1).PivotFields("商品").PivotItems
Select Case A.Value
Case "いちご", "キウイ"
A.Visible = True
Case Else
A.Visible = False
End Select
Next
End Sub
では、VBAコードを実行します。
という感じで、商品のラベルを「複数の項目」でフィルターすることができます。
VBAでピボットテーブルのフィルターを解除する
VBAで、ピボットテーブルのフィルターを解除する方法です。
すべてのフィルターを解除
項目ごとにフィルターを解除
という感じで、2種類の解除方法があります。
では、やってみます。
すべてのフィルターを解除する
すべてのフィルターを解除するVBAコードです。
Sub TEST18()
'すべてのフィルターを解除
ActiveSheet.PivotTables(1).ClearAllFilters
End Sub
「商品」と「支店」のラベルをフィルターしておきます。
「商品」と「支店」をフィルターしておく
では、VBAコードを実行します。
すべてのフィルターを解除できた
VBAで、すべてのラベルのフィルターを解除できました。
項目ごとにフィルターを解除する
「項目ごと」にフィルターを解除してみます。
「商品」ラベルのフィルターを解除
「商品」ラベルのフィルターを解除するVBAコードです。
Sub TEST19()
'「商品」ラベルのフィルターを解除
ActiveSheet.PivotTables(1).PivotFields("商品").ClearAllFilters
End Sub
「商品」と「支店」のラベルをフィルターしておきます。
では、VBAコードを実行します。
VBAで「商品」ラベルのみ、フィルターを解除できました。
「支店」ラベルでもやってみます。
「支店」ラベルのフィルターを解除
「支店」ラベルのフィルターを解除するVBAコードです。
Sub TEST20()
'「支店」ラベルのフィルターを解除
ActiveSheet.PivotTables(1).PivotFields("支店").ClearAllFilters
End Sub