FILTER関数の使い方・読み方|条件に合う行をまとめて抜き出す

執筆者:

カテゴリ:

FILTER関数の使い方・読み方のイメージ

配列・抽出

FILTER関数の使い方・読み方

Excel関数辞典

読み方:FILTER は「フィルター」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

FILTERは、条件に合う行をまとめて抜き出す関数です。

使える環境Excel○Googleスプレッドシート○
このページの中身(27項目)
  1. 書式
  2. 基本の使い方
  3. 複数条件
  4. 部分一致で絞る
  5. 該当がないときの表示
  6. 並べ替えと組み合わせる
  7. 別ファイルのデータを絞る
  8. エラーの対処
  9. QUERYとの使い分け
  10. Excelとの違い
  11. 一件だけ取り出す関数との決定的な違い
  12. あふれるという挙動を理解する
  13. 条件の書き方を組み立てる
  14. 並べ替えや重複除去と組み合わせる
  15. そのまま使える型を5つ
  16. 条件の書き方を表で押さえる
  17. エラーの読み方
  18. 実務での使いどころ
  19. 使う前に確認すること
  20. 「配列・抽出」の関数を全体から見る
  21. 数式を書く前の手順
  22. どの関数でも共通する確認
  23. 引き継ぐときに残すこと
  24. このサイトの収録状況
  25. よくある質問
  26. まとめ
  27. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

VLOOKUP が「1件を取り出す」のに対し、FILTERは該当する行を全部返します。1つの数式で表が丸ごと出てくるのが特徴です。

FILTER関数の使い方の記事構成図
FILTER関数の使い方:この記事で扱う内容

書式

=FILTER(範囲, 条件1, [条件2], ...)
引数内容
範囲抜き出す元の表
条件A2:A100="東京" のような判定式。範囲と同じ行数にする

条件は比較式そのものを書きます。SUMIF のように "東京" と文字列で書くのではない点に注意してください。

基本の使い方

ABC
1支店商品売上
2東京A1200
3大阪A800
4東京B1500

東京の行だけを抜き出します。

=FILTER(A2:C4, A2:A4="東京")

結果: 2行分(東京/A/1200 と 東京/B/1500)が、数式を入れたセルから下・右に展開されます。

1つの数式で複数のセルに結果が出るのがFILTERの特徴です。展開先にデータが入っていると、後述の #REF! になります。

FILTER関数の使い方の要点図
FILTER関数の使い方

複数条件

AND(すべて満たす)

条件をカンマで並べます。

=FILTER(A2:C100, A2:A100="東京", C2:C100>=1000)

OR(どれかを満たす)

カンマでは書けません。 + で足します。

=FILTER(A2:C100, (A2:A100="東京") + (A2:A100="大阪"))

TRUE は1、FALSE は0として扱われるため、足して1以上なら成立、という理屈です。各条件を括弧で囲むのを忘れないでください。

同様に、* を使うとANDになります。

=FILTER(A2:C100, (A2:A100="東京") * (C2:C100>=1000))

カンマで並べるのと同じ意味です。ANDとORを混ぜるときは、この書き方に統一するほうが分かりやすくなります。

=FILTER(A2:C100, ((A2:A100="東京") + (A2:A100="大阪")) * (C2:C100>=1000))

「東京または大阪、かつ1000以上」です。

部分一致で絞る

FILTERの条件は完全一致の比較なので、部分一致には別の関数を挟みます。

=FILTER(A2:C100, ISNUMBER(SEARCH("営業", B2:B100)))

SEARCH は見つかった位置を返し、見つからなければエラーになります。それを ISNUMBER で TRUE/FALSE に変換しています。

正規表現を使うなら REGEXMATCH です。

=FILTER(A2:C100, REGEXMATCH(B2:B100, "営業|販売"))

該当がないときの表示

条件に合う行が1つもないと #N/A になります。最後の引数で表示を指定できます。

=FILTER(A2:C100, A2:A100=E1, "該当なし")

IFERROR で包む方法もありますが、FILTERの最終引数のほうが安全です。IFERRORは範囲指定のミスまで隠してしまいます。

並べ替えと組み合わせる

抽出した結果を並べ替えるには SORT で包みます。

=SORT(FILTER(A2:C100, A2:A100="東京"), 3, FALSE)

3列目(売上)で降順に並びます。「東京の売上ランキング」が1つの数式で作れます。

必要な列だけ取り出すなら、範囲の指定を絞ります。

=FILTER({B2:B100, C2:C100}, A2:A100="東京")

{} で列を結合できます。元の表の列順と違う順番で取り出せるのが利点です。

別ファイルのデータを絞る

IMPORTRANGE と組み合わせられます。

=FILTER(IMPORTRANGE("キー", "売上!A2:C1000"),
        IMPORTRANGE("キー", "売上!A2:A1000") = "東京")

同じIMPORTRANGEを2回書く必要があり冗長です。読み込み専用のシートを1枚作って、そこを参照するほうが軽く、読みやすくなります。

エラーの対処

#REF! が出る

結果の展開先にデータが入っています

これがFILTERで最も多いエラーです。

FILTERは下・右に結果を広げるため、その領域が空いている必要があります。数式の下や右に何か入力されていないか確認してください。

#VALUE! が出る

条件の行数が範囲と合っていません

範囲が A2:C100 なら条件も A2:A100 にしてください。A:A(列全体)と A2:C100 を混ぜるとずれます。

#N/A が出る

条件に合う行がありません。最終引数で表示を指定してください。

空行が大量に出る

範囲を A2:C1000 のように大きく取ると、データがない行も条件次第で拾われます。空でない行だけに限定してください。

=FILTER(A2:C1000, A2:A1000="東京", A2:A1000<>"")

QUERYとの使い分け

やりたいこと使う関数
条件で行を絞るだけFILTER
絞る+集計する(合計・件数)QUERY
絞る+グループ化するQUERY
列の順番を入れ替えるどちらでも

単純な絞り込みならFILTERのほうが読みやすいです。集計やグループ化が入ったらQUERYに切り替えてください。

Excelとの違い

Excelにも FILTER があります(Microsoft 365 / Excel 2021以降)。書式もほぼ同じです。

ただし違いがあります。

Excelスプレッドシート
複数条件* と + のみカンマ区切りも可
該当なしの指定第3引数最後の引数
古いバージョン使えない常に使える

Excel 2019以前では使えないので、その場合は INDEX や作業列を使った方法に置き換える必要があります。


一件だけ取り出す関数との決定的な違い

検索系の関数を選ぶとき、最初に決めるべきなのは「取り出したいのは一件か、全件か」です。ここを取り違えると、そもそも関数の選択を間違えます。

VLOOKUPやXLOOKUPは、条件に合う最初の一件だけを返します。同じ商品コードが表の中に十行あっても、返るのは一番上の一行だけです。残りの九行は無視されます。これは仕様であって、不具合ではありません。

FILTERは、条件に合う行をすべて返します。十行該当すれば十行が返り、下方向にあふれて表示されます。担当者ごとの明細を一覧にする、特定の期間の取引をすべて抜き出す、といった用途はこちらです。

つまり、マスタから対応する値を一つ引いてくるのがVLOOKUP系、条件に合うデータを一覧として抜き出すのがFILTER、という住み分けになります。「検索」という言葉でひとくくりにせず、目的の形で選んでください。

もうひとつの違いは、結果が動的であることです。FILTERの結果は元データと連動しているので、元データが増えれば結果も自動的に増えます。手作業でフィルタをかけて別シートに貼り付ける、という作業が不要になります。


あふれるという挙動を理解する

FILTERは結果が複数行になるため、数式を入れた一つのセルから下方向、場合によっては右方向にも結果が広がります。この広がりを妨げるものがあると、数式全体がエラーになります。

もっとも多いのは、結果が広がる先に何かが入力されている場合です。一行でも文字が入っていれば、そこで衝突してエラーになります。数式を入れる前に、下方向を十分に空けておいてください。

見落としやすいのは、目に見えない値が入っている場合です。過去に何か入力して削除したつもりでも、空白文字が残っていることがあります。範囲を選択して完全に消去してから、数式を入れ直してください。

もうひとつは、結合されたセルがある場合です。あふれる範囲に結合セルがあると展開できません。結合を解除する必要があります。

また、表の形式に変換されている範囲の中では、あふれる数式が使えないことがあります。通常の範囲に戻すか、別の場所に数式を置いてください。

エラーの表示自体は原因を教えてくれないので、まず下方向と右方向に何もないかを確認する、という手順を習慣にしておくと早く解決します。


条件の書き方を組み立てる

FILTERの条件は、対象の範囲と同じ行数の真偽値の並びとして渡します。この考え方が分かると、条件を自由に組み立てられるようになります。

たとえば、担当者の列全体を特定の名前と比較すると、行ごとに真か偽かが並びます。それをそのまま条件として渡せば、真の行だけが返ります。

条件を二つ以上にしたい場合、「かつ」で結ぶなら掛け算、「または」で結ぶなら足し算を使います。真偽値は内部的に一と零として扱われるため、掛ければ両方が真のときだけ一になり、足せばどちらかが真なら一以上になります。この仕組みを理解しておくと、複雑な条件も書けるようになります。

条件に使う範囲は、すべて同じ行数にしてください。対象の範囲が二行目から百行目までなら、条件に使う列も同じ範囲にします。片方だけずれていると、対応する行が食い違います。

期間で絞る場合は、開始日以上という条件と終了日以下という条件を掛け合わせます。日付は別のセルに置いて参照するのが確実です。数式に直接書くと、環境によって解釈が変わることがあります。

部分一致で絞りたい場合は、条件の中で検索の関数を使います。特定の文字を含む行だけを抜き出す、という処理ができます。


並べ替えや重複除去と組み合わせる

FILTERの結果は、そのまま他の関数に渡せます。この組み合わせが実務では効いてきます。

抜き出した結果を金額の大きい順に並べたいなら、並べ替えの関数で包みます。抜き出しと並べ替えを一本の数式で完結できます。

抜き出した結果から重複を除きたいなら、重複除去の関数で包みます。担当者の一覧を条件付きで作る、といった処理ができます。

上位五件だけを取り出したい場合は、並べ替えた結果の先頭部分を切り出す関数と組み合わせます。ランキング表が数式だけで作れます。

このように、抜き出し、並べ替え、重複除去、切り出しという処理を関数の組み合わせで表現できるのが、新しい世代の関数の特徴です。作業列やコピー貼り付けを挟まずに済むため、元データが更新されればすべてが自動で追従します。

ただし、組み合わせが深くなるほど数式は読みにくくなります。他人が触るファイルでは、途中の結果を別の列に出しておくほうが親切な場合もあります。


そのまま使える型を5つ

条件に合う行だけ抜き出す

=FILTER($A$2:$D$500,$C$2:$C$500="済")

元の表を触らずに、別の場所へ抽出できます。元データが増えたら、抽出結果も自動で増えます。

条件を2つ重ねる

=FILTER($A$2:$D$500,($C$2:$C$500="済")*($B$2:$B$500="東京"))

* は「かつ」です。両方を満たす行だけが残ります。AND 関数はここでは使えません。

どちらか一方を満たす行

=FILTER($A$2:$D$500,($B$2:$B$500="東京")+($B$2:$B$500="大阪"))

+ は「または」です。条件が増えても同じ形で足していけます。

該当が無いときの表示を決める

=FILTER($A$2:$D$500,$C$2:$C$500=$F$1,"該当なし")

3つ目の引数に、0件のときの表示を指定できます。指定しないと #N/A が出ます。

抽出してから並べ替える

=SORT(FILTER($A$2:$D$500,$C$2:$C$500="済"),1,TRUE)

SORT で包むだけです。3つ目の TRUE が昇順、FALSE が降順です。


条件の書き方を表で押さえる

やりたいこと書き方
かつ(条件1)*(条件2)
または(条件1)+(条件2)
でないNOT(条件)
以上範囲>=値
空欄でない範囲<>""
部分一致REGEXMATCH(範囲,"文字")

括弧を省略しない

$C$2:$C$500="済"*$B$2:$B$500="東京" は意図通りに動きません。条件ごとに括弧で囲んでください。

AND と OR は使えない

配列に対して働かないためです。掛け算と足し算で書きます。ここがFILTERの最初のつまずきどころです。

部分一致には REGEXMATCH

=FILTER($A$2:$D$500,REGEXMATCH($B$2:$B$500,"東京"))

ワイルドカードではなく正規表現で書きます。大文字と小文字を区別しない場合は (?i) を先頭に付けます。


エラーの読み方

#N/A が出る

条件に合う行が0件です。3つ目の引数に "該当なし" を指定してください。

#VALUE! が出る

条件範囲と抽出範囲の行数が違います。両方の末尾を揃えてください。

#REF! が出る

抽出結果を書き出す先に、既にデータがあります。FILTERは下方向と右方向に展開するため、その領域を空けておく必要があります。

結果が1件しか出ない

条件を = ではなく別の書き方にしているか、範囲を1行しか指定していません。範囲の指定を確認してください。


実務での使いどころ

元データを壊さずに一覧を作る

FILTERの最大の利点は、元の表を一切変更しないことです。フィルタ機能と違い、他の人が同時に見ていても影響しません。共有ファイルでは、この差が大きく効きます。

担当者ごとのシートを作る

各シートに =FILTER(元データ!$A$2:$E$500,元データ!$C$2:$C$500="山田") と書くだけで、自動更新される個人別一覧になります。

未処理だけを抽出する

=FILTER($A$2:$D$500,$D$2:$D$500="")

処理済みの行が消えていく作業一覧になります。上から片付ければよい形になり、確認の手間が減ります。

必要な列だけ取り出す

=FILTER($B$2:$B$500,$C$2:$C$500="済")

抽出範囲を1列にすれば、その列だけが返ります。列を並べ替えたいときは {$C$2:$C$500,$A$2:$A$500} のように波括弧で組み替えます。

重複を除いて一覧にする

=UNIQUE(FILTER($B$2:$B$500,$C$2:$C$500="済"))

抽出したうえで重複を落とします。集計表の見出しを自動生成するときに使えます。


使う前に確認すること

展開先を空けておく

FILTERは結果の行数だけ下に広がります。その下に別のデータを置いていると、#REF! で止まります。抽出用のシートを分けるのが安全です。

行数が多いと重くなる

数千行を超えると、再計算に時間がかかります。元データが大きい場合は、範囲を必要な分に絞ってください。

Excelでの対応を確認する

FILTERは比較的新しい関数です。古い環境では使えません。共有先が分からないときは、オートフィルタか作業列で代替してください。

結果を編集できない

FILTERの返す範囲は、直接書き換えられません。編集が必要な作業表には向きません。値としてコピーしてから使ってください。

「配列・抽出」の関数を全体から見る

配列・抽出は複数の値をまとめて返す関数群です。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに9本あります。

記事
ARRAYFORMULA
ARRAY_CONSTRAIN
FLATTEN
QUERY
SEQUENCE
SORT
SORTN
TRANSPOSE
UNIQUE

このカテゴリで共通するつまずき

展開先が空いていないと #REF! で止まります。専用のシートに分けてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

元の表を変えずに別の見え方を作れるのが利点です。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


数式を書く前の手順

書き始める前に決めておくことがあります。ここが曖昧なまま書くと、途中で行き詰まります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

展開先が空いていないと #REF! で止まります。専用のシートに分けてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

元の表を変えずに別の見え方を作れるのが利点です。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

関数を問わず、結果がずれる原因は限られています。この5つを確認すれば、大半が解決します。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

このサイトの収録状況

現在、201本の記事をカテゴリ別に整理しています。関数名が分からない場合は、カテゴリから探してください。

カテゴリ記事数
目的別51本
集計47本
文字列31本
日付19本
検索・参照15本
条件15本
機能12本
配列・抽出10本 ←この記事
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. 該当がないとエラーになります

該当がない場合に返す値を、三つ目の引数として指定できます。空文字や「該当なし」といった文字を渡しておけば、エラーになりません。

Q. 結果が展開されずエラーになります

あふれる先に何か入っています。下方向と右方向を確認し、完全に空にしてください。

Q. 特定の列だけ取り出せますか

対象の範囲を必要な列だけにすれば、その列だけが返ります。離れた列を組み合わせたい場合は、選択の関数を使う方法もあります。

Q. 結果を並べ替えたいのですが

並べ替えの関数で包んでください。抜き出しと並べ替えを一度に書けます。

Q. 件数だけ知りたいのですが

条件に合う件数を数える関数を使うほうが簡単です。FILTERの結果を数える必要はありません。

Q. 元データを消したら結果も消えました

FILTERの結果は元データと連動しています。結果を固定したい場合は、値として貼り付けてください。

Q. 古い環境でも使えますか

比較的新しい関数のため、古い環境では使えません。共有する相手の環境を確認してください。

Q. 重くなることはありますか

対象範囲を列全体で指定すると負荷がかかります。実際にデータのある範囲に絞ってください。



まとめ

  • 書式は =FILTER(範囲, 条件1, 条件2, ...)
  • 条件は比較式そのものを書く(A2:A100="東京")
  • ANDはカンマか *、ORは +
  • 部分一致は REGEXMATCH か ISNUMBER(SEARCH(...))
  • #REF! は展開先にデータが入っているという意味
  • 集計が入るなら QUERY に切り替える

関連する関数