フィルタをかけたあとに「元の全データを表示したい」というケースはよくあります。
ExcelのVBAでは ShowAllData を使うことで、簡単にフィルタを解除できます。
目次
1. 基本の使い方
Sub フィルタ解除()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'フィルタを解除
If ws.AutoFilterMode Then
If ws.FilterMode Then
ws.ShowAllData
End If
End If
End Sub
2. コード解説
ws.AutoFilterMode
シートにフィルタが設定されているかどうかを判定します。ws.FilterMode
フィルタが実際にかかって「一部のデータが非表示」になっているかを判定します。ws.ShowAllData
フィルタを解除し、全データを表示します。
3. トラブル回避のポイント
(1) フィルタがかかっていない場合のエラー
ShowAllData
は「フィルタがかかっていない状態」で実行するとエラーになります。
そのため、上記のように If文で条件を確認してから実行するのが安全です。
(2) 見た目のフィルタボタンを消したい場合
ShowAllData
は「フィルタの解除」だけで、フィルタボタン(▼)自体は残ります。
もし フィルタ機能そのものをオフにしたい場合は ws.AutoFilterMode = False
を使います。
'フィルタ自体をオフにする
ws.AutoFilterMode = False
4. 実用例:抽出処理と解除処理の流れ
Sub フィルタ処理と解除処理()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
'売上列(3列目)が100以上のデータを抽出
ws.Range("A1:C20").AutoFilter Field:=3, Criteria1:=">=100"
MsgBox "抽出しました。解除します。"
'解除(安全に実行)
If ws.AutoFilterMode Then
If ws.FilterMode Then ws.ShowAllData
End If
End Sub
5. まとめ
- フィルタ解除には ShowAllData を使う
- エラー回避のために AutoFilterMode / FilterMode を確認してから実行する
- フィルタボタン自体を消したい場合は
AutoFilterMode = False
を使う
これで「データ抽出 → 全件表示」の流れを自動化できます。
コメント