「売上データから東京支店だけ抜き出したい」「今月の受注だけ別シートに一覧化したい」。事務の現場でよくある作業ですよね。
メニューの フィルター機能 で手動で絞り込む方法もあります。ただ、条件が変わるたびにポチポチ操作するのは面倒ですし、元データに手を加えると共有メンバーに迷惑がかかることもあります。
そんなときに使いたいのが FILTER関数 です。元データはそのままに、条件に一致する行だけを別のセル範囲に自動で吐き出してくれます。プルダウンと組み合わせれば、選んだ条件で表示が切り替わる「動的レポート」もコードなしで作れますよ。
この記事ではFILTER関数の基本構文から、AND/ORの複数条件、プルダウン連動・期間絞り込み・SORTやUNIQUEとの組み合わせなど、実務でそのまま使える7パターンを紹介します。#N/A や #REF! などのエラー対処、Excel版との違い、QUERY関数・ARRAYFORMULAとの使い分けまで整理しますよ。
スプレッドシートのFILTER関数とは?条件に合う行をまるごと取り出す関数
FILTER関数(読み方: フィルター関数)は、指定した範囲の中から条件に一致する行(または列)だけを抜き出して別の場所に出力する関数です。関数名は英語の「filter(ろ過する・選別する)」に由来していて、データの中から必要なものだけをすくい上げるイメージで覚えると分かりやすいですね。
たとえば社員リストから「営業部の人だけ」を抜き出したり、売上表から「100万円以上の案件だけ」を取り出したりできます。元のデータには触れずに別シートへレポートを自動生成できるので、共有ファイルで安全に使えるのも嬉しいポイントです。
FILTER関数で何ができる?
FILTER関数が活躍するのは、おもに次のような場面です。
- 売上一覧から 特定の支店・部署・担当者だけ を取り出したいとき
- 受注台帳から 「今月」「今週」など期間で絞った行だけ を別シートに展開したいとき
- 申請一覧から ステータスが「承認待ち」の行だけ をダッシュボードに表示したいとき
- プルダウンと連動させて 選んだ条件で表示が切り替わる動的レポート を作りたいとき
- 元データを壊さずに、別シートで集計用の中間テーブル を作りたいとき
NOTE: FILTER関数はGoogleスプレッドシートの全バージョンで使えます。Excelでも Microsoft 365 / Excel 2021 以降で対応していますが、引数の仕様が一部異なります(後述の「Excel版との違い」を参照)。古いExcel(2019以前)と互換性が必要なファイルでは使えないので、その場合はオートフィルターやIF+配列数式で代用してください。
メニューの「フィルター機能」との違い
スプレッドシートにはメニュー > データ > 「フィルタを作成」というUI操作のフィルター機能もありますが、関数版とは性格が大きく異なります。
| 比較項目 | FILTER関数 | フィルター機能(UI) |
|---|---|---|
| 元データへの影響 | 一切変更しない(別セルに出力) | 表示を直接絞り込む(裏では全行残る) |
| 結果の出力先 | 任意の別セル・別シート | 元データの行を非表示にして再描画 |
| 条件変更 | 数式やプルダウンを変えるだけで再計算 | 毎回メニュー操作が必要 |
| 共有ファイル | 他人の表示に影響しない | フィルタ表示モードを使わないと他人の表示まで変わる |
| レポート自動化 | 得意(数式で完結) | 不向き(手動操作前提) |
| 抽出結果の再利用 | そのまま参照・集計可能 | コピペが必要 |
ざっくり言うと、一度きりの確認ならUI、繰り返し見るレポートなら関数と覚えておくと使い分けがラクです。
FILTER関数の構文と引数
基本構文
=FILTER(範囲, 条件1, [条件2, ...])
最初に抽出したい「範囲」を指定し、その後にTRUE / FALSEを返す「条件」を1つ以上書きます。条件を複数並べるとすべてAND条件として適用されます。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 範囲 | 必須 | 抽出対象のデータ範囲(例: A2:D100)。1列だけでも複数列でもOK |
| 条件1 | 必須 | TRUE / FALSEを返す配列の条件式(例: B2:B100="東京")。範囲の行数と一致させる |
| 条件2, … | 任意 | 追加の条件。複数指定するとすべてAND条件で適用される |
ポイントは 条件式が「TRUE / FALSEの配列」を返す という点です。たとえば B2:B6="東京" と書くと、B2〜B6の各セルが「東京」かどうかを判定し、{TRUE; FALSE; TRUE; FALSE; FALSE} のような配列が作られます。FILTER関数はこの配列を受け取り、TRUEの行だけを抜き出す仕組みです。
TIP: 条件式の範囲の行数は、必ず第1引数の範囲と揃えてください。A2:D6(5行)に対して条件を B2:B100(99行)にすると #VALUE! エラーになります。後述の「よくあるエラーと対処法」で詳しく説明します。
FILTER関数の動作イメージ早見表
| 数式の例 | やりたいこと | 戻り値 |
|---|---|---|
=FILTER(A2:D6, B2:B6="東京") | B列が「東京」の行を全列抽出 | 東京の全行 |
=FILTER(A2:A6, B2:B6="東京") | B列が「東京」の行のうちA列だけ抽出 | 東京の日付列のみ |
=FILTER(A2:D6, B2:B6="東京", D2:D6>=10000) | 東京かつ金額1万以上をAND抽出 | 該当行のみ |
=FILTER(A2:D6, (B2:B6="東京")+(B2:B6="大阪")) | 東京または大阪をOR抽出 | 該当行のみ |
=IFERROR(FILTER(A2:D6, B2:B6="福岡"), "該当なし") | 該当なしのときメッセージ表示 | “該当なし” |
これだけ覚えれば実務の8割はカバーできます。あとは応用例で組み合わせのバリエーションを増やしていきましょう。
FILTER関数の基本的な使い方
ここからは、次のような売上データを使って実例で説明します。

やりたいこと: B列が「東京」の行だけを抽出する。
空いているセル(たとえばF2)に次の数式を入力します。
=FILTER(A2:D6, B2:B6="東京")

結果はこうなります。

B列が「東京」の行だけが自動で出力されました。元のデータはまったく変わりません。条件に合う行が まるごとコピーされる のがFILTER関数の特徴です。VLOOKUPが「1つの値を返す」のと対照的に、FILTERは「行全体」を返します。
TIP: FILTER関数の結果は複数行に 自動で展開(スピル) されます。出力先のセルに他のデータがあると #REF! エラーになるので、下方向・右方向に十分な空きスペースを確保しておいてください。誰かが下のセルに値を入力すると関数全体がエラーになるので、共有ファイルでは出力先に色を付けておくと事故防止になります。
FILTER関数で複数条件を指定する(AND・OR)
FILTER関数では、複数の条件を組み合わせて絞り込めます。書き方はAND条件とOR条件で異なるので、ここで一気に押さえておきましょう。
AND条件(すべて満たす)
AND条件は、条件を引数として カンマで区切る か、*(掛け算)演算子で結合します。
=FILTER(A2:D6, B2:B6="東京", D2:D6>=10000)

この数式は「支店が東京」かつ「金額が10,000円以上」の行を返します。
* 演算子を使う書き方もあります。結果はまったく同じです。
=FILTER(A2:D6, (B2:B6="東京")*(D2:D6>=10000))
カンマ区切りのほうが読みやすいので普段はそちらで十分ですが、後述のOR条件と混在させたいときには * の書き方が必要になります。
OR条件(いずれかを満たす)
OR条件は +(足し算)演算子で条件をつなぎます。カンマ区切りはOR条件としては使えないので注意してください。
=FILTER(A2:D6, (B2:B6="東京")+(B2:B6="大阪"))
この数式は「支店が東京」または「支店が大阪」の行を返します。
NOTE: * と + が使える理由は、条件式が TRUE=1 / FALSE=0 の数値配列として扱われるためです。掛け算は「両方1のときだけ1」=AND、足し算は「どちらかが1以上なら1以上」=OR の動きになります。OR条件で同じ行が両方に該当することは原理的にないので、足し算の結果が2以上になる心配はありません。
AND/OR を組み合わせる
ANDとORを混在させたい場合は、OR条件のかたまりを () で囲んでから * で他の条件と結合します。
=FILTER(A2:D6, ((B2:B6="東京")+(B2:B6="大阪"))*(D2:D6>=10000))
「東京または大阪」かつ「金額10,000円以上」の行が返ります。括弧の付け方を間違えると意図しない結果になりやすいので、複雑な条件は OR部分を先に書く と整理しやすいです。
TIP: 条件が3つ以上になる場合は、いったん別のセルに =B2:B6="東京" のような中間配列を出してみると、TRUE/FALSEの並びを目で確認できてデバッグがラクになります。中間配列がそろったところでFILTER関数に組み込み直すのがおすすめです。
FILTER関数の実務テンプレ7パターン
ここからは、実務でよく出てくる7パターンを順に紹介します。コピペして使えるサンプル数式付きなので、自分のシートに合わせて範囲だけ書き換えてください。
パターン1: プルダウン連動の動的レポート
プルダウンと組み合わせると、選択した条件のデータだけを動的に抽出できます。月次レポートやダッシュボードでよく使う構成です。
たとえば、F1セルにプルダウンで支店名を選べるようにしておき、F3セルに次の数式を入力します。
=FILTER(A2:D6, B2:B6=F1)
F1で「大阪」を選べば大阪のデータだけが、「名古屋」を選べば名古屋のデータだけが表示されます。条件セルを切り替えるだけで結果が自動で変わるので、毎月の支店別チェックがワンクリックで終わります。
プルダウン自体の作り方は スプレッドシートのプルダウン作り方|色付け・連動まで解説 を参考にしてください。「全件表示」もしたい場合は、後述のパターン7「条件セルが空のとき全件表示」を組み合わせると便利です。
パターン2: 期間で絞り込む(今月・先月・直近30日)
日付列がある場合、特定の期間だけを抽出できます。月次レポートの定番パターンです。
たとえば「2026年3月のデータだけ」を取り出したい場合は次のように書きます。
=FILTER(A2:E100, E2:E100>=DATE(2026,3,1), E2:E100<=DATE(2026,3,31))
DATE関数で開始日と終了日を指定し、2つの条件をカンマで区切ります。AND条件で「3月1日以降 かつ 3月31日以前」になるので、3月中のデータだけが抽出されます。
「今月」や「直近30日」を自動で取りたい場合は TODAY関数を組み合わせます。
=FILTER(A2:E100, E2:E100>=EOMONTH(TODAY(),-1)+1, E2:E100<=EOMONTH(TODAY(),0))
EOMONTH(TODAY(),-1)+1 は「今月の1日」、EOMONTH(TODAY(),0) は「今月末」を意味します。これでシートを開くたびに今月分が自動で表示されるレポートが完成します。
パターン3: FILTER + SORT で抽出結果を並べ替え
FILTERで抽出した結果を金額順や日付順に並べ替えたいときは、SORT関数 で囲みます。
=SORT(FILTER(A2:D6, B2:B6="東京"), 4, FALSE)

SORT関数の第2引数 4 は「4列目(金額)で並べ替え」、第3引数 FALSE は「降順」を意味します。これで東京支店のデータを金額が大きい順に表示できます。
TIP: SORT関数の列番号は FILTER結果の中での列番号 です。元データのシート上の列番号ではないので、列を絞って抽出している場合はFILTER結果側で数え直してください。=SORT(FILTER(A2:A6, B2:B6="東京"), 1, TRUE) のように、抽出が1列だけなら列番号は必ず1になります。
パターン4: 特定の列だけを取り出す(配列リテラル / CHOOSECOLS)
FILTER結果から一部の列だけ取り出したい場合は、配列リテラル {} で列を指定します。
={FILTER(A2:A6, B2:B6="東京"), FILTER(D2:D6, B2:B6="東京")}
A列(日付)とD列(金額)だけが抽出されます。レポートに見せたい項目を絞れるので、社外共有用の表を作るときに便利です。
5列以上の元データから3〜4列だけ抜き出したい場合は、CHOOSECOLS関数と組み合わせる書き方もあります。
=CHOOSECOLS(FILTER(A2:E100, B2:B100="東京"), 1, 2, 5)
これでFILTER結果の1・2・5列目だけが残ります。配列リテラルの書き方より見通しがよく、列番号を変えるだけで取り出す列を調整できるのが利点です。
パターン5: FILTER + UNIQUE で重複を除く
FILTERで抽出した結果に重複がある場合、UNIQUE関数で囲むとユニーク値だけを残せます。
=UNIQUE(FILTER(B2:C100, D2:D100>=10000))
たとえば「金額1万円以上の案件に登場した支店・担当者の組み合わせ」だけを一覧化したいときに使えます。生データから関係者リストを作るような場面で重宝します。
担当者だけのユニーク一覧が欲しい場合は、列を1つに絞ってからUNIQUEにかけます。
=UNIQUE(FILTER(C2:C100, D2:D100>=10000))
パターン6: FILTER + COUNTA / SUM で集計
FILTER単体では合計や件数を出せませんが、COUNTAやSUM系の関数で囲めば簡単に集計できます。
=COUNTA(FILTER(A2:A6, B2:B6="東京"))
これで「東京支店のデータ件数」が出ます。同じ要領で合計も書けます。
=SUM(FILTER(D2:D6, B2:B6="東京"))
「東京支店の金額合計」が一発で出ます。SUMIFやCOUNTIFと違って、条件式を * / + で自由に組み合わせられるのがFILTERを噛ませる利点です。ただし純粋に1条件の合計だけならSUMIFのほうがシンプルなので、用途に応じて使い分けてください。
パターン7: 条件セルが空のとき全件表示
プルダウン連動レポートで「条件を選んでいないときは全件表示したい」というニーズはよくあります。IF関数と組み合わせて条件を切り替えると実現できます。
=IF(F1="", A2:D6, FILTER(A2:D6, B2:B6=F1))
F1が空のときはA2:D6をそのまま表示し、F1に値があるときだけFILTERで絞り込みます。プルダウンの選択肢に「(すべて)」を入れておき、その項目を選んだら全件表示する設計にすると、利用者の操作感がぐっと良くなりますよ。
よくあるエラーと対処法
| エラー / 症状 | 原因 | 対処法 |
|---|---|---|
#N/A | 条件に一致するデータがない | =IFERROR(FILTER(...), "該当データなし") で空結果時のメッセージを設定 |
#REF! | 出力先のセルに既にデータがある(スピル先がふさがっている) | 出力先の下方向・右方向を空けるか、出力位置を変更する |
#VALUE! | 条件式の範囲サイズが元データと合っていない | 範囲の行数を揃える(例: A2:D100 と B2:B100) |
#NAME? | 関数名のタイポ(FILTR 等) | スペルを確認する |
#ERROR! | 引数の区切り(カンマ)の前後に不要な文字が混入 | 全角カンマや余分なスペースを削除 |
| 結果が0行になる | 条件の文字列に全角/半角・スペースの違いがある | TRIM関数(前後空白除去)やASC関数(半角化)でデータを統一する |
特に注意したいのが #N/A エラーです。ExcelのFILTER関数には第3引数(該当なしの場合に返す値)がありますが、スプレッドシートのFILTER関数にはこの引数がありません。IFERRORで囲むのが定番の対処法です。
=IFERROR(FILTER(A2:D6, B2:B6="福岡"), "該当データなし")
TIP: #VALUE! エラーは範囲サイズの不一致が原因です。A2:D6(5行)に対して条件を B2:B100(99行)のように行数が違う範囲にすると発生します。データ件数が増減する可能性がある場合は、両方とも A2:D のように 列まるごと指定 にしておくと不一致が起きにくくなります。
データがあるのに0行になるケース(デバッグ手順)
条件は正しそうなのに結果が表示されないときは、データの表記揺れが原因のことがほとんどです。代表的な揺れと対処は次の3つです。
- 全角と半角: 「東京」と「東京」(全角半角混在)は別文字として扱われる
- 前後のスペース: 「東京 」(末尾に空白)と「東京」は別扱い
- 大文字小文字: アルファベットは区別される(例: “ABC” と “abc”)
対処手順は次のとおりです。
- 別のセルに
=B2=F1のように 単純な等号比較 を書いて、TRUE / FALSEを目視確認する - FALSEが返るセルがあれば、その値を
=LEN(B2)と=LEN(F1)で文字数比較する - 文字数が違えばスペース混入、同じなら全角半角混在を疑う
- 元データを
=TRIM(ASC(B2))で整形した補助列を作り、その補助列を条件範囲に指定する
この4ステップで、ほぼすべての「0行になる問題」は解決できます。共有ファイルでは入力規則やプルダウンを使って そもそも揺れさせない 設計にしておくと、後々のトラブルが激減します。
FILTERとQUERY・ARRAYFORMULAの違い・使い分け
スプレッドシートには、FILTER以外にもデータを操作する強力な関数があります。それぞれ得意分野が異なるので、用途に応じて使い分けましょう。
| 比較項目 | FILTER関数 | QUERY関数 | ARRAYFORMULA |
|---|---|---|---|
| 主な用途 | 条件に一致する行の抽出 | 抽出+集計+並べ替えを一括 | 既存の関数を全行に一括適用 |
| 構文の難易度 | やさしい | やや難(SQL風の構文) | 関数による |
| 複数条件 | * / + 演算子で対応 | WHERE句に条件を列挙 | 関数内でIF等を組み合わせ |
| 集計(合計・平均) | 単体では不可。SUMと組み合わせる | SELECT句でSUM/AVGが使える | SUM等を配列で適用 |
| グループ化(部署別合計など) | 不可 | GROUP BY で対応 | 不可(ピボットテーブル推奨) |
| 並べ替え | SORT関数で囲む | ORDER BY で対応 | SORT関数で囲む |
| 結果の見出し列 | 付かない | LABEL句で付けられる | 付かない |
| 向いている場面 | シンプルな条件抽出 | 複雑な集計レポート | 列ごとの計算を一括処理 |
ざっくりまとめると:
- 「条件に合う行を取り出すだけ」 → FILTER関数がシンプルで最適
- 「集計やグループ化もしたい」 → QUERY関数が強力
- 「全行に同じ計算をかけたい」 → ARRAYFORMULAの出番
FILTER と QUERY の選び分けフロー
どちらを使うか迷ったら、次の順番で判断するとブレません。
- 集計が必要か? → 必要なら QUERY(SELECT句でSUM/AVG/COUNTが書ける)
- グループ化が必要か? → 必要なら QUERY(GROUP BYで部署別集計などが可能)
- 見出し列も自動で付けたい? → 必要なら QUERY(LABEL句で列名を整えられる)
- 並べ替えも一緒にしたい? → どちらでも対応可能。シンプルさ重視ならFILTER+SORT
- 上記すべてNOで、条件で行を絞り込むだけ? → FILTER が一番読みやすく保守もしやすい
迷ったらまずFILTER関数を試してみてください。シンプルな条件抽出ならFILTERが圧倒的にわかりやすく、後から条件を増減するメンテナンスもラクです。
FILTER と XLOOKUP・XMATCH の違い
検索系の新関数との違いも気になるかもしれません。
- XLOOKUP: 1つの値を検索して 対応する1行(または1列)だけ を返す
- XMATCH: 1つの値が 何行目(何番目)にあるか を返す
- FILTER: 条件に一致する すべての行 を返す
「商品コードから商品名を引きたい」ような1対1の検索はXLOOKUPの出番です。「東京支店の全データを出したい」ような複数行抽出はFILTERの得意分野です。検索値の位置だけ知りたいならXMATCHを使います。
XLOOKUP・XMATCHの詳しい使い方は スプレッドシートのXLOOKUP関数の使い方 と スプレッドシートのXMATCH関数の使い方 もあわせてご覧ください。
Excel版FILTERとの違い
Excel(Microsoft 365 / Excel 2021以降)にもFILTER関数がありますが、引数仕様が少し異なります。スプレッドシートとファイル連携する場合は要注意です。
| 比較項目 | スプレッドシート版 | Excel版 |
|---|---|---|
| 引数の数 | 2〜(範囲 + 条件×複数) | 3(範囲 + 条件 + 該当なし時の値) |
| 該当なしの返し方 | IFERROR で囲む | 第3引数で指定可能 |
| 複数条件のAND | カンマ区切り または * | * のみ |
| 複数条件のOR | + | + |
| 列方向の抽出 | 可能(条件式の方向で決まる) | 可能(条件式の方向で決まる) |
スプレッドシートで作ったブックをExcelで開くと、複数条件をカンマ区切りで書いた数式は 動作しません。Excelと共有する可能性がある場合は、最初から * で書いておくと安全です。
まとめ
この記事では、GoogleスプレッドシートのFILTER関数の使い方を解説しました。
- 基本:
=FILTER(範囲, 条件)で条件に一致する行を自動抽出 - AND条件: カンマ区切りまたは
*演算子 - OR条件:
+演算子で条件をつなぐ - 実務テンプレ: プルダウン連動 / 期間絞り込み / SORT連携 / 列抽出 / UNIQUE / 集計 / 全件切替
- 空結果対策:
=IFERROR(FILTER(...), "メッセージ")で#N/Aを回避 - デバッグ: 0行になるときは等号比較 → LEN比較 → TRIM/ASC整形の4ステップ
- 使い分け: シンプルな抽出はFILTER、集計込みならQUERY、全行計算ならARRAYFORMULA
FILTER関数は一度覚えてしまえば本当に使い勝手のいい関数です。まずは自分の手元のデータに =FILTER(A2:D, B2:B="東京") のような数式を当ててみてください。元データを壊さずに「欲しい行だけ」を取り出せる安心感を、ぜひ体感してもらえたら嬉しいです。
この記事を書いた人
biz-tactics編集部。事務職の現場で本当に使えるExcel・スプレッドシート・AIの技を発信しています。
