ExcelのFILTER関数で条件に合うデータを抽出する方法|複数条件・別シート・エラー対策まで解説

Excel

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関数の基本構文

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条件は + と覚えておくと整理しやすい。

ロコ
複数条件は少しクセがあります。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関数は、単に「条件で絞り込む関数」ではなく、抽出結果を数式として持てる点が便利である。
毎回フィルターをかけ直す作業を減らしたい場合は、まず基本形とエラー対策から押さえておくと使いやすい。

関連記事

コメント

タイトルとURLをコピーしました