エクセルVBA テーブルにも使える全シートのオートフィルターをクリア


プログラムを組んだ目的

ブックを閉じた時にオートフィルターの解除をするようにマクロを組んで次に使う人が使いやすくするためのマクロです。

テーブル機能を使っていてもクリアをすることができます。



プログラムの組み方

「Alt+F11」でVBAを開きます。

ThisWorkbook」をダブルクリックで開き、以下のプログラムを記述していきます。

Excelを起動した時にIMEも起動 ~3行マクロ
’イベントプロシージャの記述
Private Sub Workbook_BeforeClose(wb as Boolean)

Dim ws as Worksheet


’全シートを順番にactiveにするためのコード
For Each ws In Worksheets
    ws.activate

 
 ’もしフィルターモードがtrueならフィルターをクリア
    If ws.Filtermode = True Then
      ws.ShowAllData
    End If

Next

End Sub





プログラムの説明

  1. イベントプロシージャを使ってブックを閉じた時にイベントが発生するように設定します。
  2. ワークシートを変数に代入する
  3. 「For Each」を使って全てのシートオブジェクトを順番に取得するための記述をする(wsは変数)
  4. 「ws.activate」 でシート1から順番にアクティブにしていく
  5. 「if文」でもしシートでオートフィルターが使用されていたら全てを表示するように記述(フィルターのクリア)
  6. 「Next」によって全シート文繰り返し処理を実施する



テーブルを使用していると、「AutoFilterMode」を「False」にしても解除ができなかったので作成してみました。

共有して使用するファイルだったので、次に使う人が使いやすくなると思います。