ray88’s diary

お仕事で困ったとき用の自分用の覚書

ExcelVBA フィルター解除する(フィルターがかかっていたら)

■呼び出し元プロシージャ

Sub test()
    Dim bookPath As String
    Dim sheetName As String
    Dim wb As Workbook
    bookPath = "C:\Users\デスクトップ\テスト\売上確定情報.xlsx"
    sheetName = "Sheet1"
    'リンクを更新しないでブックを開く
    Set wb = Workbooks.Open(bookPath, False)
    'フィルターがかかっていたら解除する
    Call ReleaseFilter(wb, sheetName)
End Sub

■フィルタ解除プロシージャ

Sub ReleaseFilter(wb As Workbook, shName As String)
'--------------------------------------------------
'機能:指定したブックの指定したシートにフィルタが
'      かかっているか確認し、フィルタを解除する
'引数1:対象ワークブックオブジェクト
'引数2:対象シート名
'--------------------------------------------------
    Dim filterRange As String
'---------------------------------
'ログ出力
    Debug.Print "■ReleaseFilter開始■"
    Debug.Print "△開始時の値△"
    Debug.Print "shName: " & shName
'---------------------------------
    'フィルタがかかっていたらフィルタのかかっている範囲を取得
    With wb.Sheets(shName)
        If .AutoFilterMode Then
           filterRange = .AutoFilter.Range.Address
           Debug.Print filterRange
           'フィルタを解除
            Range(filterRange).AutoFilter
        End If
    End With
'---------------------------------
    Debug.Print "■ReleaseFilter終了■"
'---------------------------------
End Sub