【ExcelVBA】オートフィルタでデータ抽出

ExcelVBA,オートフィルタ

抽出編

テスト対象のテーブル



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



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

データ抽出(単数)

Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:="みかん"

End Sub
※「 Field:=1 」は A列 です。

結果


実行前のテーブル


データ抽出(複数)

パターン1:配列を使う方法
Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:=Array("みかん", "りんご"), _
        Operator:=xlFilterValues
    
End Sub
※「 Field:=1 」は A列 です。

パターン2:配列を使う方法(配列変数を宣言)
Sub Sample()

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

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:=Target, _
        Operator:=xlFilterValues

End Sub
※「 Field:=1 」は A列 です。

パターン3:Criteriaプロパティを使う方法
Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:="みかん", _
        Operator:=xlOr, _
        Criteria2:="りんご"
    
End Sub
※「 Field:=1 」は A列 です。

結果


実行前のテーブル



複数条件一致でデータ抽出

下は、B列が「2以上」かつ「3以下」のデータ抽出例
Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=2, _
        Criteria1:=">=2", _
        Operator:=xlAnd, _
        Criteria2:="<=3"
    
End Sub
※「 Field:=2 」は B列 です。

結果


実行前のテーブル



複合条件一致でデータ抽出

Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:="みかん"
    
    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=2, _
        Criteria1:="=3"
    
End Sub
※「 Field:=1 」は A列 です。
※「 Field:=2 」は B列 です。

結果


実行前のテーブル



否定条件でデータ抽出

Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:="<>みかん"
    
End Sub
※「 Field:=1 」は A列 です。

結果


実行前のテーブル



否定条件でデータ抽出(否定条件複数)

パターン1:Criteriaプロパティを使う方法
Sub Sample()

    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:="<>みかん", _
        Operator:=xlAnd, _
        Criteria2:="<>りんご"
    
End Sub
※「 Field:=1 」は A列 です。

パターン2:Transpose関数とFilter関数を併用する方法
Sub Sample()
 
    Dim Target As Variant

    Target = Application.Transpose(ThisWorkbook.ActiveSheet.Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row))
    
    Target = Filter(Target, "みかん", False)
    Target = Filter(Target, "りんご", False)
     
    ActiveSheet.Range("A1").AutoFilter _
        Field:=1, _
        Criteria1:=Target, _
        Operator:=xlFilterValues
        
End Sub
※「 Field:=1 」は A列 です。

結果


実行前のテーブル



抽出結果から行番号を取得

※行番号を Debug.Print で イミディエイトウィンドウに表示させます。
Sub Sample()

  'オートフィルタ
  ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
    Field:=1, _
    Criteria1:="みかん"
    
  Dim MaxRow As Long
  Dim r As Long
  
  MaxRow = ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count
  
  '行番号取得
  For r = 2 To MaxRow
    If ThisWorkbook.ActiveSheet.Cells(r, 1).EntireRow.Hidden = False Then
        Debug.Print r & " 行目 " & Cells(r, 1)
    End If
  Next
    
End Sub
※「 Field:=1 」は A列 です。

結果のイミディエイトウィンドウ
3 行目 みかん
6 行目 みかん


実行前のテーブル



その他編

Criteria プロパティでの条件指定例

条件例結果例
Criteria1:="みかん"みかん
Criteria1:="<>みかん"みかん以外
Criteria1:="="(空白)のみ
Criteria1:="<>"(空白)以外
Criteria1:="*かん"みかん、きょうかん、あくだいかん、etc
Criteria1:="?かん"みかん、やかん、じかん、おかん、etc
Criteria1:="5"5
Criteria1:="=5"5
Criteria1:="<=5"5以下
Criteria1:=">=5"5以上
Criteria1:="<5"5未満
Criteria1:=">5"5超過
Criteria1:="2019/5/26"2016/5/26の日付
Criteria1:="=2019/5/26"2016/5/26の日付
Criteria1:=">=2019/5/26"2016/5/26以降の日付
Criteria1:="<=2019/5/26"2019/5/26以前の日付
Criteria1:=">2019/5/26"2019/5/26より後の日付
Criteria1:="<2019/5/26"2019/5/26より前の日付
日付指定の注意点 セルの書式は「日付」であること。また、セルの表示形式が 2019/5/26 であれば、Criteria1:="2019/5/26" の記述にします。 セルの表示形式が 2019/05/26 であれば、Criteria1:="2019/05/26" の記述にします。表示形式に相違があるだけでフィルタにヒットしないためご注意ください。

抽出データを他シートへコピー&ペースト

下の記事をご参考までに。


オートフィルタでデータ集計

下の記事をご参考までに。


XlAutoFilterOperator クラスの説明

フィルタによって適用される 2 つの条件を関連付けるために使用する演算子を指定します。
名前説明
xlor引数 criteria1 または Criteria2 の論理和
xland引数 criteria1 および Criteria2 の論理積
xlfiltervaluesフィルターの値
xlBottom10Items表示される最低値項目 (引数 criteria1 で指定されているアイテムの数)
xlBottom10Percent表示される最低値項目 (引数 criteria1 で指定される割合)
xlfiltercellcolorセルの色
xlfilterdynamic動的フィルター
xlfilterfontcolorフォントの色
xlfiltericonフィルター アイコン
xlTop10Items表示される最高値項目 (引数 criteria1 で指定されているアイテムの数)
xlTop10Percent表示される最高値項目 (引数 criteria1 で指定される割合)