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 이라는 피벗 테이블을 필터링하여 피벗 테이블의 위치 열 값이 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 이라는 피벗 테이블을 필터링하여 피벗 테이블의 위치 열 값이 J2:J3 셀 범위의 값 중 하나와 동일한 행만 표시합니다.
방법 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인 행만 표시됩니다.
피벗 테이블은 위치 열의 값이 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에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.
VBA:피벗 테이블을 새로 고치는 방법
VBA:중복값을 제거하는 방법
VBA:범위 내 행 수를 계산하는 방법