売上データの中から「特定のカテゴリの行だけ」を別の場所に抽出したいとき、結論から言うとFILTER関数を使えば、オートフィルタのように表示を絞り込むのではなく、条件に合う行だけを数式で別の範囲に書き出せます。この記事では基本の書き方、オートフィルタとの違い、複数条件での絞り込みまで解説します。
FILTER関数で条件に合うデータを抽出する基本の書き方
基本の形は次の通りです。
=FILTER(配列,含む条件,[空の場合])
「配列」で指定した範囲のうち、「含む条件」がTRUEになる行だけを、上から順に書き出す関数です。1つのセルに数式を入れるだけで、該当する行数ぶんの結果が自動的に展開されます(スピル)。
なぜオートフィルタではなくFILTER関数なのか
Excelのオートフィルタは、元の表の行を一時的に隠して条件に合う行だけを「表示」する機能です。表自体はそのままで、別の場所に抽出結果を残すことはできません。FILTER関数は数式として別のセル範囲に結果を書き出すため、元データを残したまま抽出結果だけを別表として扱えます。また元データが更新されれば抽出結果も自動的に再計算されます(Excel 2021・Microsoft 365以降で利用可能)。
具体例:カテゴリが「文具」の行だけを抽出する
次のような注文データ(A1:C8)があるとします。A列が担当者、B列がカテゴリ、C列が金額です。
| A(担当者) | B(カテゴリ) | C(金額) | |
|---|---|---|---|
| 2 | 佐藤 | 文具 | 1200 |
| 3 | 鈴木 | 雑貨 | 800 |
| 4 | 佐藤 | 雑貨 | 500 |
| 5 | 田中 | 文具 | 1500 |
| 6 | 鈴木 | 文具 | 900 |
| 7 | 佐藤 | 文具 | 700 |
| 8 | 高橋 | 雑貨 | 300 |
B列(カテゴリ)が「文具」の行だけを抽出したい場合、次のように書きます。
=FILTER(A2:C8,B2:B8="文具")
A2:C8の各行のうち、B列(カテゴリ)が「文具」の行だけを残す、という意味の数式です。
該当するのは2・5・6・7行目なので、「佐藤/文具/1200」「田中/文具/1500」「鈴木/文具/900」「佐藤/文具/700」の4行がそのまま抜き出されます。
複数条件で絞り込みたい場合
「文具」かつ「金額1000以上」のようにAND条件で絞り込みたい場合は、条件式を掛け算(*)でつなぎます。
=FILTER(A2:C8,(B2:B8="文具")*(C2:C8>=1000))
「文具」で「金額1000以上」の行だけを両方満たす行に絞り込む、という意味の数式です。OR条件(どちらか一方)にしたい場合は掛け算の代わりに足し算(+)を使います。この考え方はSUMPRODUCTでAND/OR条件の集計をする方法で紹介している条件の組み立て方と同じです。
よくあるエラー・注意点
- 該当する行が1つもないと#CALC!エラーになる: 条件に一致する行が0件の場合、第3引数「空の場合」を指定していないと#CALC!エラーになります。空の場合の表示(例えば空文字””)をあらかじめ指定しておくと安全です。
- スピル先に他のデータがあると#SPILL!エラーになる: 抽出結果は行数分のセルに自動展開されるため、展開先に既存のデータがあると#SPILL!エラーになります。
- 古いExcelでは使えない: FILTERはExcel 2021・Microsoft 365以降で追加された関数です。それより古いバージョンでは#NAME?エラーになります。
まとめ
FILTER関数は条件に合う行だけを元データを残したまま別表として抽出できるため、オートフィルタのように表示・非表示を都度切り替える手間がありません。抽出した結果をさらに並べ替えたい場合はSORT関数とFILTER関数を組み合わせて並び替え抽出する方法、重複を除いた一覧を作りたいだけであればUNIQUE関数で重複を除いたリストを作る方法もあわせてご覧ください。





