Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

複数のExcelシートを扱っていると、可読性を高めるために、特定の条件を満たすデータだけを別のシートへコピーしたい場面があります。そんなとき、VBAを使えば、Excel上のあらゆる操作を最も効率的かつ安全に実行できます。本記事では、VBAマクロとフィルターオプション(詳細設定)を組み合わせて、条件に合致したデータを別シートにコピーする方法を、3つのアプローチから詳しく解説します。

サンプルデータについて

以下のようなデータセットを例に説明します。「Original」というワークシートに、範囲B4~E12のデータが入力されており、重複値も含まれています。また、範囲G4:H5には抽出条件(Name列が「John」かつMarksが80未満)が設定されています。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

このデータセットをもとに、次の3つの方法を順番に見ていきましょう。

  • 条件をコードに直接記述してコピーする方法
  • ユーザーが選択した範囲を対象にフィルタリングする方法
  • マクロの記録機能を使って別シートへ転送する方法

方法1:VBAコードを直接埋め込んでコピーする

まずは、「Original」シートからJohnの点数(Marks)が80未満のデータだけを、「Target」シートへフィルターオプションでコピーするVBAコードを紹介します。

手順

  • キーボードでAlt + F11を押すか、リボンの開発 → Visual Basicを選択して、VBE(Visual Basic Editor)を開きます。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • メニューバーから挿入 → 標準モジュールをクリックします。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 表示されたコードウィンドウに、以下のコードをコピー&ペーストします。
Sub AdvancedFilterCode()
Dim iRange As Range
Dim iCriteria As Range
'フィルター対象範囲と条件範囲を設定
Set iRange = Sheets("Original").Range("B4:E12")
Set iCriteria = Sheets("Original").Range("G4:H5")
'抽出結果をコピー先へ出力
iRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=iCriteria, CopyToRange:=Sheets("Target").Range("B4:E4"), Unique:=True
End Sub
  • F5キーを押すか、メニューバーの実行 → Sub/ユーザーフォームの実行を選択してマクロを実行します。サブメニューバーの小さな実行アイコンをクリックしても構いません。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

コードの実行後、結果は下図のようになります。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

その結果、JohnのMarksが80未満のデータだけが、VBAのフィルターオプションによって「Original」シートから「Target」シートへコピーされました。

方法2:ユーザーが選択した範囲でフィルタリングするマクロ

続いて、InputBoxでユーザーに範囲を選択させながら、「Original」シートからJohnのMarksが80未満のデータを「Destination」シートへ抽出する方法を解説します。この方法なら、条件範囲やコピー先を実行時に柔軟に指定できます。

手順

  • 前述と同じ手順でVBEを開き、標準モジュールを挿入します。
  • コードウィンドウに、以下のコードを貼り付けます。
Sub AdvancedFilterBySelection()
Dim iTrgt As String
Dim iRange As Range
Dim iCriteria As Range
Dim iDestination As Range
On Error Resume Next
iTrgt = ActiveWindow.RangeSelection.Address
Set iRange = Application.InputBox("Select Range to Filter", "Excel", iTrgt, , , , , 8)
If iRange Is Nothing Then Exit Sub
Set iCriteria = Application.InputBox("Select Criteria Range", "Excel", "", , , , , 8)
If iCriteria Is Nothing Then Exit Sub
Set iDestination = Application.InputBox("Select Destination Range", "Excel", "", , , , , 8)
If iDestination Is Nothing Then Exit Sub
iRange.AdvancedFilter xlFilterCopy, iCriteria, iDestination, False
iDestination.Worksheet.Activate
iDestination.Worksheet.Columns.AutoFit
End Sub
  • マクロを実行すると、ポップアップが表示されるので、フィルターしたい範囲(ここではB4~E12)を選択してOKを押します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 次に、条件範囲(ここではセルG4:H5)を選択してOKを押します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 最後に、コピー先の範囲(ここでは「Destination」シートのセルB2)を選択してOKを押します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

実行結果は下図のとおりです。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

これで、JohnのMarksが80未満のデータだけが、VBAのフィルターオプションによって「Destination」シートへコピーされました。

方法3:マクロの記録機能を使って別シートへコピーする

最後に、マクロの記録機能を利用して、「Original」シートからJohnのMarksが80未満のデータを「Filtered」シートへ抽出する方法を紹介します。VBAコードを書かずに操作を記録できるのが魅力です。

手順

  • まず、新しいワークシート(ここでは「Filtered」シート)を開きます。
  • そのシートには、元データの見出し行のみを入力しておきます。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 次に「Original」シートへ移動し、シート左下にある小さなマクロ記録ボタンをクリックして、記録を開始します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • マクロの記録」ダイアログが表示されるので、任意のマクロ名を入力します(ここでは「AdvancedFilter」としました)。
  • マクロの保存先を選択します。既存のブックに保存する場合は「作業中のブック」を選びます。
  • OKをクリックすると、記録が始まります。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • コピー先となるシート(例:「Filtered」シート)に移動し、任意のセルをアクティブにした状態で、リボンのデータ → 詳細設定を選択します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • フィルターオプションの設定」ダイアログが表示されます。
  • まず、動作欄で「指定した範囲」にチェックを入れます。
  • リスト範囲」のテキストボックスには、「Original」シートの抽出対象範囲(ここではB4:E12)を指定します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 検索条件範囲」には、条件(JohnのMarksが80未満)が入力された範囲(ここではG4:H5)を指定します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 抽出範囲」には、コピー先の「Filtered」シートの見出し範囲(ここではB4:E4)を指定します。
  • 最後にOKをクリックします。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

一連の操作の結果は下図のとおりです。JohnのMarksが80未満のデータだけが、マクロの記録によって「Filtered」シートへコピーされました。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 最後に、シート左下のマクロ記録ボタンをもう一度クリックして、記録を停止します。以降はこのマクロを実行するたびに、同じ処理が自動的に行われます。

注意点:元データが更新されても自動反映されない

ただし、この方法には欠点があります。「Original」シートに新しいデータを追加しても、条件を満たしていても「Filtered」シートは自動更新されません。

そこで、新しいデータを追加した際にもコードの実行だけで反映されるよう、記録されたコードを少し修正しましょう。

手順

  • リボンから表示 → マクロ → マクロの表示を選択します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • マクロ」ダイアログで、先ほど記録したマクロ名(ここでは「AdvancedFilter」)を選択し、編集をクリックします。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 記録されたコードがコードウィンドウに表示されます(下図参照)。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • コード内の不要な部分(下図の青く示された箇所)を削除します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 続いて、下図のようにコードを修正します。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 修正後のコードは以下のとおりです。
Sub AdvancedFilter()
Sheets("Original").Range("B4").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Original").Range("G4:H5"), CopyToRange:=Sheets("Filtered").Range("B4:E4"), Unique:=False
End Sub
  • コードを保存します。
  • 「Original」シートに戻り、条件に合う新しいデータを追加してみましょう。たとえば、Marksが76のJohnの行を追加します(Marks<80の条件を満たしています)。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 修正したコードを実行すると、結果は下図のようになります。

【VBA】Excelのフィルターオプション(詳細設定)でデータを別シートにコピーする3つの方法

  • 条件(Marks<80)を満たす、Marks 76のJohnの行が新しく「Filtered」シートにコピーされていることが確認できます。

まとめ

本記事では、VBAマクロとフィルターオプション(詳細設定)を組み合わせて、条件に合致したデータを別シートへコピーする3つの方法を解説しました。コードを直接書く方法、ユーザー選択型のマクロ、マクロの記録を活用する方法と、それぞれ特徴があるので、目的やスキルレベルに応じて使い分けてください。ご不明な点があれば、お気軽にお問い合わせください。

  1. Excel VBAでデータ入力フォームを作成する方法【初心者向け3ステップ完全ガイド】

    ExcelでVBAを活用していると、多くの方がデータ入力フォームの作成でつまずく経験をします。本記事では、VBAを使ってExcelに見栄えが良く使いやすいデータ入力フォームを作成する方法を、わかりやすく解説します。 Excel VBAでデータ入力フォームを作る3つの簡単ステップ ここでは、Washington(ワシントン)・New York(ニューヨーク)・California(カリフォルニア)という3つのワークシートを用意しました。これらには、銀行の3つの支店の顧客の氏名・連絡先・年齢・性別のデータが登録されています。 今回の目標は、VBAを使用してこのデータベースに新しいデータを入力できる

  2. Excelで別シートからデータをマッピングする6つの便利な方法

    複数のワークシートを行き来しながら作業することは、Excelユーザーにとってごく日常的なことです。しかし、シート間でデータをマッピング(対応付け)するのは非常に時間のかかる作業になりがちです。そこで本記事では、別シートからデータをマッピングするための6つの便利な方法を、具体例とともにわかりやすく解説します。 サンプルファイルのダウンロード こちらからサンプルファイルをダウンロードして、実際に手を動かしながら練習してみてください。 Excelで別シートからデータをマッピングする6つの方法 説明用として、ここでは2つのデータセットを用意しました。1つ目は、注文番号・顧客名・国の情報をまとめたも