フィルタの解除
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 で一括解除するのが安全。
- 解除忘れで処理が誤動作:
- データ処理前に必ずフィルタ解除を入れると安心。
