vlookup関数のエラー処理にiferror・iserror関数を使わない理由
vlookup関数を使っていて、エラーを出さないようにしたいという場合、次の3通りの書き方が考えられます。
この3つの計算式の「使い分け方」がわかるでしょうか?
- A)iferror関数を使うパターン
-
=iferror(vlookup(D1,$A$1:$B$4,2,FALSE),"")
- B)iserror関数を使うパターン
-
=if(iserror(vlookup(D1,$A$1:$B$4,2,FALSE)),"",vlookup(D1,$A$1:$B$4,2,FALSE))
- C)どちらも使わないパターン
-
=if(D1="","",vlookup(D1,$A$1:$B$4,2,FALSE))
この記事の目次
計算式の意味は一緒?違う?
「A)iferror関数を使うパターン」と「B)iserror関数を使うパターン」は、計算式の意味としては全く一緒です。
どちらを使っても計算結果は変わりませんので、通常は、見やすい「A)iferror関数を使うパターン」を使うべきでしょう。
ただし、iferror関数は、エクセル2007以降でしか使用できません。
そのため、それより前のエクセルでファイルを開く可能性がある場合には、「B)iserror関数を使うパターン」を使ってください。
一方で、「C)どちらも使わないパターン」は、「A」「B」とは計算式の意味が異なります。
そのため、意味合いを把握したうえで、自分の状況に適した計算式を使う必要があります。
vlookup関数でエラーが起きる場合とは?
計算式の意味がどう異なるかを知るために、まず最初に、vookup関数でエラーが起きるケースを考えてみます。
「#N/A!」エラー
該当する値がない場合です。
細かく分けると、次の2つの場合に分かれます。
検索値が空欄の場合
次のように検索値が空欄の場合です。
検索値が(空欄以外で)存在していない場合
検索値は空欄ではないけれど、その値が、検索対象となる表に存在していない場合です。
「#REF!」エラー
選択範囲外の項目を抽出しようとしている場合に、このエラーが生じます。
例えば、上記の例では、検索対象となる表を「$A$1:$A$4」というようにA列しか含めていないのに、列番号に「2(=B列を意味する)」と指定しており、検索対象となる表の範囲からはみ出ているために、#REF!エラーが生じます。
それぞれの方法を使うと、どのエラーを無効化できるか?
さて、話を元に戻します。
上記「A」「B」「C」の計算式は、全て「エラーの無効化をしたい」という意図があるわけです。
ところが、この3つの計算式では、無効化できるエラーの範囲が異なります。
「A)iferror関数を使う」 「B)iserror関数を使う」 |
「C)どちらも使わない」 | ||
---|---|---|---|
#N/A! | 検索値が空欄 | ○(エラーを無効化できる) | ○ |
検索値が存在しない | ○ | ×(エラーを無効化できない) | |
#REF | ○ | × |
「A)iferror関数を使う」、「B)iserror関数を使う」の計算式では、全てのエラーを無効化します。
一方で「C)どちらも使わない」の計算式の場合、D1セルが空欄以外の場合は、vlookup関数が通常通り実行されてしまうので、その他のエラーには効果がありません。
3つの方法の使い分け方
それでは「A)iferror関数を使う」、「B)iserror関数を使う」「C)どちらも使わない」は、どのように使い分ければいいでしょうか?
上記の比較を見ると、全てのエラーを無効化できる「A)iferror関数を使う」、「B)iserror関数を使う」のほうが優れているように見えますが、実際には、そういうわけでもありません。
「A)iferror関数を使うパターン」のメリット
iferror関数を使うパターンは、関数の見た目がわかりやすく、入力もしやすいです。
ですから、エクセル初心者の場合は、このパターンが一番おすすめです。
「B)iserror関数を使うパターン」のメリット
iserror関数は、古いエクセルでも使えます。
そのため、旧バージョンのエクセルで使う可能性がある場合には、このパターンがいいでしょう。
「C)どちらも使わないパターン」のメリット
このパターンのメリットは、エラーが起きる内容ごとに、きめ細かい処理を書けることです。
特に、今回のようにvlookup関数と組み合わせる場合には、次のように「エラーを敢えて表示させる」ほうが良い場合も多いです。
#REFエラーを敢えて出すメリット
「#REF」エラーが出るケースは、そもそも計算式が間違えています。
それなのに「#REF」エラーを消してしまうと、計算式の間違いに気づけない可能性が増えてしまいます。
検索したい値が存在しない場合のエラーを敢えて出すメリット
検索値は空欄ではないけれど、その値が、検索対象となる表に存在していないケースを考えてみてください。
この場合にも、エラーをエラーとしてそのまま表示したほうがいい場合があります。
例えば、運用ルールとしてD1セルには検索対象となる表に存在している値しか入れないことになっている場合、E1セルが空欄になるよりも、エラーが出たほうが異常事態が生じていることが伝わりやすくなります。
特に、vlookup関数がおかしい・エラーを解消する8つのチェックポイントの中の「表記ゆれ」に該当するようなデータを入力している場合、エラーが出てくれないと、表記ゆれのためvlookup関数の計算結果に異常があることに気づかずに、次の業務に進んでしまうかもしれません。
このような「意図しない計算ミス」を防ぐために、敢えてエラーを出したほうがいい場合も多いのです。
まとめ
今回、紹介した3つのパターンは、どれが優れていて、どれが劣っているというものではありません。
状況に応じて使い分けてください。