フィルター解除にまつわる話
マクロが動かなくなったので、見てくれないか?と問い合わせがあった。
問い合わせを受けた時点で、心当たりがない。しかし送られてきたファイルは、
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行に圧縮できた。
自分が作ったものを定期的に見直すって、やっぱり大事ですね。
参考まで。