フィルター解除にまつわる話

マクロが動かなくなったので、見てくれないか?と問い合わせがあった。
f:id:Infoment:20190726222313p:plain

問い合わせを受けた時点で、心当たりがない。しかし送られてきたファイルは、
3年前に私が作成したもので間違いなかった。

動かなくなった原因は直ぐ分かったので、その箇所を修正するとともに、再発し
難い作りに変更した。

その際、今回の不具合と関係なく、↓ のマクロが目に入った。

Sub 何某かの処理()

' 変数定義
     Dim myLastRow
     Dim myRng
     Dim i

' 画面の更新停止
     Application.ScreenUpdating = False

     myLastRow = Range("A1").End(xlDown).Row

' フィルターの絞込みを一旦解除(1~17列目まで)
' 18列目は「■」で再絞り込み
     Set myRng = Range("A1:R" & myLastRow)
          For i = 1 To 17
               myRng.AutoFilter Field:=i
          Next i
     myRng.AutoFilter Field:=18, Criteria1:="■"

     Application.ScreenUpdating = True

 ' 後略

End Sub

むむむ、3年前は、こんなマクロを書いていたのか。これ幸い、今回の改修に合わせて、この黒歴史?もコッソリ無かったことにしよう。
それで書き直したのが、↓ こちらのマクロ。

Sub 何某かの処理()
    ' オートフィルターを一旦解除。
    ActiveSheet.AutoFilterMode = False
    ' 18列目について、「■」のみを表示。
    ActiveSheet.UsedRange.AutoFilter Field:=18, Criteria1:="■"

 ' 後略
End Sub

コメント行を除けば、11行から2行に圧縮できた。
自分が作ったものを定期的に見直すって、やっぱり大事ですね。

参考まで。