ExcelVBA

Excel VBA でオートフィルタされたセルを扱う

VBA でオートフィルタをかけられたセルをマウスで選択して処理をしようとしてもうまく行かなかったので備忘録。

Dim cell As Variant
For Each cell In Selection
    ' 何かの処理
Next

みたいにループを回して処理をしようとしても、オートフィルタで隠されているセルまで処理されてしまいます。
こんなときは、以下のようにしてみてください。

Dim cell As Variant
For Each cell In Selection.SpecialCells(xlCellTypeVisible)
    ' 何かの処理
Next

要は、オートフィルタをかけて「見えてるセルだけ」処理しろということなのですけどね。

2018年4月24日追記

オートフィルタをかけて、1つだけセルを選択したときの挙動がおかしいです。
Excel 2013で確認しましたが、Excel のバクでしょうか。
仕方がないので、セルの高さをチェックするようにしました。

Dim cell As Variant
For Each cell In Selection
    If cell.Height = 0 Then
        GoTo CONTINUE
    End If

    ' 何かの処理

CONTINUE:
Next