FILTER関数とは?「必要な行だけ抜き出す」を自動化できる基本機能
Excelで「この条件に合う人だけ一覧にしたい」「今月分だけ抜き出して別シートに貼りたい」と思ったとき、これまではフィルターをかけて、表示された行をコピーして…という手作業が定番でした。ですがこの方法、更新のたびに同じ作業が発生し、うっかり漏れや貼り間違いも起きがちです。
そこで役立つのがFILTER関数です。FILTER関数は、指定した条件に合うデータだけを自動で抽出して表示してくれる関数。しかも抽出結果は「値を返す」だけでなく、行(レコード)ごとにまとまって返してくれるので、一覧表の作成に強いのが特徴です。
最大のポイントは、FILTER関数がスピル(結果が複数セルに自動的に広がる仕組み)に対応していること。つまり、結果件数が3件でも300件でも、貼り付け先の表をいちいち調整する必要がありません。元データが追加・更新されると、抽出結果も自動で追従します。
- 置き換えられる作業:オートフィルター → コピー → 別表に貼り付け
- 得られるメリット:更新が自動/手作業ミスが減る/報告用の一覧が作りやすい
例えば、営業リストから「担当=自分」の案件だけを抜き出して進捗管理表を作る、勤怠データから「遅刻フラグ=TRUE」の人だけを抽出して注意リストを作る、といった場面で効果を発揮します。抽出結果は表としてそのまま使えるので、集計やグラフの元データにもなります。
ただし注意点もあります。FILTER関数はMicrosoft 365やExcel 2021以降などの「動的配列」に対応したExcelで利用できる機能です(古いバージョンでは使えません)。また、抽出結果が広がる範囲に既に値が入っていると、表示できずエラーになります。とはいえ、運用ルールさえ押さえれば、手作業の抽出作業をほぼゼロにできます。
次章では、FILTER関数を最短で使い始めるために、基本の書き方(構文)と、まず試すべき超シンプルな例を紹介します。
まずは最短で使う|FILTER関数の書き方(構文)と超シンプル例
FILTER関数は「抽出条件さえ書ければ即戦力」です。まずは構文を押さえましょう。
=FILTER(配列, 含む, [空の場合])
- 配列:抽出したい表(範囲)
- 含む:残したい行がTRUEになる条件(論理式)
- 空の場合:条件に合うデータが0件だったときに表示する文字(省略可)
ポイントは2つ。「配列」は返したい列まで含めること、そして「含む」は行数が一致する縦の判定列になっていることです(ここがズレるとエラーの原因になります)。
超シンプル例として、A1:C6に下のような表があるとします。
| 氏名 | 部署 | ステータス |
|---|---|---|
| 佐藤 | 営業 | 対応中 |
| 鈴木 | 開発 | 完了 |
| 田中 | 営業 | 対応中 |
| 伊藤 | 人事 | 未着手 |
| 高橋 | 営業 | 完了 |
「部署が営業の行だけ」を別場所に一覧化したいなら、次の式でOKです。
=FILTER(A2:C6, B2:B6="営業", "該当なし")
これで、部署が「営業」の行だけが行ごと抽出されます。該当データが0件のときは、スピル範囲に「該当なし」と表示されるので、#CALC!などで止まりません。
また、「ステータスが完了の人だけ」を出すなら条件部分を差し替えるだけ。
=FILTER(A2:C6, C2:C6="完了", "該当なし")
慣れるまでは、FILTER(返したい範囲, 判定に使う列=”条件”)の型で覚えると速いです。
最後に運用のコツを1つ。FILTERの結果はスピルで広がるので、抽出結果の右・下に余計な値を置かないのが鉄則です(置くと結果が広がれずエラーになります)。抽出用のスペースを一段確保しておくと、日々の更新が一気にラクになります。
実務で使える条件指定|複数条件(AND/OR)・空白除外・部分一致のコツ
基本形が分かったら、次は「現場あるある」な条件指定です。FILTER関数は条件(含む)の作り方さえ覚えると、一気に実務レベルに化けます。
複数条件(AND):全部満たす行だけを出す
「部署=営業」かつ「ステータス=対応中」など、両方OKの行だけ残したいときは、条件同士を「*(掛け算)」でつなぎます。TRUE=1 / FALSE=0として扱われるため、両方TRUEのときだけ1になります。
=FILTER(A2:C6, (B2:B6="営業")*(C2:C6="対応中"), "該当なし")
ポイントは条件を()で囲むこと。読みやすさも上がり、ミスが減ります。
複数条件(OR):どちらか満たせばOK
「営業 または 人事だけ」など、どちらか一方でも当てはまればOKなら「+(足し算)」です。どちらかがTRUEなら1以上になります。
=FILTER(A2:C6, (B2:B6="営業")+(B2:B6="人事"), "該当なし")
ちなみに「営業または対応中」のように、列をまたいだORも同じ書き方でいけます。
=FILTER(A2:C6, (B2:B6="営業")+(C2:C6="対応中"), "該当なし")
空白を除外:未入力を弾いて“使えるデータだけ”にする
実務データは空白が混ざりがちです。例えば「氏名が空白の行を除外」したいなら、空白でない条件を入れるだけ。
=FILTER(A2:C6, A2:A6<>"", "該当なし")
さらに「営業の中で、ステータスが空白じゃないものだけ」ならANDで組み合わせます。
=FILTER(A2:C6, (B2:B6="営業")*(C2:C6<>""), "該当なし")
部分一致:キーワードを含む行を拾う(検索っぽく使う)
「メモ列に“至急”が含まれるものだけ」など、完全一致ではなく部分一致で抽出したい場面も多いです。そこで使うのがSEARCH(またはFIND)。
SEARCHは見つかると位置(数字)を返し、見つからないとエラーになります。これをISNUMBERでTRUE/FALSEに変換してFILTERに渡します。
=FILTER(A2:C6, ISNUMBER(SEARCH("対応", C2:C6)), "該当なし")
- SEARCH:大文字小文字を区別しない(日本語なら意識不要なことが多い)
- FIND:大文字小文字を区別する
「入力セルE1のキーワードを含む行だけ」みたいにすると、検索窓っぽく運用できます。
=FILTER(A2:C6, ISNUMBER(SEARCH(E1, C2:C6)), "該当なし")
この章のまとめです。ANDは「*」、ORは「+」、空白除外は<>””、部分一致はISNUMBER(SEARCH())。この4つを押さえるだけで、FILTERは「ただの抽出」から実務の自動リスト作成ツールになります。
よくあるエラーと解決策|#CALC!/#N/A対処、範囲ズレ、データ追加に強くする方法
FILTER関数は便利な反面、最初に詰まりやすいのが「エラー」。ただ、原因パターンはだいたい決まっています。ここでは実務でよく出るものを、その場で直せる形でまとめます。
#CALC!(計算できません)/「結果がありません」系の対処
条件に合うデータが0件だと、FILTERはエラー(#CALC!)になりがちです。これを防ぐのが第2引数ではなく、第3引数の「空の場合」。
=FILTER(A2:C100, B2:B100="営業", "該当なし")
これだけで「0件」のときも止まらず、報告用シートでも見栄えが崩れません。運用するなら第3引数は基本入れる、くらいでOKです。
#N/Aが混ざって抽出が壊れるとき(検索・参照の副作用)
FILTER自体というより、条件に使っている列にVLOOKUP/XLOOKUP等の#N/Aが混ざると、判定が崩れたり見た目が悪くなります。対策は2つ。
- 条件列側でIFNA/IFERRORを巻いておく
- FILTERの条件側でエラーをFALSE扱いにする
たとえば部分一致(SEARCH)が「見つからない=エラー」を返す場合は、こうすると安定します。
=FILTER(A2:C100, IFERROR(ISNUMBER(SEARCH(E1, C2:C100)), FALSE), "該当なし")
範囲ズレ(行数不一致):「配列」と「含む」の高さが違う
いちばん多い初歩ミスがこれです。FILTERは、返す範囲(配列)と判定範囲(含む)の行数が同じでないと動きません。
× =FILTER(A2:C100, B2:B99="営業") ←1行ズレ
困ったら、まず配列の開始行と含むの開始行、そして終了行が揃っているかを確認しましょう。表のヘッダー行を含める/含めないも混在しがちなので、抽出対象はデータ行だけ(例:2行目以降)に統一すると事故が減ります。
スピル関連のエラー:抽出結果の右下に値がある
FILTERの結果はスピルで広がるため、出力先の右や下に値があると「広がれない」状態になります。対策はシンプルで、抽出結果用に余白エリアを確保すること。報告用シートなら「抽出結果ブロック」を最上段に置き、下は別セクションに分けると安定します。
データ追加に強くする:固定範囲をやめて「テーブル」or全列参照にする
日々行が増えるデータなら、A2:C100のような固定範囲だと、100行を超えた瞬間に抽出漏れします。おすすめはExcelのテーブル化(Ctrl+T)です。テーブルなら行が増えても自動で範囲が伸びます。
=FILTER(案件表[[氏名]:[ステータス]], 案件表[部署]="営業", "該当なし")
「とりあえず早く」なら全列参照もありますが、重くなりやすいので、実務ではテーブル運用が一番ラクで安全です。
ここまでのエラー対処を押さえると、FILTERは「動いたり動かなかったりの関数」ではなく、更新に強い自動抽出の仕組みになります。次章では、その抽出結果をさらに使いやすくするために、並べ替え・重複排除・他シート連携まで一気に自動化していきます。
運用をラクにする応用|並べ替え・ユニーク化・他シート連携で“抽出→報告”まで自動化
FILTERで「必要な行だけ出す」までできたら、次は報告に使える形に整えるフェーズです。毎回「並べ替え→重複削除→別シートへ貼り付け」をやっているなら、ここを関数でつなぐだけで作業時間が一気に減ります。
抽出結果を自動で並べ替える:FILTER × SORT
たとえば「営業だけ抽出した一覧を、ステータス順(または氏名順)に並べたい」なら、FILTERの外側をSORTで包みます。
=SORT(FILTER(A2:C100, B2:B100="営業", "該当なし"), 1, 1)
上は抽出した表を1列目(氏名)で昇順に並べ替える例です。並べ替えたい列を変えたいなら「1」の部分を2(部署)や3(ステータス)にするだけ。抽出条件が変わって件数が増減しても、自動で並びが整うので、報告用の見た目が安定します。
重複をなくして「担当者リスト」などを作る:FILTER × UNIQUE
実務だと「営業の担当者名だけ一覧にして、選択肢(ドロップダウン)に使いたい」など、ユニークな値だけ欲しい場面が多いです。その場合はUNIQUEを組み合わせます。
=UNIQUE(FILTER(A2:A100, B2:B100="営業", "該当なし"))
さらに「空白を除外して、並べ替えまで済ませる」なら、こうすると運用がラクです。
=SORT(UNIQUE(FILTER(A2:A100, (B2:B100="営業")*(A2:A100<>""), "該当なし")))
これで「営業の担当者だけ」「空白なし」「重複なし」「昇順」が1発。人が増減しても、リストは勝手に更新されます。
他シート連携で“抽出→報告”を完結させる
FILTERは別シートのデータも普通に参照できます。たとえば、元データが「データ」シート、報告用が「報告」シートなら、報告シート側にこう書くだけ。
=FILTER(データ!A2:C100, データ!B2:B100="営業", "該当なし")
おすすめは、報告シートに条件セル(例:B1に部署名)を用意して「選んだ条件で報告が切り替わる」形にすることです。
=SORT(FILTER(データ!A2:C100, データ!B2:B100=$B$1, "該当なし"), 3, 1)
これなら、B1を「営業→開発→人事」と変えるだけで、抽出から並べ替えまでが自動で追従。“抽出して貼る”が不要になり、報告作業が「条件を変えて確認するだけ」になります。
FILTERは単体でも便利ですが、SORT・UNIQUE・他シート参照までつなぐと、日次・週次のルーティンが仕組み化できます。次にやることはシンプルで、報告で必要な形(並び・重複・連携)を先に決めて、関数で固定すること。これができると、Excelは「作業ツール」から「自動で整う報告ツール」に変わります。


コメント