配列・抽出
FILTER関数の使い方・読み方
読み方:FILTER は「フィルター」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)
FILTERは、条件に合う行をまとめて抜き出す関数です。
このページの中身(27項目)
この記事の書式と対応環境の出どころ(2026-08-26 確認)
- Google スプレッドシート ヘルプ:公式の書式は
FILTER(範囲, 条件1, 条件2)
https://support.google.com/docs/answer/3093197 - Microsoft サポート:FILTER 関数(2021 以降で使えます)
https://support.microsoft.com/ja-jp/excel/functions/filter-function
関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。
VLOOKUP が「1件を取り出す」のに対し、FILTERは該当する行を全部返します。1つの数式で表が丸ごと出てくるのが特徴です。

書式
=FILTER(範囲, 条件1, [条件2], ...)
| 引数 | 内容 |
|---|---|
| 範囲 | 抜き出す元の表 |
| 条件 | A2:A100="東京" のような判定式。範囲と同じ行数にする |
条件は比較式そのものを書きます。SUMIF のように "東京" と文字列で書くのではない点に注意してください。
基本の使い方
| A | B | C | |
|---|---|---|---|
| 1 | 支店 | 商品 | 売上 |
| 2 | 東京 | A | 1200 |
| 3 | 大阪 | A | 800 |
| 4 | 東京 | B | 1500 |
東京の行だけを抜き出します。
=FILTER(A2:C4, A2:A4="東京")
結果: 2行分(東京/A/1200 と 東京/B/1500)が、数式を入れたセルから下・右に展開されます。
1つの数式で複数のセルに結果が出るのがFILTERの特徴です。展開先にデータが入っていると、後述の #REF! になります。

複数条件
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に切り替えてください。
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本あります。
このカテゴリで共通するつまずき
展開先が空いていないと #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 に切り替える
関連する関数
- QUERY — 絞り込み+集計をまとめて書く
- SORT — 抽出結果を並べ替える
- UNIQUE — 重複を除いた一覧
- IMPORTRANGE — 別ファイルのデータを絞る
- 関数一覧に戻る