【ExcelVBA】オートフィルタでデータ集計

ExcelVBA, オートフィルタ

集計には Subtotal関数 を使います。

関数説明:WorksheetFunction.Subtotal(集計方法,参照範囲)

テスト対象のテーブル



テスト対象テーブルを使いたい場合は、↓テーブルをコピーしてエクセルの A1 に貼り付けてください。



商品名個数
りんご4
みかん3
めろん5
いちご2
みかん1

件数を集計

Sub sample()

    Dim Target(1) As String
    
    Target(0) = "みかん"
    Target(1) = "りんご"

    ThisWorkbook.ActiveSheet.Range("A1:B1").AutoFilter _
        Field:=1, _
        Criteria1:=Target, _
        Operator:=xlFilterValues
        
    MsgBox WorksheetFunction.Subtotal(3, Range("B:B")) - 1 & " 件"

End Sub
※13行目の件数の集計方法は「 3 」です。
※13行目は見出し行も件数にカウントするので、-1 しています。

結果


実行前のテーブル



数値を集計

Sub sample()

    Dim Target(1) As String
    
    Target(0) = "みかん"
    Target(1) = "りんご"

    ThisWorkbook.ActiveSheet.Range("A1:B1").AutoFilter _
        Field:=1, _
        Criteria1:=Target, _
        Operator:=xlFilterValues
        
    MsgBox "合計: " & WorksheetFunction.Subtotal(9, Range("B:B"))

End Sub
※13行目の数値の集計方法は「 9 」です。

結果


実行前のテーブル



最小値を求める

Sub sample()

    Dim Target(1) As String
    
    Target(0) = "みかん"
    Target(1) = "りんご"

    ThisWorkbook.ActiveSheet.Range("A1:B1").AutoFilter _
        Field:=1, _
        Criteria1:=Target, _
        Operator:=xlFilterValues
        
    MsgBox "最小値: " & WorksheetFunction.Subtotal(5, Range("B:B"))

End Sub
※13行目の最小値の集計方法は「 5 」です。

結果


実行前のテーブル



最大値を求める

Sub sample()

    Dim Target(1) As String
    
    Target(0) = "みかん"
    Target(1) = "りんご"

    ThisWorkbook.ActiveSheet.Range("A1:B1").AutoFilter _
        Field:=1, _
        Criteria1:=Target, _
        Operator:=xlFilterValues
        
    MsgBox "最大値: " & WorksheetFunction.Subtotal(4, Range("B:B"))

End Sub
※13行目の最大値の集計方法は「 4 」です。

結果


実行前のテーブル



集計方法と集計機能

集計方法集計機能
1平均値を求める
2数値の個数を求める
3データの個数を求める
4最大値を求める
5最小値を求める
6積を求める
7不偏標準偏差を求める
8標本標準偏差を求める
9合計値を求める
10不偏分散を求める
11標本分散を求める