意外と使えるExcelでオートフィルタで表示しているセルだけ取得するVBA

  • 12
    Like
  • 2
    Comment
More than 1 year has passed since last update.

オートフィルタ等で表示しているセルだけ取得し、
非表示セルの情報は無視するコードサンプルです。

オートフィルタを使った処理と組み合わせると、とても便利です。
例えば、欲しい情報だけフィルタリングし、その情報を取得するような処理です。

以下がコードサンプルです。

サンプルでは行番号を取得していますが、この要領で値を取得することもできます。

VBA

Sub Visible_Search()

'変数定義
Dim p As Long , n As Long            'カウンタ変数
Dim r As Range, rr As Range, rs As Range      'Visibleセルを取得する変数
p = 0
n = 2

'Range("A1", Range("A" & Rows.Count).End(xlUp)):A1~データのある最下行
'SpecialCells(xlCellTypeVisible):表示されているセルのみを対象とする
Set r = Range("A1", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
'r:A1~データの存在する最大行セルまでの範囲(表示されているセルのみ)
'rr:A1~データの存在する最大行セルまで、A1から1つずつ格納される
For Each rr In r
    'rsへ選択セルの値を格納
    For Each rs In rr.Areas
        '選択セルの行数を取得
        p = (rs.Row)
        'Visible行の行番号を出力
         Sheets(X).Cells(n, 1).Value = p
         n = n + 1
        End If
    Next
Next

End Sub