Vba を使用してピボットテーブルをフィルターする方法 (例あり)
VBA を使用して Excel でピボット テーブルをフィルターするには、次の方法を使用できます。
方法 1: 値に基づいてピボット テーブルをフィルターする
SubFilterPivotTable ()
Dim pf As PivotField
Dim myFilter As String
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
myFilter = ActiveWorkbook.Sheets(" Sheet1 ").Range(" J2 ").Value
pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub
この特定のマクロは、 PivotTable1というピボット テーブルをフィルター処理して、ピボット テーブルのPosition列の値がSheet1のセルJ2の値と等しい行のみを表示します。
方法 2: 複数の値に基づいてピボットテーブルをフィルター処理する
Sub FilterPivotTableMultiple()
Dim v Ace Variant
Dim i As Integer, j As Integer
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
'specify range with values to filter on
v = Range(" J2:J3 ")
'clear existing filters
pf.ClearAllFilters
'apply filter to pivot table
With pf
For i = 1 TB pf.PivotItems.Count
j = 1
Do While j <= UBound(v, 1) - LBound(v, 1) + 1
If pf.PivotItems(i).Name = v(j, 1) Then
pf.PivotItems(pf.PivotItems(i).Name).Visible = True
Exit Do
Else
pf.PivotItems(pf.PivotItems(i).Name).Visible = False
End If
j = j + 1
Loop
Next i
End With
End Sub
この特定のマクロは、 PivotTable1というピボット テーブルをフィルター処理して、ピボット テーブルのPosition列の値がセル範囲J2:J3の値の 1 つと等しい行のみを表示します。
方法 3: ピボットテーブル フィルターを削除する
SubClearPivotTableFilter ()
Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables(" PivotTable1 ")
pt.ClearAllFilters
End Sub
この特定のマクロは、 PivotTable1というピボット テーブルからすべてのフィルターをクリアします。
次の例は、これらの各メソッドを実際に使用する方法を示しています。
例 1: 値に基づいてピボット テーブルをフィルターする
Excel のデータ セットからピボット テーブルを作成し、さまざまなチームやポジションのバスケットボール選手が獲得したポイントを要約したとします。
ピボット テーブルをフィルターして、Position 列の値が Guard である行のみを表示するとします。
これを行うには、次のマクロを作成できます。
SubFilterPivotTable ()
Dim pf As PivotField
Dim myFilter As String
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
myFilter = ActiveWorkbook.Sheets(" Sheet1 ").Range(" J2 ").Value
pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub
このマクロを実行すると、ピボット テーブルが自動的にフィルターされ、Position 列の値が Guard である行のみが表示されます。
ピボット テーブルはフィルター処理され、Position 列の値が Guard である行のみを表示します。
例 2: 複数の値に基づいてピボット テーブルをフィルターする
代わりに、ピボット テーブルをフィルターして、Position 列の値が GuardまたはCenter である行のみを表示するとします。
これを行うには、次のマクロを作成できます。
Sub FilterPivotTableMultiple()
Dim v Ace Variant
Dim i As Integer, j As Integer
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
'specify range with values to filter on
v = Range(" J2:J3 ")
'clear existing filters
pf.ClearAllFilters
'apply filter to pivot table
With pf
For i = 1 TB pf.PivotItems.Count
j = 1
Do While j <= UBound(v, 1) - LBound(v, 1) + 1
If pf.PivotItems(i).Name = v(j, 1) Then
pf.PivotItems(pf.PivotItems(i).Name).Visible = True
Exit Do
Else
pf.PivotItems(pf.PivotItems(i).Name).Visible = False
End If
j = j + 1
Loop
Next i
End With
End Sub
このマクロを実行すると、ピボット テーブルが自動的にフィルターされ、Position 列の値が Guard または Center である行のみが表示されます。
ピボット テーブルはフィルター処理され、Position 列の値が Guard または Center である行のみを表示します。
追加リソース
次のチュートリアルでは、VBA で他の一般的なタスクを実行する方法について説明します。