この記事ではVBAマクロでオートフィルタをセル参照(リストを取得し、別シート、別ブック)する方法【Workbooks, Worksheets, Range, AutoFilter】について解説していきます。
ポイントとしてはWorkbooks, Worksheets, Range, AutoFilterを使用することです。
なお、マクロ初心者でもわかりやすいように変数名をaaaaa変数aaaaaといった名称にしています。そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。
それでは詳しく見ていきましょう!
VBAマクロでオートフィルタを別シートのセル参照で行う方法
それではまず、別シートのセル参照でオートフィルタを行う方法について解説していきます。
具体的には”sansho”シートのA列の2行目から最終行までをフィルタ条件(オートフィルタにかけた後にチェックを入れるもの)として取得し、”ok”列に適用します。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub FilterFromAnotherSheet()
Dim aaaaaSheetSourceaaaaa As Worksheet
Dim aaaaaSheetTargetaaaaa As Worksheet
Dim aaaaaLastRowaaaaa As Long
Dim aaaaaCriteriaRangeaaaaa As Range
' ソースシートとターゲットシートを設定
Set aaaaaSheetSourceaaaaa = ThisWorkbook.Sheets("sansho")
Set aaaaaSheetTargetaaaaa = ThisWorkbook.Sheets("メインシート")
' ソースシートの最終行を取得
aaaaaLastRowaaaaa = aaaaaSheetSourceaaaaa.Cells(aaaaaSheetSourceaaaaa.Rows.Count, "A").End(xlUp).Row
' フィルタ条件となる範囲を設定
Set aaaaaCriteriaRangeaaaaa = aaaaaSheetSourceaaaaa.Range("A2:A" & aaaaaLastRowaaaaa)
' ターゲットシートでオートフィルタを実行
With aaaaaSheetTargetaaaaa.Range("ok1:ok" & aaaaaLastRowaaaaa)
.AutoFilter Field:=1, Criteria1:=Application.Transpose(aaaaaCriteriaRangeaaaaa.Value), Operator:=xlFilterValues
End With
End Sub
コードのAlt+F8を押し、マクロ選択画面でFilterFromAnotherSheet関数を実行します。
このコードでは、まず”sansho”シートとターゲットシートをWorksheetオブジェクトとして変数に格納します。
次に、”sansho”シートのA列で使用されている最後の行を特定し、フィルタ条件となる範囲に指定します。
【使用関数:Workbooks, Worksheets, Range, AutoFilter】
VBAマクロでオートフィルタを別ブックのセル参照で行う方法
続いては、別ブックのセル参照でオートフィルタを行う方法について解説していきます。
上述の別シートのセル参照での条件抽出とほぼ同じですが、参照先が別ブックとしています!
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub Filter
FromAnotherWorkbook()
Dim aaaaaWorkbookSourceaaaaa As Workbook
Dim aaaaaSheetSourceaaaaa As Worksheet
Dim aaaaaSheetTargetaaaaa As Worksheet
Dim aaaaaLastRowaaaaa As Long
Dim aaaaaCriteriaRangeaaaaa As Range
' 別ブックを開く(ここでは"参照ブック.xlsx"を開いています)
Set aaaaaWorkbookSourceaaaaa = Workbooks.Open("参照ブック.xlsx")
Set aaaaaSheetSourceaaaaa = aaaaaWorkbookSourceaaaaa.Sheets("sansho")
Set aaaaaSheetTargetaaaaa = ThisWorkbook.Sheets("メインシート")
' ソースシートの最終行を取得
aaaaaLastRowaaaaa = aaaaaSheetSourceaaaaa.Cells(aaaaaSheetSourceaaaaa.Rows.Count, "A").End(xlUp).Row
' フィルタ条件となる範囲を設定
Set aaaaaCriteriaRangeaaaaa = aaaaaSheetSourceaaaaa.Range("A2:A" & aaaaaLastRowaaaaa)
' ターゲットシートでオートフィルタを実行
With aaaaaSheetTargetaaaaa.Range("ok1:ok" & aaaaaLastRowaaaaa)
.AutoFilter Field:=1, Criteria1:=Application.Transpose(aaaaaCriteriaRangeaaaaa.Value), Operator:=xlFilterValues
End With
' 作業が終わったら参照ブックを閉じる
aaaaaWorkbookSourceaaaaa.Close False
End Sub
コードのAlt+F8を押し、マクロ選択画面でFilterFromAnotherWorkbook関数を実行します。
このコードでは、まずWorkbooksオブジェクトを使用して別ブックを開き、そこから必要な情報を取得(フィルタをかける際の条件)します。
処理の最後には開いた参照ブックを閉じることを忘れないようにしましょう。
【Workbooks, Worksheets, Range, AutoFilter】
まとめ VBAマクロでオートフィルタをリストを取得(別シート、別ブック)しセル参照にする方法【Workbooks, Worksheets, Range, AutoFilter】
ここでは、VBAマクロでオートフィルタをセル参照(リストを取得し、別シート、別ブック)する方法【Workbooks, Worksheets, Range, AutoFilter】について確認しました。
マクロの扱いに慣れ、さらに快適な生活を送っていきましょう(^^)/