Excel関数 逆引き集 | 正常データのみ抽出 → FILTER(NOT(ISERROR))

Excel
スポンサーリンク

概要

エラーを含む一覧から、
「正常に計算できている行だけを別表にしたい」
「#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 に数量が入っているような表で、

  1. まず A列が正常な行だけ別表に抜く
  2. その結果に対して合計や平均を取る

という流れもよくやります。

正常行だけを抜く

=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 列だけ抜くか」
を状況に合わせて変えていくだけです。

自分のシートで、エラーが混ざって困っている列があれば、
一度この形で “正常データだけの世界” を作ってみてください。

タイトルとURLをコピーしました