VBATips

AutoFilterを「安全」「確実に」解除する【ExcelVBA】

ExcelVBAのメリットであり、デメリットはユーザーがエクセルを操作可能な事です。
ユーザーが操作をしたことで、今まで動いていたコードが動かなくなる場合があります。

特に気を付けないといけないのが、オートフィルター(AutoFilter)です。
マクロ側でオートフィルターを使った処理をさせる場合、
ユーザー側の操作がある前提でコード記載する必要があります。

オートフィルターが設定されている事で、求めている動作をしないケースは以下参照。
オートフィルターは厄介?FindやEndが使えなくなる【エクセルマクロ】

AutoFilterメソッドの注意点

AutoFilter(オートフィルタ)の設定と解除は、同じコードの書き方をします。

    '■オートフィルターの設定 or 解除
    ActiveSheet.Range("A1").AutoFilter

AutoFilterプロパティは現在の状態を判断し、処理を行います。

・オートフィルタが設定されていれば解除する
・オートフィルタが解除されていれば設定する

上記注意点がある為、ユーザーがマクロ実行前にオートフィルターを使用してると、
マクロが正常に動作しなくなります。

オートフィルターを「安心」「確実」解除する

'■オートフィルタを正確に解除する
Sub Call_AutoFilterOff()
    '■オートフィルタが設定されていれば、オートフィルター解除する。
    If (ActiveSheet.AutoFilterMode = True) Then ActiveSheet.Range("A1").AutoFilter
End Sub

上記のようにパーツ化しておくことで、確実にオートフィルターを解除する事が可能です。
オートフィルタの設定を確認し、設定されていれば解除するだけの処理なので、大したことはしていません。

ExcelVBAはユーザー側が何かしらの処理をしている前提で、プログラムを組むことが求められます。
表形式のデータやVBA側でオートフィルタを使う処理を実装する前には、必ずオートフィルターを解除する事が望ましいです。

まとめ

マクロは手作業に比べ圧倒的なスピード・ヒューマンエラーもなく安全に処理が可能です。
但し、マクロはメンテナンスや問い合わせ業務等、別の作業が発生します。

ユーザー側の操作をある前提で組むことで、本来不要な無駄な業務(問い合わせへ対応/不具合発生時のコードのチェックが)を削減可能です。

コメント

タイトルとURLをコピーしました