ファイル起動時に、フィルターによる絞り込みを解除する。

本日、このような相談を受けた。

Excelファイルで作った台帳に、フィルターを掛けている。
これについて起動時に自動で、各列の表示を全選択状態にできないか。

問い合わせの背景:
 先日、ある列で特定の値だけを表示したまま保存終了したところ、
 他の方がそれに気づかず、迷惑をかけてしまったとのこと。

相談に応えるべく、挑戦してみた。
f:id:Infoment:20190314222517p:plain

今回の相談は、例えば先日の表で言えば、みかんだけを表示して保存終了したような状況を指している。
f:id:Infoment:20190314222803g:plain

別の人がファイルを開いて驚く。
「あれ?『みかん』しかない!?」

この場合、りんごとバナナにチェックを入れ直すという考え方もあるが、チェック漏れが起きるかもしれない。ここは素直に、以下の作戦をとることにした。

  1. オートフィルターが掛かっているか確認する。
  2. 掛かっている場合、その範囲を取得する。
  3. 同範囲に対して一旦、オートフィルターを解除。
  4. 同範囲に対し改めて、オートフィルターを設定。

これで、どのような絞り込みが為されていようとも、全てが表示された状態に戻ってくれる。エッセンスだけを書くと、このような感じだ。

Private Sub Workbook_Open()
    Dim FilterRange As Range
        If ActiveSheet.AutoFilterMode = True Then
            Set FilterRange = ActiveSheet.AutoFilter.Range
                ' 一旦フィルターを解除。
                FilterRange.AutoFilter
                ' 再度フィルターを設定。
                FilterRange.AutoFilter
        End If
End Sub

ファイル起動時にということだったので、Workbook_Openイベントに設定した。
今回はこれで無事、相談にこたえることが出来た。でめたし。

参考まで。

~ 追記 ~
ことりちゅんさんからのご助言により、もっと単純に ↓ で解決できることを知りました。

Private Sub Workbook_Open()
    Dim FilterRange As Range
        If ActiveSheet.AutoFilterMode = True Then
            ActiveSheet.AutoFilter.ShowAllData
        End If
End Sub

いつも有難うございますm(_ _)m