AutoFilterで抽出したデータ数をカウントする
VBAを使ってオートフィルタで抽出したデータ数をカウントする方法です。
また、表示されている最終行番号も取得します。
関数、メソッドなど
XlCellTypeの定数を使用します。Range.SpecialCells(xlCellTypeVisible).Count
指定したセルの範囲(Range)に対して表示されているセル(xlCellTypeVisible)をカウントします。
サンプルコード
Sub autosu() Dim r As Long '最終行用 Dim countdata As Long 'データ数カウント用 '最終行を取得 r = Cells(Rows.Count, 1).End(xlUp).Row 'B列が東証1部のものを抽出 Range("a1").AutoFilter Field:=2, Criteria1:="東証1部" '表示されているデータ数を取得 countdata = Range(Cells(2, 1), Cells(r, 1)).SpecialCells(xlCellTypeVisible).Count MsgBox countdata End Sub
解説
まずはテーブルにある最終行番号を取得し、変数rに格納します。オートフィルタでデータ抽出後にテーブル範囲全体行に対して、表示されている行数をカウントします。
ただ、抽出されたデータ数が0の場合、
「実行時エラー'1004';
該当するセルが見つかりません。」
というエラーが出てしまいます。
これを回避するために
Range.SpecialCells(xlCellTypeLastCell)
で、抽出されたデータの最終行を調べてから分岐させます。
Sub autosu2() Dim r As Long '最終行用 Dim r1 As Long Dim countdata As Long 'データ数カウント用 '最終行を取得 r = Cells(Rows.Count, 1).End(xlUp).Row 'B列が東証1部のものを抽出 Range("a1").AutoFilter Field:=2, Criteria1:="東証3部" '表示されているデータの最終行を取得 r1 = Range("A1").SpecialCells(xlCellTypeLastCell).Row If r1 = 1 Then countdata = 0 Else '表示されているデータ数を取得 countdata = Range(Cells(2, 1), Cells(r, 1)).SpecialCells(xlCellTypeVisible).Count End If MsgBox countdata End Sub
関連・類似ページ
XlCellType列挙値の入っているセルのみを選択
最終セルの取得