Excel VBA オートフィルターの条件を別シートから取得してデータ取得する方法

スポンサーリンク
スポンサーリンク

オートフィルターの条件を別シートから取得してデータ取得する方法

やりたい事

タイトルだけだと意味わからないかもですがやりたいことは、「テストデータ」シートのデータから「No」をキーにして「抽出」シートのA列を条件にフィルターをかけるという事をしていきます。

フィルター対象データ

抽出条件(A列のデータ型を文字列に必ずしておくこと)

結果

コード

「抽出」シートのデータを配列に格納するときに特に変換等をしていないため数値をいれておくとDouble型に判定されるため実行時エラーとなります。
そのためかならず「抽出」シートのA列を文字列にしておくこと。または今回はしてないですが配列のデータを文字列に変換すること。

Sub autofilterTest3()
    Dim arr2D As Variant
    Dim arr1D As Variant
    arr2D = Sheets("抽出").Range("A1:A3").Value
    arr1D = WorksheetFunction.Index(WorksheetFunction.Transpose(arr2D), 0)
        
    ActiveSheet.AutoFilterMode = False
    Sheets("テストデータ").Range("$A$1:$B$10").autofilter _
        Field:=1, _
        Criteria1:=arr1D, _
        Operator:=xlFilterValues
End Sub

解説

「抽出」シートのデータを配列に格納します。セル範囲を取得すると必ず2次元配列になるため5行目で2次元配列から1次元配列に変換しています。

    Dim arr2D As Variant
    Dim arr1D As Variant
    arr2D = Sheets("抽出").Range("A1:A3").Value
    arr1D = WorksheetFunction.Index(WorksheetFunction.Transpose(arr2D), 0)

上記で作成した1次元配列を条件にフィルターをかけます。

    Sheets("テストデータ").Range("$A$1:$B$10").autofilter _
        Field:=1, _
        Criteria1:=arr1D, _
        Operator:=xlFilterValues

autofilterの基本的な構文や使いかたは以下の記事を参考にしてください。

Excel VBA オートフィルターで3つ以上のOR条件で抽出する方法(AutoFilter)
オートフィルターで3つ以上のOR条件で抽出する方法 エクセルのオートフィルタ機能をVBAを使用してデータを抽出します。 AutoFileterの構文は以下になります。 expression.AutoFilter (Field, Criter...

コメント

タイトルとURLをコピーしました