Excelで一覧表を管理していると、特定の担当者だけ、指定した月だけ、あるいは複数条件に一致する行だけを別シートへ抜き出したい場面があります。
手作業でコピーすると転記漏れや更新忘れが起こりやすいため、関数やフィルター、VBAを使って抽出を自動化する方法が便利です。
この記事では、1行目に見出しがある売上データを例に、別シートへデータを抽出する基本操作から、FILTER関数による複数条件抽出、旧バージョンでも使える関数、マクロまでを解説します。
データ抽出を効率化するポイントです。
・Microsoft 365やExcel 2021以降ではFILTER関数が便利です。
・条件をセルに入力しておくと、担当者や商品名を切り替えやすくなります。
・元データの列構成を固定すると、別シートへの自動抽出が安定します。
抽出先のシート名は「抽出結果」、元データのシート名は「売上データ」として説明を進めます。
FILTER関数で別シートへ自動抽出する方法
それではまず、Excelのデータを別シートへ自動で抜き出す最も手軽な方法について解説していきます。
| 日付 | 担当者 | 商品 | 売上 |
|---|---|---|---|
| 2026/9/1 | 佐藤 | A商品 | 12000 |
| 2026/9/2 | 田中 | B商品 | 8500 |
| 2026/9/3 | 佐藤 | C商品 | 15000 |
FILTER関数は、指定した範囲のうち条件に合う行だけを表示できる動的配列関数です。
抽出元のデータが追加または変更されると、数式を入れた別シートの結果も自動更新されます。
抽出用シートと条件セルの準備
抽出先となる「抽出結果」シートを作成し、A1からD1までに元データと同じ見出しを入力します。
続いて、F1に「担当者」、F2に抽出したい担当者名を入力します。
この例ではF2に「佐藤」と入力します。
条件を数式の中に直接書くこともできますが、条件セルを設けたほうが日常の集計では扱いやすくなります。
担当者名をF2で変更するだけで抽出結果を切り替えられる構成です。
元データ側では、A列が日付、B列が担当者、C列が商品、D列が売上であり、1行目を見出しとして使います。
データの途中に空白行を作ると管理しにくくなるため、一覧は連続した行に入力しましょう。
抽出条件は、抽出結果シートのF2など、表本体から少し離れたセルに置くと見やすくなります。
担当者を条件にしたFILTER関数
抽出結果シートのA2を選択し、次の数式を入力します。
=FILTER(売上データ!A2:D100,売上データ!B2:B100=F2,”該当データなし”)
最初の「売上データ!A2:D100」は、別シートへ表示したい抽出対象の範囲です。
次の「売上データ!B2:B100=F2」は、担当者列の値が抽出結果シートのF2と一致するかを判定しています。
最後の「該当データなし」は、条件に合う行が1件もない場合に表示する文字です。
FILTER関数は結果が複数行でも、入力したA2から下方向へ自動的に展開されます。
数式の展開先に文字や別の数式が入っていると、スピルエラーになることがあります。
抽出結果の表の下側と右側は、空白にしておくと安心です。

範囲指定とテーブル化の考え方
上の式ではA2:D100としているため、100行を超えるデータは抽出対象に含まれません。
将来の行追加を考えるなら、元データをテーブルに変換してから数式を作る方法が便利です。
売上データの範囲内を選択し、CtrlキーとTキーを押してテーブルを作成します。
テーブル名を「売上一覧」に変更した場合は、次のような式にできます。
=FILTER(売上一覧,売上一覧[担当者]=F2,”該当データなし”)
テーブルでは新しい行を追加した際に参照範囲が自動的に広がります。
毎日データが増える台帳では、固定範囲よりテーブル参照のほうが保守しやすい方法です。
【操作のポイント】FILTER関数を入力するセル以外の展開予定範囲は空けておき、元データはテーブル化すると行追加にも対応しやすくなります。
複数条件でデータを抽出する数式
続いては、担当者と商品、日付と金額など、複数の条件を組み合わせて抽出する数式を確認していきます。
| 日付 | 担当者 | 商品 | 売上 |
|---|---|---|---|
| 2026/9/1 | 佐藤 | A商品 | 12000 |
| 2026/9/3 | 佐藤 | C商品 | 15000 |
複数条件の抽出では、すべて満たす条件なのか、いずれかを満たせばよい条件なのかを先に整理することが大切です。
AND条件は掛け算、OR条件は足し算で結合するのがFILTER関数の基本です。
AND条件で担当者と商品を絞り込む方法
抽出結果シートのF2に担当者、G2に商品名を入力しておきます。
たとえばF2に「佐藤」、G2に「A商品」と入力し、その両方に一致する行を表示する場合の数式は次のとおりです。
=FILTER(売上データ!A2:D100,(売上データ!B2:B100=F2)*(売上データ!C2:C100=G2),”該当データなし”)
丸かっこで囲まれた二つの判定式は、それぞれ一致ならTRUE、不一致ならFALSEを返します。
掛け算を使うと、両方がTRUEの行だけが1となり、FILTER関数の抽出対象になります。
条件式の間にアスタリスクを入れることが重要です。
複数の条件をすべて満たすデータだけを別シートに表示したいときに向いています。
担当者別かつ商品別の売上確認では、AND条件を使うと必要な行だけに絞れます。
OR条件で複数の担当者を抽出する方法
「佐藤または田中」のように、どちらか一方に一致すればよい場合は、条件式を足し算でつなげます。
F2に「佐藤」、G2に「田中」を入力した場合は、次の数式を使用できます。
=FILTER(売上データ!A2:D100,(売上データ!B2:B100=F2)+(売上データ!B2:B100=G2),”該当データなし”)
足し算の結果が1以上になる行は、いずれかの条件に一致していると判断されます。
同じ担当者名を二つの条件セルに入力しても、抽出結果が重複して表示されるわけではありません。
OR条件は、複数の営業担当者、複数の商品区分、複数のステータスをまとめて確認したい場合に役立ちます。
条件が増えるほど数式は長くなるため、条件の種類を増やしすぎない設計も必要です。

日付と数値を使った条件指定
日付の期間を指定する場合は、開始日をF2、終了日をG2に入力して比較します。
2026年9月1日から2026年9月30日までのデータを抽出する数式は次のようになります。
=FILTER(売上データ!A2:D100,(売上データ!A2:A100>=F2)*(売上データ!A2:A100<=G2),”該当データなし”)
F2とG2には文字列ではなく、Excelが日付として認識できる値を入力しましょう。
売上が10,000円以上という条件も同じ考え方で作成できます。
売上列がD列なら、条件式を「売上データ!D2:D100>=10000」とします。
日付や金額で抽出できない場合は、見た目ではなくセルのデータ型を確認することが近道です。
【操作のポイント】すべて満たす条件は掛け算、どれかに一致する条件は足し算で結合し、日付セルは日付形式として入力します。
FILTER関数が使えない場合の抽出方法
続いては、FILTER関数が搭載されていないExcel 2019以前などで、別シートへ抽出する方法を確認していきます。
| 担当者 | 商品 | 売上 |
|---|---|---|
| 佐藤 | A商品 | 12000 |
| 佐藤 | C商品 | 15000 |
旧バージョンでは、詳細設定フィルター、INDEX関数、AGGREGATE関数などを組み合わせる方法があります。
データ量や更新頻度に応じて、無理のない手段を選びましょう。
詳細設定フィルターによる別場所への抽出
詳細設定フィルターは、条件に一致するレコードを別の場所へコピーできるExcel標準機能です。
まず元データの見出しを含む範囲を選択し、データタブにある詳細設定を選びます。
一覧範囲には売上データの表全体、検索条件範囲には条件用の見出しと条件値を指定します。
「指定した範囲に抽出」を選び、抽出先に抽出結果シートのA1を指定すると、条件に一致したデータがコピーされます。
詳細設定フィルターは関数ではないため、元データを変更した後は再実行が必要です。
一度だけ抽出して提出用の一覧を作る場合には、シンプルで扱いやすい方法です。
INDEX関数とAGGREGATE関数の組み合わせ
数式で自動更新したい場合は、INDEX関数とAGGREGATE関数を組み合わせる方法があります。
抽出結果シートのA2に、担当者がF2と一致する元データの日付を表示する例を考えます。
=IFERROR(INDEX(売上データ!A$2:A$100,AGGREGATE(15,6,(ROW(売上データ!A$2:A$100)-ROW(売上データ!A$2)+1)/(売上データ!B$2:B$100=$F$2),ROWS(A$2:A2))),””)
AGGREGATE関数は、条件に一致する行番号を小さい順に取り出します。
INDEX関数は、その行番号を使ってA列の日付を返します。
式を下方向へコピーすると、条件に一致する2件目、3件目のデータを順に表示できます。
商品名や売上を表示する列では、INDEX関数の参照列だけをC列やD列に変更します。
旧Excel向けの数式は複雑になりやすいため、見出しや条件セルの位置を固定して管理するのが安全です。

オートフィルとエラー処理の注意点
INDEX関数とAGGREGATE関数の式は、最初の抽出セルに入力した後、必要な行数まで下へコピーします。
数式を右へコピーする場合は、列参照が意図せず変わらないか確認しましょう。
IFERROR関数で空文字を返す設定にしておくと、該当件数より下の不要なエラー表示を隠せます。
ただし、元データに本来のエラーがある場合も空白になるため、初期設定時には数式の動作を丁寧に確認することが大切です。
データ件数が非常に多いブックでは、複雑な配列計算によって処理が重くなるかもしれません。
【操作のポイント】旧バージョンでは、更新頻度が低ければ詳細設定フィルター、常に反映させたいならINDEX関数とAGGREGATE関数を検討します。
フィルターとVBAによる抽出の自動化
続いては、操作を繰り返す業務で役立つオートフィルターとVBAによる抽出の自動化を確認していきます。
| 抽出条件 | 抽出方法 | 向いている場面 |
|---|---|---|
| 担当者を手動選択 | オートフィルター | 一時的な確認 |
| 毎回同じ処理 | VBA | 定型業務 |
マクロを使うと、条件入力、抽出、別シートへのコピー、書式設定までを一連の操作として実行できます。
同じ抽出作業を何度も行うなら、VBAで手順を固定すると時間短縮につながります。
オートフィルターで必要な行を表示する操作
元データの表内のセルを選択し、データタブのフィルターをクリックします。
見出し行に表示された下向き矢印から、担当者や商品、日付の条件を選択できます。
担当者列で「佐藤」だけにチェックを付ければ、佐藤のデータだけが画面に表示されます。
表示された行をコピーして別シートへ貼り付ける方法は、少量の作業なら十分実用的です。
ただし、抽出条件を変えるたびに操作が必要になるため、定型処理には関数やVBAのほうが向いています。
Sub 佐藤のデータを抽出()
Worksheets("売上データ").Range("A1:D100").AutoFilter Field:=2, Criteria1:="佐藤"
Worksheets("売上データ").Range("A1:D100").SpecialCells(xlCellTypeVisible).Copy
Worksheets("抽出結果").Range("A1").PasteSpecial
Application.CutCopyMode = False
Worksheets("売上データ").AutoFilterMode = False
End Sub
このコードは、B列にある担当者が「佐藤」の行を抽出し、抽出結果シートへコピーする例です。
マクロで抽出結果シートを更新するコード
より実務的には、抽出結果シートのF2に入力した担当者名を条件として使うと便利です。
次のVBAでは、抽出結果シートの既存データを消去してから、元データをフィルターで抽出します。
Sub データ抽出更新()
Dim 条件名 As String
条件名 = Worksheets("抽出結果").Range("F2").Value
Worksheets("抽出結果").Range("A2:D1000").ClearContents
Worksheets("売上データ").Range("A1:D1000").AutoFilter Field:=2, Criteria1:=条件名
Worksheets("売上データ").Range("A1:D1000").SpecialCells(xlCellTypeVisible).Copy
Worksheets("抽出結果").Range("A1").PasteSpecial
Application.CutCopyMode = False
Worksheets("売上データ").AutoFilterMode = False
End Sub
「Field:=2」は、選択範囲の左から2列目、つまり担当者列を条件にする指定です。
抽出元の列順を変えた場合は、この番号も見直す必要があります。
VBAを保存するブックは、通常のxlsxではなくxlsm形式で保存します。
マクロの実行前には、元データと抽出結果のシート名がコードと一致しているか確認しましょう。
この画面では、F2に入力した条件を基準にして抽出を更新する流れを示しています。
VBA実行時のエラーと安全な運用
該当するデータがない状態でSpecialCellsを実行すると、実行時エラーになることがあります。
実運用では、抽出前に件数を確認する処理や、エラー時にメッセージを表示する処理を追加すると安心です。
また、マクロ付きファイルを共有する場合は、ファイルの保存場所やセキュリティ設定にも注意が必要です。
信頼できない送信元のマクロは実行せず、組織のルールに従って利用しましょう。
VBAは便利ですが、最初はコピーして使うだけでなく、対象シート名と対象範囲を必ず確認する習慣が重要です。
【操作のポイント】定型的な抽出はVBAで自動化でき、条件セルを使うと利用者がコードを編集せずに抽出内容を変更できます。
抽出データを見やすく管理する設定
続いては、別シートへ抜き出したデータを見やすく保ち、集計ミスを防ぐための設定を確認していきます。
| 設定項目 | 目的 | 効果 |
|---|---|---|
| テーブル化 | 範囲の拡張 | 行追加に対応 |
| 入力規則 | 条件入力の統一 | 表記ゆれを防止 |
抽出式が正しくても、条件の入力ゆれや元データの欠損があると期待した結果になりません。
表の構造を整えることも、自動抽出を成功させる大切な要素です。
見出しとデータ形式の統一
元データの1行目には、日付、担当者、商品、売上のように意味がわかる見出しを入れます。
同じ列の中に、数値と文字列、日付と日付らしい文字を混在させないことが重要です。
たとえば売上列に「12,000円」と文字で入力すると、数値比較や合計で想定外の結果になる場合があります。
抽出元の表を整えることは、数式を複雑にするより効果的なエラー対策です。
部署名や担当者名も、「佐藤」「佐藤さん」のように表記を統一しましょう。
入力規則のリストを使えば、担当者名を選択式にして表記ゆれを減らせます。
空白条件とワイルドカードの扱い
条件セルが空白の場合に全件を表示したいときは、FILTER関数の条件式を少し工夫します。
F2が空白なら全件、値が入っていれば担当者で絞り込む数式は次のとおりです。
=FILTER(売上データ!A2:D100,(F2=””)+(売上データ!B2:B100=F2),”該当データなし”)
F2が空白であれば最初の条件がすべての行で成立するため、元データ全体を表示できます。
部分一致で抽出したい場合は、SEARCH関数やCOUNTIF関数を組み合わせる方法もあります。
ただし、似た名称まで抽出される可能性があるため、担当者名のような厳密な条件では完全一致が基本です。
空白時の動作をあらかじめ決めておくと、利用者が条件を消したときにも混乱しません。
抽出結果の並べ替えと印刷範囲
FILTER関数の結果を売上の高い順や日付順に並べたい場合は、SORT関数と組み合わせます。
売上列を降順に並べる例では、FILTER関数をSORT関数で囲みます。
=SORT(FILTER(売上データ!A2:D100,売上データ!B2:B100=F2,”該当データなし”),4,-1)
4は抽出範囲内の4列目である売上列、マイナス1は降順を表します。
抽出結果を印刷するなら、タイトル行を設定し、不要な条件入力欄が印刷されないよう印刷範囲を確認しましょう。
日付ごとの提出資料では、抽出日や条件名を表の上部に表示しておくと後から確認しやすくなります。
【操作のポイント】列のデータ形式と表記を統一し、条件セルが空白の場合の動作や印刷時の表示まで設計すると実務で使いやすくなります。
まとめ エクセルのデータを別シートへ抽出する方法
Excelのデータを別シートへ抽出する方法では、Microsoft 365やExcel 2021以降ならFILTER関数を使う方法が特に手軽です。
担当者など一つの条件なら単純な比較式で抽出でき、複数条件では掛け算によるAND条件、足し算によるOR条件を使い分けます。
元データをテーブル化し、条件を専用セルに置くと、データ追加と条件変更に強い抽出表になります。
FILTER関数が使えないExcelでは、詳細設定フィルター、INDEX関数とAGGREGATE関数の組み合わせも選択肢です。
毎回同じ条件でコピーや転記を行う業務では、VBAのマクロで抽出処理を自動化するとよいでしょう。
ただし、数式やマクロの前に、見出し行、日付形式、数値形式、担当者名の表記を整えることが欠かせません。
目的に合う抽出方法を選び、更新しやすく間違いにくいExcelファイルを作っていきましょう。