💻

ExcelVBAでピボットテーブルのフィルタ(Fields)の存在を確認する

2022/04/28に公開

VBAでピボットテーブルのフィルタ(Fields)存在を確認するには

ユーザーがピボットテーブルのフィルタ自体をいじっているかもしれません。
自分の想定しているだけのフィルタがピボット内に健在か確認するコードです。

見えてるフィルタ項目.VisibleFields


Dim searchSheet As Worksheet
Set searchSheet = ActiveWorkbook.Worksheets("シート名")

Dim i, cntVisibleFields As Integer

Dim hasFields AS Boolean
hasFields = False

Dim searchFieldsName as String
searchFieldsName = "売上"

With searchSheet.PivotTables("ピボットテーブル名")
	'見えているフィルタの数を取得
        cntVisibleFields = .VisibleFields.Count
	
        For i = 1 To cntVisibleFields
            If searchFieldsName = .VisibleFields(i) Then
                hasFields = True
                Exit For
            End If
        Next
End With

If hasFields Then
	MsgBox "ピボットテーブルに売上のフィルタは設定されています"
Else
	MsgBox "ピボットテーブルに売上のフィルタは設定されていません"
End If

VBAピボットテーブルのフィルタ(Fields)の存在を確かめるためのFunctionプロシージャ

'Fieldsの存在を確認する。戻り値Boolean
'引数1:シート名
'引数2:ピボットテーブル名
'引数3:フィールド名(シート状に存在する)
Private Function F_SearchVisibleFields(ByVal arg_searchSheetName As String, arg_searchPivotName As String, ByVal arg_searchVisibleFieldsName As String) As Boolean
    
    Dim searchSheet As Worksheet
    Set searchSheet = ActiveWorkbook.Worksheets(arg_searchSheetName)
    
    Dim i, cntVisibleFields As Integer
        
    With searchSheet.PivotTables(arg_searchPivotName)
        cntVisibleFields = .VisibleFields.Count
        For i = 1 To cntVisibleFields
            If arg_searchVisibleFieldsName = .VisibleFields(i) Then
                F_SearchVisibleFields = True
                Exit Function
            End If
        Next
    End With
    
    F_SearchVisibleFields = False
    
End Function

Discussion