Excel VBA で AdvancedFilter を用い、抽出結果を別シートへ転記する方法

目次

概要

詳細設定フィルター(AdvancedFilter)の xlFilterCopy オプションを使用すると、抽出結果を元データとは別のシートやセル範囲へ直接コピーできます。本記事では、

  1. 元データ範囲
  2. 条件範囲(Criteria Range)
  3. 転記先範囲(CopyTo Range)
    を設定し、抽出結果だけを転記する実用的な VBA サンプルを解説いたします。

前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
元データシート DataB3:E150(見出し行を含む)
条件範囲シート CriteriaH2:H4(見出しセル+条件 2 行など)
転記先シート ResultA1 から
マクロ設置先標準モジュール

条件範囲の例

H2H3H4
Region= “East”= “West”
  • 見出しセル H2 には元データの列見出し「Region」をコピーしてください。
  • H3H4 などに抽出条件を縦方向に入力すると OR 条件として機能いたします。

VBA サンプルコード

Sub CopyFilteredData()

    Dim srcRange  As Range   ' 元データ
    Dim critRange As Range   ' 条件範囲
    Dim destCell  As Range   ' 転記先セル
    
    '--- 範囲オブジェクトの設定 ---
    Set srcRange  = Worksheets("Data").Range("B3").Resize(148, 4)  ' B3:E150
    Set critRange = Worksheets("Criteria").Range("H2:H4")          ' 見出し+条件
    Set destCell  = Worksheets("Result").Range("A1")               ' 転記先
    
    '--- AdvancedFilter の実行(抽出結果をコピー)---
    srcRange.AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=critRange, _
        CopyToRange:=destCell, _
        Unique:=False               ' 重複行を除外したい場合は True に変更
    
    MsgBox "抽出結果を Result シートへ転記しました。", vbInformation

End Sub

コード解説

説明
6–8Resize で元データ範囲(行数 148・列数 4)を設定しています。行数や列数はデータ量に応じて調整してください。
12–16Action:=xlFilterCopy により抽出結果を 転記 し、CopyToRange で転記先セルを指定しています。
14Unique:=FalseTrue に変更すると、重複レコードを除外してコピーできます。

応用ポイント

目的実装方法
転記先を既存データの下に追記したいdestCellWorksheets("Result").Cells(Rows.Count, 1).End(xlUp).Offset(1) に変更します。
複数列の AND 条件を設定したい条件範囲を横方向に見出し+条件セルを並べて入力します。
転記後に列幅を自動調整したいWorksheets("Result").Columns.AutoFit を追加してください。

よくある質問

質問回答
条件範囲を別ブックに置いても動作しますか。はい。CriteriaRange に他ブックの参照を渡せば実行可能ですが、ブックが開いている必要があります。
抽出後に元データの並び順は変わりますか。xlFilterCopy は元データを非表示にせずコピーするため、元データの並び順は一切変更されません。

まとめ

AdvancedFilter の xlFilterCopy を使用すると、抽出条件に一致した行だけを別シートへ瞬時に転記できます。元データを変更せずにレポート用シートを生成できるため、業務効率化に大いに役立ちます。上記コードを実行し、条件に応じたデータが Result シートへ正しく転記されることをご確認ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次