Excel VBA 逆引き集 | フィルタの解除

Excel VBA
スポンサーリンク

フィルタの解除

Excelで「フィルタを解除する」には、ShowAllData を使うのが基本です。初心者が迷いやすい「解除できないとき」「テーブルの場合」「安全に解除する方法」まで、例題付きで整理しました。


基本:フィルタを解除する

Sub ClearFilter_Basic()
    'シートにフィルタがかかっている場合のみ解除
    If ActiveSheet.FilterMode Then
        ActiveSheet.ShowAllData
    End If
End Sub
VB
  • ポイント:
    • FilterMode プロパティで「フィルタがかかっているか」を判定。
    • ShowAllData でフィルタを解除。
    • フィルタがない状態で ShowAllData を実行するとエラーになるため、必ず判定を入れるのが安全。

テーブル(ListObject)のフィルタ解除

Sub ClearFilter_ListObject()
    Dim lo As ListObject
    Set lo = ActiveSheet.ListObjects("売上テーブル") 'テーブル名に合わせる
    lo.AutoFilter.ShowAllData
End Sub
VB
  • ポイント:
    • テーブルは ListObject.AutoFilter.ShowAllData を使う。
    • 通常のシートフィルタとは別扱い。

シート内のすべてのテーブルのフィルタを解除

Sub ClearFilter_AllTables()
    Dim lo As ListObject
    For Each lo In ActiveSheet.ListObjects
        lo.AutoFilter.ShowAllData
    Next
End Sub
VB
  • ポイント:
    • 複数テーブルがある場合でも一括で解除できる。

例題で練習

例題1:シート全体のフィルタを解除してから処理開始

Sub Example_ClearFilterBeforeProcess()
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
    MsgBox "フィルタを解除しました。これから処理を開始します。"
End Sub
VB

例題2:売上テーブルのフィルタを解除して全件コピー

Sub Example_ClearFilterAndCopy()
    Dim lo As ListObject
    Set lo = ActiveSheet.ListObjects("売上テーブル")
    lo.AutoFilter.ShowAllData
    lo.DataBodyRange.Copy Destination:=Range("H2")
End Sub
VB

例題3:シート上のすべてのフィルタを解除(通常フィルタ+テーブル)

Sub Example_ClearAllFilters()
    '通常フィルタ解除
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

    'テーブルフィルタ解除
    Dim lo As ListObject
    For Each lo In ActiveSheet.ListObjects
        lo.AutoFilter.ShowAllData
    Next
End Sub
VB

実務の落とし穴と対策

  • フィルタがないのに解除するとエラー:
    • FilterMode 判定を必ず入れる。
  • テーブルと通常フィルタの違い:
    • 通常フィルタは ActiveSheet.ShowAllData、テーブルは ListObject.AutoFilter.ShowAllData。両方を意識する。
  • 複数テーブルがある場合:
    • For Each で一括解除するのが安全。
  • 解除忘れで処理が誤動作:
    • データ処理前に必ずフィルタ解除を入れると安心。
タイトルとURLをコピーしました