Categories: VBA基礎

EXCEL VBA オートフィルタでデータの抽出・条件・設定方法 (AutoFilter)

 

EXCEL VBA オートフィルタでデータの抽出・条件・設定方法 (AutoFilter)

 

 

●はじめに
EXCELでデータを抽出することは、通常のEXCELでもオートフィルタ機能で簡単にデータを抽出させる事が出来ますが、VBAを使ってオートフィルタを使う場合は、プログラムに組み込む事ができるので、ある処理結果を条件にすることにより、抽出するデータを表示する事も出来ます。それでは、オートフィルターの利用方法を順番に説明いたします。

 

 

●書式の説明

オブジェクト.AutoFilter(Field[抽出条件の列],Criteria1[抽出条件を指定①],Operator[定数],Criteria2[抽出条件を指定②])

記述例:Range(“A1″).AutoFilter Field:=2,Criteria1:=”>100″,Operator:=xlAnd,Criteria2:=<200″

説明 :A1の行にオートフィルタを設定し、Field=2とは、A1から2列目 B2列を意味します。B列の内容でCriteria1と2は、抽出条件100以上かつ(xlAnd)200以下のデータを抽出します。

 

Operator定数(AutoFilter)説明(内容)
xlAnd(既定値)And条件
xlOrOr条件
xlTop10Items上位●件(数値は自由に指定できます。)
xlTop10Percent上位●%(数値は自由に指定できます。)
xlBottom10ltems下位●件(数値は自由に指定できます。)
xlBottom10Percent下位●%(数値は自由に指定できます。)

 

抽出条件の記述例(AutoFilter)説明(内容)
"=100"100と等しい
"200"200と等しくない
">300"300を超える
">=400"400以上
"500未満
"=600以上
""空白以外
"="空白セル
"*文字列*"[文字列]を含む
"*文字列*"[文字列]を含まない

 

 

オートフィルタ―の条件を選択 「指定した文字列を抽出」(AutoFilter)

 

●プログラム説明 サンプル①
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから”男”男性のデータを抽出します。

 

 

Sub AutoFilter01()

    Range("A1").AutoFilter field:=4, Criteria1:="男"  'A列からの4列目(性別)の”男”を抽出
    
    MsgBox "男のみ抽出"
    
    Range("A1").AutoFilter  'オートフィルタ―解除
    

End Sub

 

 

●実行前~実行後 ※オートフィルタ―を使って性別の列に「男」男性を指定しましたので、データの中から男性のみのデータが抽出されました。
(画像クリックして拡大)

 

 

 

オートフィルタ―の条件を選択 [以上・以下・未満・超える] (AutoFilter)

 

● プログラム説明 サンプル②
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから”国語”データから70点以上ののデータを抽出します。

 

Sub AutoFilter02()

    Range("A1").AutoFilter field:=6, Criteria1:=">=70" 'A列からの6列目(国語)の点数が70点以上を抽出

    MsgBox "国語が70点以上"
    
    Range("A1").AutoFilter  'オートフィルタ―解除

End Sub

 

 ●実行前~実行後 ※オートフィルタ―を使って国語の点数が70点以上のデータを指定しましたので、データの中から国語の点数が70点以上のデータが抽出されました。
(画像クリックして拡大)

 

 

オートフィルタ―の条件を選択 [指定した範囲] (AutoFilter)

 

● プログラム説明 サンプル③
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから”数学”データから40点以上~70点以下のデータを抽出します。

 

Sub AutoFilter03()

    Range("A1").AutoFilter field:=7, Criteria1:="<=70", _
                Operator:=xlAnd, Criteria2:=">=40"
    'A列からの7列目(数学)の点数が40点以上~70点以下を抽出

    MsgBox "数学が40点以上~70点以下"
    
    Range("A1").AutoFilter  'オートフィルタ―解除


End Sub

 

 

●実行前~実行後 ※オートフィルタ―を使って数学の点数が40点以上~70点以下のデータを指定しましたので、データの中から数学の点数が40点~70点以上のデータが抽出されました。
(画像クリックして拡大)

 

 

 

オートフィルタ―の条件を選択 [指定した文字列の抽出] (AutoFilter)

 

 

● プログラム説明 サンプル④
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから「名前」の列から指定した文字列が含まれるデータを抽出します。

 

 

Sub AutoFilter04()

    Range("A1").AutoFilter field:=2, Criteria1:="*山*"
    'A列からの2列目(名前)に”山”の文字がある名前を抽出

    MsgBox "名前に’山’の文字がある方を抽出"
    
    Range("A1").AutoFilter  'オートフィルタ―解除


End Sub

 

●実行前~実行後 ※オートフィルタ―を使って名前の列に、「山」の文字が含まれる条件をしていしましたので、「山」が含まれる方のデータが抽出されました。
(画像クリックして拡大)

 

 

 

 

オートフィルタ―の条件を選択 [複数の条件で抽出] (AutoFilter)

 

 

● プログラム説明 サンプル⑤
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから「国語」・「数学」・「英語」の複数条件を指定して、3科目とも70点以上の条件に該当するデータを抽出します。

 

Sub AutoFilter05()

    Range("A1").AutoFilter field:=6, Criteria1:=">=70"
    'A列からの6列目(国語)の点数が70点以上を抽出
    
    Range("A1").AutoFilter field:=7, Criteria1:=">=70"
    'A列からの7列目(数学)の点数が70点以上を抽出

    Range("A1").AutoFilter field:=8, Criteria1:=">=70"
    'A列からの8列目(英語)の点数が70点以上を抽出

    MsgBox "国語・数学・英語の点数が70点以上の方を抽出"
    
    Range("A1").AutoFilter  'オートフィルタ―解除

End Sub

 

 

●実行前~実行後 ※国語・数学・英語の点数が70点以上の抽出条件を指定しましたので、該当するデータが抽出されました。
(画像クリックして拡大)

 

 

 

オートフィルタ―の条件を選択 [上位・下位を抽出] (AutoFilter)

 

 

● プログラム説明 サンプル⑥
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから「国語」の点数の上位6名のデータを抽出します。

 

Sub AutoFilter06()

    Range("A1").AutoFilter field:=6, Criteria1:=6, Operator:=xlTop10Items
    'A列からの6列目(国語)の点数の上位6名を抽出

    MsgBox "国語の点数の上位6名"
    
    Range("A1").AutoFilter  'オートフィルタ―解除

End Sub

 

 

●実行前~実行後 ※国語の点数の上位6名を抽出条件に指定しましたので、該当するデータ6名が抽出されました。
(画像クリックして拡大)

 

 

オートフィルタ―の条件を選択 [抽出のデータをカウント] (AutoFilter)

 

 

● プログラム説明 サンプル⑦
(画像クリックで拡大)
下記のプログラムは、下表のデータからオートフィルタ―を使って指定した条件のデータを抽出します。今回は、下表のデータから抽出条件で指定した抽出結果のデータ件数をカウントします。処理内容は、全体の件数から女性「女」のみを抽出し、残りのデータ件数を計算することで、男性「男」の件数を割り出します。

 

 

Sub AutoFilter07()

    Dim ALLMAN, MANCOUNT, WOMANCOUNT As Integer
    

        ALLMAN = Cells(Rows.Count, "A").End(xlUp).Row - 1  '全体のデータ数をカウント; A列の最終行 -1は、先頭行分を引く
        
        
        Range("A1").AutoFilter field:=4, Criteria1:="女" '性別の女性を抽出
        
        
        WOMANCOUNT = Range("A1", Cells(ALLMAN, 1)).SpecialCells(xlCellTypeVisible).Count '抽出された女性をカウントする。
    
        MANCOUNT = ALLMAN - WOMANCOUNT     '全体のデータ数から女性のカウント数を引いて、男性のカウント数を計算する。
        
    
    
            MsgBox "全体で" & ALLMAN & "人です。男性は、" & MANCOUNT & "人です。女性は、" & WOMANCOUNT & "人です。"
        
        Range("A1").AutoFilter  'オートフィルタ―解除


End Sub

 

 

●実行前~実行後 ※全体の件数と男性のデータ件数・女性のデータ件数を表示する事が出来ました。
(画像クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA