概要
エラーを含む一覧から、
「正常に計算できている行だけを別表にしたい」
「#N/A や #DIV/0! などは全部除外して“キレイなデータだけ”集計したい」
こういうときに使えるのが
=FILTER(…, NOT(ISERROR(…)))
という組み合わせです。
FILTER は「条件に合う行だけを抜き出す関数」、
ISERROR は「エラーかどうかを判定する関数」。
この2つを NOT と組み合わせることで、
「エラーではない=正常データだけ」を抽出できます。
基本の考え方
3つの役割分担
まず、登場人物を整理します。
ISERROR
そのセルがエラーかどうかを TRUE / FALSE で返す関数。
エラーなら TRUE、正常なら FALSE。
NOT
TRUE / FALSE をひっくり返す関数。
TRUE → FALSE、FALSE → TRUE。
FILTER
第1引数の範囲のうち、第2引数の条件が TRUE の行だけを抽出する関数。
この3つを組み合わせて、
「エラーなら FALSE、正常なら TRUE」
という条件列を作って、FILTER に渡してあげる、
というイメージです。
正常データのみ抽出の基本形
テンプレート
最も素直な型はこれです。
=FILTER(抽出したい範囲, NOT(ISERROR(判定したい範囲)))
ISERROR(判定したい範囲)
エラーなら TRUE、正常なら FALSE
NOT(ISERROR(判定したい範囲))
エラーなら FALSE、正常なら TRUE
その結果を FILTER の条件として渡すことで、
「正常な行だけ残す」フィルタになります。
1列を基準に“正常な行だけ”抜き出す
A列の結果が正常な行だけを抽出(横の情報ごと抜く)
前提
A2:A20
計算結果(エラーが混ざっている可能性あり)
B2:D20
その行の詳細情報(商品名・単価・担当者など)
「A列がエラーでない行だけ、B〜D列ごと別表にしたい」という例です。
次の式を、別の場所(たとえば F2)に書きます。
=FILTER(B2:D20, NOT(ISERROR(A2:A20)))
動き
A列が正常な行
ISERROR(A2:A20) = FALSE
→ NOT をかけて TRUE
→ FILTER がその行を抽出
A列がエラーの行(#N/A, #DIV/0! など)
ISERROR(A2:A20) = TRUE
→ NOT をかけて FALSE
→ FILTER の抽出対象から外れる
結果として、「計算がちゃんとできている行だけ」のデータ表ができます。
正常な値だけを“縦に”抜き出す
1列だけをきれいな一覧にしたい場合
A2:A20 に計算結果が入っていて、
そこからエラーを全部除いた“きれいな数値リスト”だけ作りたい場合。
別セルにこう書きます。
=FILTER(A2:A20, NOT(ISERROR(A2:A20)))
A列が正常なセルだけが、
上から詰めて一覧になります。
これを元にグラフを作ったり、
別の集計に回したりするときに便利です。
エラーが1件もないときの対策
FILTER の「該当なしエラー」を防ぐ
FILTER は、条件に合うデータが1つもないと #CALC! エラーになります。
「たまたま全部正常で、エラーが1件も無かった」
というケースでは、
NOT(ISERROR(範囲))
がすべて TRUE になり、
この場合は問題なく全行が抽出されます。
一方で、
「全部エラーで、正常が 0 件」の場合は、
条件が全部 FALSE になるので #CALC! になります。
それを避けたいときは、IFERROR でくるみます。
=IFERROR(
FILTER(A2:A20, NOT(ISERROR(A2:A20))),
""
)
これで、
正常データが1件以上ある
→ 普通に抽出
正常データが1件もない
→ 空白(””)を返す
という動きになります。
特定列の正常行だけ集計に回したいとき
正常行だけ別表 → その上で SUM などをかける
例えば、A2:A20 に VLOOKUP の結果、
B2:B20 に数量が入っているような表で、
- まず A列が正常な行だけ別表に抜く
- その結果に対して合計や平均を取る
という流れもよくやります。
正常行だけを抜く
=FILTER(A2:B20, NOT(ISERROR(A2:A20)))
この結果(たとえば F2:G? に出た表)に対して、
=SUM(G2:G100)
のように集計すれば、
エラー行を含めないクリーンな集計ができます。
エラーを 0 扱いするのではなく、
「そもそも集計対象から除外する」という考え方です。
例題
問題1
A2:A20 に計算結果が入っており、一部にエラー(#N/A や #DIV/0!)が含まれます。
この中から「正常なセルだけ」を縦に抽出する FILTER × NOT(ISERROR) の式を、1 行で書いてください。
=FILTER(A2:A20, NOT(ISERROR(A2:A20)))
問題2
A2:A20 に計算結果、B2:D20 にその行の属性情報(商品名など)が入っています。
A列がエラーでない行だけについて、B〜D列ごと別表に抽出したいです。
FILTER と NOT(ISERROR) を使った式を書いてください。
=FILTER(B2:D20, NOT(ISERROR(A2:A20)))
啣題3
A2:A20 に計算結果が入っています。
正常データが 1 件もない場合は空白(””)を返し、
正常データが 1 件以上ある場合は正常なデータだけを抽出したいです。
IFERROR と FILTER、NOT、ISERROR を組み合わせた式を書いてください。
=IFERROR(FILTER(A2:A20, NOT(ISERROR(A2:A20))), "")
問題4
A2:A20 に VLOOKUP の結果が入っており、
B2:D20 にその行の元データが入っています。
A列がエラーでない行だけを B〜D列ごと抽出し、
エラー行は除外したいです。
FILTER × NOT(ISERROR) の式を書いてください。
=FILTER(B2:D20, NOT(ISERROR(A2:A20)))
問題5
A2:A20 に計算結果があり、
正常なデータだけ抜き出した結果を使ってグラフを作りたいとします。
まず「正常なデータだけ」を別の列(たとえば F 列)に作るための式を、FILTER × NOT(ISERROR) で書いてください。
=FILTER(A2:A20, NOT(ISERROR(A2:A20)))
まとめ
「正常データのみ抽出 → FILTER(NOT(ISERROR))」は、
エラー行は一切集計に混ぜたくない
クリーンなデータだけを使ってグラフや分析をしたい
というときの基本パターンです。
型としては、この 1 行を覚えておけば十分です。
=FILTER(抽出したい範囲, NOT(ISERROR(判定する範囲)))
あとは、
「どの列の正常/エラーを基準にするか」
「行ごと抜くか、1 列だけ抜くか」
を状況に合わせて変えていくだけです。
自分のシートで、エラーが混ざって困っている列があれば、
一度この形で “正常データだけの世界” を作ってみてください。
