(Excel)IFERROR関数で空白セルが0にならないようにする

 ExcelでIFERROR関数を使ってエラー値を別の値に変換しようとするときに、空白セルが「0」になってしまうという現象が起こります。以下ではこれを防ぐ方法について紹介します。

基本的な例

 次の画像では、B列に各種の値が入力されていますが一部の値はエラーとなっています(B5,B6セル)。そこでD3セルに「=IFERROR(B3,"")」と入力してD8セルまでフィルコピーし、エラーを空文字列("")に変換してD列に表示させています。

 結果を見るとエラーを変換するのはうまくいっていますが、B7セルの空白セル(未入力)が「0」という数値に変わってしまっているのがわかります。
 単純に「=B7」と参照しても「0」になるので、IFERROR関数に限らずExcelはこういうものだと理解する必要はありますが、さすがに目障りなので以下では0ではなく空文字列("")になるようにしてみます。



 次の画像ではIFERROR関数とIF関数を併用して、エラーと空白セル(未入力)をいずれも空文字列("")に変換しています。

 D3セル(下方にフィルコピー)

=IFERROR(IF(B3="","",B3),"")

 IFERROR関数の第1引数(対象値)を「IF(B3="","",B3)」としています。この式は一見何の効果もないように見えますが、空白セル(未入力)だけが空文字列("")に変換されます。これにより空白セルは空文字列としてIFERROR関数に渡されるので、「0」になりません。



 ところで次の画像ではD3セルに「=IF(B3="","",IFERROR(B3,""))」と入力してフィルコピーしています。
 上記例と同じ結果になるようにも見えますがこれはうまくいかず、エラーを変換できません。

 IF関数の第1引数(条件)にエラー値を渡してしまうと第2、第3引数の内容に関わらずエラーになるためIFERROR関数が無効となり、このような結果になります。
 そもそもIF関数がこういう挙動をするからIFERRORがあるともいえますが、うっかりしやすいポイントです。



 次の画像はより簡単で、うまくいく方法です。最初の画像の式に「&""」をつなげることで空白セルが「0」にならないようにしています。
 ただしB3→D3セルの変換結果からわかるように、数値(及び日付)は文字列に変換されますので注意してください。

 D3セル(下方にフィルコピー)

=IFERROR(B3,"")&""

 なぜ0に空文字列("")をつなげて空文字列になるのか、という気がするかもしれませんが、空白セルは式で参照・計算している限りは空白セルであり(「=ISBLANK(IFERROR(空白セル,""))」はTRUEになります)、それをセル上に表示した時点で数値の「0」になるからです。
 よって「=IFERROR(空白セル,"")&""」は「空白セル&""」つまり「""」としてセルに表示されます。

XLOOKUP/VLOOKUPとの併用例

 実際によくあるのが「XLOOKUP関数やVLOOKUP関数で抽出した値がエラーである場合にIFERROR関数で別の値に変換したい」というケースです。
 具体例は次のようになります。

 F3セル(下方にフィルコピー)

=IFERROR(XLOOKUP(E3,B$3:B$7,C$3:C$7),"")

 XLOOKUP関数でC列の値を抽出し、IFERROR関数でエラーを空文字列("")に変換しています。
 しかし空白セルを抽出してしまうとそれは「0」として表示されます。



 そこで以下ではIF関数を併用して空白セルが「0」ではなく空文字列("")になるようにしています。

 F3セル(下方にフィルコピー)

=IFERROR(XLOOKUP(E3,B$3:B$7,IF(C$3:C$7="","",C$3:C$7)),"")

 XLOOKUP関数の第3引数(抽出範囲)を「IF(C$3:C$7="","",C$3:C$7)」とすることで空白セルを解消(空文字列に変換)しています。
 これで空白セルが抽出されることがなくなり、結果的に空文字列("")として表示されます。



 次の画像は「&""」を使って短く済ませる例です。
 ただし数値・日付が抽出されると文字列に変換されます

 F3セル(下方にフィルコピー)

=IFERROR(XLOOKUP(E3,B$3:B$7,C$3:C$7)&"","")

 「&""」は最後(IFERRORの外側)につけても同じ結果になります。



 続いてVLOOKUP関数の場合です。
 IF関数を併用して空白セルが「0」ではなく空文字列("")になるようにしています。

 F3セル(下方にフィルコピー)

=IFERROR(VLOOKUP(E3,IF(B$3:C$7="","",B$3:C$7),2,FALSE)&"","")

 
 VLOOKUP関数の第2引数(範囲)を「IF(B$3:C$7="","",B$3:C$7)」とすることで対象となる表全体の空白セルを解消(空文字列に変換)しています。よって厳密には検索値が空文字列である場合に結果が変わる可能性がありますが、実用的には問題ないでしょう。



 最後の例として、「&""」を加えることで簡単に済ませる例です。
 ただし数値・日付が抽出されると文字列に変換されます

 F3セル(下方にフィルコピー)

=IFERROR(VLOOKUP(E3,B$3:C$7,2,FALSE)&"","")

 「&""」は最後(IFERRORの外側)につけても同じ結果になります。