指定したマクロは、アクティブなワークシートのオートフィルターをオンにします。これにより、ユーザーが興味のあるものにフィルターをかけることができる列ヘッダーが提供されます。この種のワークシートのフィルタリングが必要であると仮定すると、次のようなものを使用できます。
Dim r As Range
'Note: set r to something useful, such as worksheet.Cells
Dim vis As Range
Set vis = r.SpecialCells(xlCellTypeVisible)
'now vis holds a special "Range" object referring to the visible cells.
'since (auto) filtering hides some cells, this vis range will help show only the cells that remain visible.
'the output of SpecialCells, you should assume holds a complex Range,
'which is composed of multiple Areas that are wrapped in one single Range object
'the separate areas help you distinguish the visible cells from the hidden cells
'fyi, various safety checks you can do: vis Is Range, vis Is Nothing
Dim a as Areas
Set a = r.Areas
Dim cr as Range
For Each cr in a
'cr refers to a single (i.e. normal and contiguous) area range
'where you can use cr.Row, cr.Column, cr.Rows.Count, cr.Columns.Count
Next
したがって、フィルタリングを行う場合、SpecialCells(xlCellTypeVisible) を使用して、非表示でないセルを表示できます。これは、連続した範囲を表す領域をラップする範囲を持つものとして表されます。