Excel

【Excel】VBAマクロでオートフィルタをセル参照(リストを取得し、別シート、別ブック)する方法【Workbooks, Worksheets, Range, AutoFilter】

当サイトでは記事内に広告を含みます。

この記事では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】について確認しました。

マクロの扱いに慣れ、さらに快適な生活を送っていきましょう(^^)/