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 である行のみが表示されます。

VBA フィルターのピボット テーブル

ピボット テーブルはフィルター処理され、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 である行のみが表示されます。

複数の値に基づく VBA フィルターのピボット テーブル

ピボット テーブルはフィルター処理され、Position 列の値が Guard または Center である行のみを表示します。

追加リソース

次のチュートリアルでは、VBA で他の一般的なタスクを実行する方法について説明します。

VBA: ピボット テーブルを更新する方法
VBA: 重複した値を削除する方法
VBA: 範囲内の行数をカウントする方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です