オートフィルターの条件を別シートから取得してデータ取得する方法
やりたい事
タイトルだけだと意味わからないかもですがやりたいことは、「テストデータ」シートのデータから「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...
コメント