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側でオートフィルタを使う処理を実装する前には、必ずオートフィルターを解除する事が望ましいです。
まとめ
マクロは手作業に比べ圧倒的なスピード・ヒューマンエラーもなく安全に処理が可能です。
但し、マクロはメンテナンスや問い合わせ業務等、別の作業が発生します。
ユーザー側の操作をある前提で組むことで、本来不要な無駄な業務(問い合わせへ対応/不具合発生時のコードのチェックが)を削減可能です。
コメント