(Excel)エラーがある/ない行を抽出する方法

 Excelで、FILTER関数を使ってデータのうちエラーがある行/ない行だけを抽出する方法についてです。
 エラーが存在する(かもしれない)行が1列の場合と複数列の場合の例をそれぞれ紹介します。

チェック対象が1列の場合

エラーがある行を抽出する方法

 次の画像のB~E列の表が対象となるデータですが、E列に(だけ)関数を使っていて一部の行にエラーが発生しています。
 そこでG3セルにFILTER関数を使った式を入力して、E列にエラーがある行だけを抽出しています。

 G3セル

=FILTER(B3:E9,ISERROR(E3:E9))

 「ISERROR(E3:E9)」によりE3~E9セルの各セルがエラーかどうかを判定した結果(TRUEまたはFALSEからなる配列)を取得しています。これをFILTER関数の第2引数(条件)とすることでE列がエラーである行を抽出しています。第2引数は「ISERROR(E3:E9)=TRUE」としてもいいですが、「=TRUE」は省略できます。

エラーがない行を抽出する方法

 データについては上記例と同様です。
 G3セルにFILTER関数を使った式を入力して、E列がエラーでない行を抽出しています。

 G3セル

=FILTER(B3:E9,ISERROR(E3:E9)=FALSE)

 FILTER関数の第2引数(条件)を「ISERROR(E3:E9)=FALSE」とすることでE列がエラーである行を抽出しています。

チェック対象が複数列の場合

エラーがある行を抽出する方法

 次の画像では、B~F列の表が対象となるデータですが、C列とF列に関数を使っていて一部の行にエラーが発生しています。
 そこでH3セルにFILTER関数を使った式を入力して、どちらかの列がエラーである行を抽出しています。

 H3セル

=FILTER(B3:F9,ISERROR(C3:C9)+ISERROR(F3:F9))

 「ISERROR(C3:C9)+ISERROR(F3:F9)」という足し算がポイントです。これによりC列とF列の両方の列がエラーなら2、片方の列がエラーなら1、どちらの列もエラーでないと0になる配列が得られます。これをFILTER関数の第2引数とすることで足し算の結果が0でない(どちらかの列がエラーである、言い換えれば少なくとも一方の列がエラーである)行を抽出しています(OR条件)。
 この第2引数は「ISERROR(C3:C9)+ISERROR(F3:F9)>0」としてもいいですが「>0」は省略できます。



 次の画像も同じことをやっていますが式を少し変えています。

 H3セル

=FILTER(B3:F9,ISERROR(C3:C9&F3:F9))

 「C3:C9&F3:F9」により、C列とF列の値を(文字列的に)結合した結果を得ています。これはどちらかの列がエラーならエラーになりますので、これをISERROR関数の引数とし、さらにFILTER関数の第2引数とすることで、どちらかの列がエラーである行を抽出しています。
 ただしどちらの列もエラーでなくても、値を結合した結果の文字数が極端に長すぎるとその結果がエラーになりますのでご注意ください(以下、&やCONCAT関数を使う例については同様です)。



 次の画像は、1つ1つの列を指定して結合するのではなくでB~F列の値をまとめて結合することで、B~F列のいずれかの列がエラーである行を抽出する例です。
 ただしデータは上記例と同じなので結果も同じです。

 H3セル

=FILTER(B3:F9,BYROW(B3:F9,LAMBDA(x,ISERROR(CONCAT(x)))))

 考え方は1つ上の例と同様ですがちょっと難しくなります。BYROW/LAMBDA/ISERROR/CONCAT関数を使うことで各行のB~F列の値をそれぞれ結合した結果の配列を取得しています(いずれかの列がエラーならTRUEとなります)。これをFILTER関数の引数とすることで、B~F列のいずれかの列がエラーである行を抽出しています。

エラーがない行を抽出する方法

 データについては上記例と同じです。
 H3セルにFILTER関数を使った式を入力して、どちらかの列もエラーでない行を抽出しています。

 H3セル

=FILTER(B3:F9,ISERROR(C3:C9)+ISERROR(F3:F9)=0)

 エラーがある行を抽出する例と同様に、+演算子を使ったOR条件の判定を行っています。FILTER関数の第2引数(条件)に「=0」がある点が異なっています。



 次の画像もやっていることは同じですが+演算子ではなくCONCAT関数を使っています。

 H3セル

=FILTER(B3:F9,ISERROR(C3:C9&F3:F9)=FALSE)

 エラーがある行を抽出する例と同様に、C列とF列の値を結合した結果(どちらかの列がエラーならエラーになる)を使って判定を行っています。FILTER関数の第2引数に「=FALSE」がある点が異なっています。



 次の画像ではB~F列の値を一括して結合することで、B~F列のいずれかの列がエラーである行を抽出する例です。
 ただしデータは上記例と同じなので結果も同じです。

 H3セル

=FILTER(B3:F9,BYROW(B3:F9,LAMBDA(x,ISERROR(CONCAT(x))=FALSE)))

 これも手法としてはエラーがある行を抽出する例と同様で、「=FALSE」が加わっている点だけが異なっています。