Excelで、条件に合う行だけを別の場所に取り出したい場面は多い。
オートフィルターでも絞り込みはできるが、毎回条件を選び直したり、結果を別シートへコピーしたりする作業が発生する。
FILTER関数を使うと、条件に合うデータを数式で抽出し、別のセル範囲に自動表示できる。
ただし、FILTER関数は便利な一方で、複数条件、別シート参照、該当なし、スピルエラーなどで詰まりやすい。
この記事では、FILTER関数の基本から、複数条件、別シート、エラー対策、SORT関数やUNIQUE関数との組み合わせまで整理する。
FILTER関数とは
FILTER関数は、指定した条件に合うデータを抽出する関数である。
元データを直接削除したり、並べ替えたりするわけではない。
条件に合った結果を、数式を入力したセルから右方向・下方向へ広がる形で表示する。
このように、数式の結果が複数セルに広がって表示される動きを「スピル」と呼ぶ。
FILTER関数の基本形は次の通り。
=FILTER(array, include, [if_empty])
日本語で考えると、次の形になる。
=FILTER(抽出範囲, 条件, [該当なしの場合])
FILTER関数は、Microsoft 365、Excel for the web、Excel 2024、Excel 2021などで利用できます。
買い切り版のExcel 2019以前では利用できないことがあるため、関数名が認識されない場合はExcelのバージョンを確認してください。

FILTER関数の基本構文
FILTER関数の引数は、次の3つで構成される。
| 引数 | 内容 |
|---|---|
| array | 抽出したい元データの範囲 |
| include | 抽出条件。TRUE/FALSEで判定される範囲 |
| if_empty | 条件に一致するデータがない場合に表示する値。省略可 |
例えば、A2:C10の表から、A列が「東京」の行だけを取り出すなら、次のように書く。
=FILTER(A2:C10, A2:A10="東京")
ここで大事なのは、抽出範囲と条件範囲のサイズを対応させることだ。
この例では、抽出範囲が A2:C10、条件範囲が A2:A10 なので、どちらも2行目から10行目までを対象にしている。
条件範囲だけ A2:A100 のようにずれていると、正しく判定できない。
条件に合う行だけを抽出する基本例
次のような表を想定する。
| 地域 | 担当者 | 売上 |
|---|---|---|
| 東京 | 佐藤 | 120 |
| 大阪 | 鈴木 | 90 |
| 東京 | 田中 | 80 |
| 名古屋 | 山田 | 110 |
この表がA2:C5にある場合、地域が「東京」の行だけを抽出する式は次の通り。
=FILTER(A2:C5, A2:A5="東京")
この式では、A2:C5の中から、A2:A5が「東京」の行だけを表示する。
元データは変更されない。
抽出結果だけが、数式を入力したセルから下方向・右方向に表示される。
セルに入力した条件で抽出する方法
条件を数式の中に直接書くと、条件を変えるたびに数式を編集する必要がある。
実務では、条件をセルに入力して、そのセルを参照する方が扱いやすい。
例えば、E2セルに地域名を入力し、その条件で抽出するなら次のように書く。
=FILTER(A2:C10, A2:A10=E2)
E2に「東京」と入力すれば東京のデータだけが表示される。
E2を「大阪」に変えれば、大阪のデータに切り替わる。
条件を変えるたびに数式を書き換えなくてよいので、簡単な検索フォームのように使える。
複数条件で抽出する方法
FILTER関数で複数条件を扱う場合は、AND条件とOR条件で書き方が変わる。
AND条件で抽出する
AND条件は、複数の条件をすべて満たす場合に使う。
例えば、地域が「東京」で、かつ売上が100以上の行だけを抽出する場合は、次のように書く。
=FILTER(A2:C10, (A2:A10="東京")*(C2:C10>=100))
ポイントは、条件を * でつなぐことだ。
Excelでは、条件式の結果がTRUE/FALSEの配列として扱われる。
AND条件では、それぞれの条件を掛け合わせることで、両方を満たす行だけを抽出できる。
条件ごとに括弧を付けておくと、式の意味が読みやすくなる。
OR条件で抽出する
OR条件は、複数の条件のうち、どれか一つを満たせばよい場合に使う。
例えば、地域が「東京」または「大阪」の行を抽出するなら、次のように書く。
=FILTER(A2:C10, (A2:A10="東京")+(A2:A10="大阪"))
OR条件では、条件を + でつなぐ。
AND条件は *、OR条件は + と覚えておくと整理しやすい。

別シートのデータをFILTER関数で抽出する方法
FILTER関数では、別シートの表を参照して抽出することもできる。
例えば、「売上データ」シートにあるA2:C100の表から、条件に合う行を抽出する場合は次のように書く。
=FILTER(売上データ!A2:C100, 売上データ!A2:A100=条件!B2)
この式では、「売上データ」シートのA2:C100を抽出範囲にし、同じシートのA2:A100を条件範囲にしている。
条件値は「条件」シートのB2セルを参照している。
シート名にスペースが入っている場合は、シート名をシングルクォーテーションで囲む。
=FILTER('売上 データ'!A2:C100, '売上 データ'!A2:A100=B2)
別シート参照で詰まりやすいのは、抽出範囲と条件範囲の行数がずれることだ。
=FILTER(売上データ!A2:C100, 売上データ!A2:A50=B2)
このように、抽出範囲は100行目まで、条件範囲は50行目まで、という指定にするとエラーの原因になる。
同じ行数で指定する。
なお、別ブックの動的配列参照は、ブックの開閉状態によって扱いが難しくなることがある。
まずは同じブック内の別シートで使う前提で考える方が安定する。
該当データがないときの#CALC!エラー対策
FILTER関数で条件に一致するデータがない場合、何も返せない状態になる。
第3引数を省略していると、#CALC! エラーが表示されることがある。
例えば、地域に「札幌」が存在しない表で次の式を使うと、該当データがない状態になる。
=FILTER(A2:C10, A2:A10="札幌")
この場合は、第3引数に表示したい値を指定しておく。
=FILTER(A2:C10, A2:A10="札幌", "該当なし")
何も表示したくない場合は、空文字を指定する。
=FILTER(A2:C10, A2:A10="札幌", "")
実務では、一覧として見せるなら「該当なし」、後続の数式や見た目を優先するなら空文字を使うと扱いやすい。
FILTER関数がうまくいかない原因
FILTER関数でよく出るエラーと原因を整理すると、次のようになる。
| 症状 | 主な原因 | 対処 |
|---|---|---|
#CALC! が出る | 条件に一致するデータがない | 第3引数に "該当なし" や "" を指定する |
#VALUE! が出る | 抽出範囲と条件範囲の行数・列数が対応していない、または条件式の参照範囲がずれている | 行数・列数、条件式の範囲を確認する |
#SPILL! が出る | 結果を表示する先に既存データがある | スピル範囲のセルを空ける |
| 関数名が認識されない | Excelのバージョンが対応していない | Microsoft 365、Excel for the web、Excel 2024、Excel 2021など対応環境を確認する |
| 追加したデータが抽出されない | 範囲指定が固定されている | テーブル化、または範囲指定を見直す |
| 結果が想定より少ない | 条件値に余分な空白や表記ゆれがある | 条件セルと元データの文字列を確認する |
#SPILL! は、FILTER関数そのものの条件ミスではなく、結果の表示先に問題があるケースが多い。
数式を入力したセルの下や右に、文字、数式、結合セルなどがないか確認する。
テーブルと組み合わせると管理しやすい
通常の範囲指定では、次のようにセル範囲を直接指定する。
=FILTER(A2:C100, A2:A100=E2)
この書き方でも問題はない。
ただし、データが増える表では、101行目以降に追加したデータが抽出対象から外れることがある。
その場合は、元データをExcelのテーブルにしておくと管理しやすい。
例えば、テーブル名を「売上表」にしている場合は、次のように書ける。
=FILTER(売上表, 売上表[地域]=E2)
テーブルを使うと、行を追加したときに範囲が広がりやすい。
毎月データを追加する売上表や、CSVを貼り足していく一覧では、通常の範囲指定よりも管理しやすい。
SORT関数やUNIQUE関数と組み合わせる
FILTER関数は、抽出するだけで終わらせず、SORT関数やUNIQUE関数と組み合わせると使い道が広がる。
例えば、東京のデータだけを抽出し、売上列で降順に並べ替えるなら次のように書く。
=SORT(FILTER(A2:C10, A2:A10="東京"), 3, -1)
この式では、まずFILTER関数で東京の行を抽出し、その結果をSORT関数で3列目の売上を基準に降順で並べ替えている。
重複を除いた一覧を作りたい場合は、UNIQUE関数と組み合わせる。
=UNIQUE(FILTER(B2:B100, A2:A100="東京"))
この式では、A列が「東京」の行に対応するB列の担当者名を抽出し、その中から重複を除いて表示する。
SORT関数やUNIQUE関数まで一度に覚えようとすると、式が読みづらくなる。
まずはFILTER関数だけで正しく抽出できる状態を作り、その後で並べ替えや重複除去を足していく方が安定する。
SORT関数の基本は、内部リンクカードまたはテキストリンクで「ExcelのSORT関数で表を自動並べ替えする方法」へつなげるとよい。
FILTER、SORT、UNIQUE、SEQUENCEをまとめて使う応用例は、「FILTER+SORT+UNIQUE+SEQUENCEで動的リスト・ランキングを作る方法」への導線にできる。
UNIQUE関数の個別記事が未作成であれば、重複を除いた一覧作成のテーマとして別記事化してもよい。
FILTER関数とオートフィルターの使い分け
FILTER関数は、オートフィルターの完全な置き換えではない。
どちらが向いているかは、作業内容によって変わる。
| やりたいこと | 向いている方法 |
|---|---|
| 一時的に表を絞り込みたい | オートフィルター |
| 条件に合うデータを別の場所に表示したい | FILTER関数 |
| 条件を変えながら一覧を自動更新したい | FILTER関数 |
| 元データを見ながら抽出結果も残したい | FILTER関数 |
| 手作業で確認しながら絞り込みたい | オートフィルター |
オートフィルターは、その場で表を確認する作業に向いている。
FILTER関数は、抽出結果を数式として残したいときに向いている。
例えば、元データは一覧のまま残し、別シートに担当者別の一覧を自動表示したい場合は、FILTER関数の方が扱いやすい。
まとめ
FILTER関数を使うと、条件に合うデータを別の場所に自動抽出できる。
基本形は次の通り。
=FILTER(抽出範囲, 条件, [該当なしの場合])
複数条件では、AND条件は *、OR条件は + を使う。
=FILTER(A2:C10, (A2:A10="東京")*(C2:C10>=100))
=FILTER(A2:C10, (A2:A10="東京")+(A2:A10="大阪"))
該当データがない場合は、#CALC! を避けるために第3引数を指定しておくとよい。
=FILTER(A2:C10, A2:A10="札幌", "該当なし")
また、データが増える表では、通常の範囲指定よりもテーブル化しておく方が管理しやすい。
FILTER関数は、単に「条件で絞り込む関数」ではなく、抽出結果を数式として持てる点が便利である。
毎回フィルターをかけ直す作業を減らしたい場合は、まず基本形とエラー対策から押さえておくと使いやすい。


コメント