機能と数式 | VBA | セミナー | オンラインソフト | お問い合わせ | その他
Top > Excel > VBA

オートフィルタを使い倒す



大量のデータを絞り込むには、オートフィルタが便利です。ここでは、VBAからオートフィルタを使い倒すテクニックをご紹介します。なお、ボリュームがありますので、以下の項目にページを分けて解説します。

  1. オートフィルタを設定する
  2. オートフィルタの結果を集計する    (←このページ)
  3. オートフィルタの結果をコピーする
  4. オートフィルタの結果の特定列だけを操作する

オートフィルタの結果を集計する


オートフィルタで絞り込んだ結果だけを集計するには、ワークシート関数のSUBTOTAL関数を使います。



Sub Sample()
    Dim Result As Long
    Range("A1").AutoFilter Field:=1, Criteria1:="田中"
    Result = WorksheetFunction.Subtotal(9, Range("B:B"))
    MsgBox Result
End Sub

件数をカウントするときは、SUBTOTAL関数の第1引数に「3」を指定します。



Sub Sample()
    Dim Result As Long
    Range("A1").AutoFilter Field:=1, Criteria1:="田中"
    Result = WorksheetFunction.Subtotal(3, Range("B:B"))
    MsgBox Result - 1 & "件"
End Sub

SUBTOTAL関数でB列全体の件数をカウントします。この件数には、A列のタイトル行も含まれるので、マイナス1しています。
このように、SUBTOTAL関数でカウントした件数が1だったとき、それは「タイトル行だけ」を表しますので、つまり「絞り込もうとした条件は存在しない」ということになります。



Sub Sample()
    Dim Result As Long, Target As String
    Target = InputBox("名前は?")
    If Target = "" Then Exit Sub
    Range("A1").AutoFilter Field:=1, Criteria1:=Target
    Result = WorksheetFunction.Subtotal(3, Range("B:B"))
    If Result = 1 Then
        MsgBox Target & " は存在しません"
    Else
        MsgBox Target & " は " & Result -1 & " 件あります"
    End If
End Sub







このエントリーをはてなブックマークに追加