🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのFILTER関数 — 一致する行をすべて返す(#CALC! と

|

ExcelのFILTER関数 — 一致する行をすべて返す(#CALC! と

要点FILTERVLOOKUP とは「問い」が違います。検索は1件を返し、 FILTER は条件に一致するすべての行を返して、範囲にスピルします。構文は =FILTER(配列, 含める条件, [空のとき])。つまずくのは3点です。一致が無いと #CALC! になる(第3引数で回避:=FILTER(data, cond, "該当なし"))。条件を 組み合わせるときは AND は配列の掛け算、OR は足し算(A=x)*(B=y))で、 AND()/OR() は使わない。スピル先がふさがっていると #SPILL!。対応は Excel 365 / 2021 以降です。

=FILTER(Sales, Region = "West")
=FILTER(Sales, (Region = "West") * (Amount > 1000), "該当なし")

「地域が West の行を全部出す」には、長らく作業列+オートフィルター+コピペ、あるいは 壊れやすい配列数式(CSE)が必要でした。FILTER はそれを1つの式にし、元データが 変われば即座に再計算します。ただし1つの値ではなく配列を返すため、検索とは 違うふるまいをし、エラーメッセージも新顔です。

この記事でわかること

  • FILTER は「多くを返すクエリ」、検索は「1件を返す」——この違いがすべての起点
  • AND / OR のコツ:配列を掛ける・足す(AND()OR() は使わない)
  • 空の結果で #CALC! が出る理由と、それを消す唯一の引数
  • #SPILL! の本当の原因と解消法
  • 生きた一覧を作る「奥義の式」=SORT(UNIQUE(FILTER(...)))

考え方の軸:FILTER は「検索」ではなく「クエリ」

SQL を使ったことがあれば、FILTERWHERE 句です——この条件が真の行を全部くださいVLOOKUPXLOOKUP は逆で、上から走査して最初の1件で 止まります。この違いが、FILTER の「意外な挙動」をすべて説明します。検索は1つの値を 1つのセルに返す。FILTER行の塊を返し、式を入れたセルから下(と右)へスピル します。ドラッグもCSEも不要。一度書けば、Excel がデータ量に合わせて出力サイズを決めます。

' 1件・1セル:
=XLOOKUP("West", Region, Sales)        ' 最初の West 行

' 全件・範囲にスピル:
=FILTER(Sales, Region = "West")        ' West の行を、ある分だけ全部

第2引数 含める条件 は、データと同じ高さの TRUE/FALSE の列だと考えてください。 Region = "West" は1セルではなく Region 列全体を一度に比較し、TRUE/FALSE の配列を 作ります。FILTER はその値が TRUE の行を残します。

すべての鍵となるルール:AND は掛ける、OR は足す

FILTER で最も役立つのに、多くの解説が埋もれさせている点です。つい AND(Region="West", Amount>1000) と書きたくなりますが、動きませんAND() は配列を 1つの TRUE/FALSE に潰してしまい、FILTER は全件か0件になります。条件は配列のままで 保たなければならないので、ブール演算を自分で書きます。

' AND — 条件どうしを掛ける(TRUE*TRUE = 1、何か*FALSE = 0)
=FILTER(Sales, (Region = "West") * (Amount > 1000), "該当なし")

' OR  — 条件どうしを足す(FALSE+FALSE = 0、どちらか1なら残る)
=FILTER(Sales, (Region = "West") + (Region = "East"), "該当なし")

掛け算が論理ANDになるのは TRUE*TRUE = 1*FALSE は必ず0だから。足し算が論理ORに なるのは、どちらかが1なら行が残るから。各条件は必ずカッコで囲みます——比較を演算より 先にやらせるためです。ここが腑に落ちれば、どんな複雑な条件も「1と0の配列の算数」に すぎません。

FILTER が #CALC! を返す理由と、それを防ぐ引数

「FILTERが効かない」で最も多い相談がこれです。1行も一致しないと結果は空の配列に なり、Excel はセルに「何も無い」を表示できないため #CALC! を返します。ロジックの バグではなく、空配列の見た目そのものです。直し方は省略可能な第3引数 空のとき

=FILTER(Sales, Region = "North")                  ' North が無いと -> #CALC!
=FILTER(Sales, Region = "North", "該当なし")       ' -> "該当なし"(きれい)
=FILTER(Sales, Region = "North", "")               ' -> 空白にしたいとき

ダッシュボードや他の式に渡す FILTER には、毎回 空のとき を付けるクセを。 不意の #CALC! は連鎖し、スピルを参照するものすべてにエラーが伝染します。引数を 1つ足すだけで、「該当なし」が赤いエラーではなく自分の決めた値になります。

#SPILL! は式ではなく「隣人」の問題

FILTER はスピルする先に空セルが必要です。結果が占めたい範囲に、はぐれた値・結合 セル・残った見出しなどがあると、Excel は配列を置けず #SPILL! を返します。式は 正しく、ふさがっているのは置き場所です。セルをクリックすると、使おうとしている スピル範囲が枠線で示されます。そこにあるものを消せば結果が現れます。実用ルールは2つ: 既存データのすぐ上に FILTER を置かない、スピル域に落ちるものを列全体(A:A)に 入れない。

スピル結果は # 演算子で参照する

出力サイズはデータで変わるので、固定範囲では参照しません。スピル# 演算子で 指します。FILTERE2 にあるなら、E2# は「いまスピルしている範囲全体(大きさは 可変)」の意味です。グラフ・COUNTA・自動で伸縮するドロップダウンに渡せます。

=COUNTA(E2#)        ' FILTER が返した行数(自動更新)
=SUM(F2#)           ' スピルした金額列の合計

奥義の式:SORT・UNIQUE・FILTER の合わせ技

FILTER が重要なのは「組み合わせられる」からです。UNIQUESORT で包めば、ふつう手作業3ステップで作るものが、 自動メンテの1式になります。

=SORT(UNIQUE(FILTER(Customer, Region = "West")))

内側から読みます。FILTER が West の顧客を抽出し、UNIQUE が重複を除き、SORT が 並べ替える——売上が1件増えた瞬間に全部やり直されます。動的ドロップダウンや ダッシュボード一覧の定番ソースで、作業列も更新ボタンも VBA も不要です。

判断:FILTER が旧来のやり方に取って代わるとき

一致行をコピーしたいだけのために作業列を足してオートフィルターを掛けているなら、 それが FILTER の合図です。部分集合の抽出に {=...} の CSE 配列数式を打っているなら、 365 ではもう10年遅れのパターンです。正直な例外:超巨大シートでは FILTER はブックと 共に再計算するので、100万行からの一度きりの抽出はオートフィルターや Power Query の方が 軽い。生き続けてほしいものはすべて FILTER の勝ちです。

ExcelMaster の使いどころ

FILTER の作業の多くは要するに「生きたビューを作って」です——期限超過の未払い請求を 金額順で別タブにExcelMaster は、AND/OR のブール算も 空のとき ガードも含めて、 その式を日本語の指示から書き、置きたい場所に配置し、スピル域が空いているかまで確認 します。ロジックはあなたが握り、手作業だと厄介な配列の機構は任せられます。

よくある質問

FILTER が #CALC! を返すのはなぜ?

条件に1行も一致せず、空の配列はセルに表示できないからです。第3引数 空のとき を 足してください:=FILTER(data, 条件, "該当なし")。エラーが自分で決めた値に変わります。

複数条件で抽出するには?

第2引数を配列のまま保ち、ブール算をします。AND は掛ける (A=x)*(B=y)、OR は足す (A=x)+(B=y)AND()OR() 関数は配列を1値に潰すので使いません。

FILTER で #SPILL! が出る原因は?

結果がスピルしたいセルを、値・結合セル・書式などがふさいでいます。式のセルをクリック してスピル範囲の枠を確認し、そこにあるものを消せば表示されます。

FILTER は Excel 2016 / 2019 で使える?

使えません。FILTER などの動的配列関数は Excel 365 / 2021 以降が必要です。旧版では オートフィルター、CSE 配列数式、Power Query を使います。

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-06-16。

関連ガイド: ExcelのUNIQUE関数 · ExcelのSORT関数 · ExcelのXLOOKUP