Excelでデータがないときは表示しない関数を知りたいときはないでしょうか。
けど、そんな中で悩むことは、
・空欄のセルに「0」が出てしまう
・IFERRORとIFNAの違いがわからない
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
完成イメージ
データがないときにエラーや0を表示しないようにすると、表がぐっと見やすくなります。
今回は
・検索した値がないときは空白にする(IFERROR / IFNA)
・空欄のセルや0を表示しない(ISBLANK / IF)
・完全一致で見つからないときだけ空白にする(IF + COUNTIF)
をゴールにします。
検索コードを変えても、#N/Aや0が出ずにすっきり表示されるようになります。

上の画像が完成形です。検索コードに対応するデータがないときは、#N/Aではなく何も表示されません。
なお、毎回数式を入れるのが手間な方向けにVBAで検索式をまとめて入れる方法と、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。
早速実装して試してみましょう!
もくじ
STEP1. 商品表と検索エリアを用意する
まずは商品の一覧表と、コードを入れて検索するエリアを用意します。
左側が商品表(A列〜C列)、右側が検索エリア(D列〜F列)です。
検索エリアは、調べたい商品コードを入れると商品名と単価が出るようにしています。
ここではあえて検索エリアに存在しないコードや空欄を混ぜてあります。
そのため、いまは素のVLOOKUPなので#N/Aと表示されています。
この#N/Aを消していくのが、今回のゴールです。

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。
| 商品コード | 商品名 | 単価 | 検索コード | 商品名 | 単価 |
|---|---|---|---|---|---|
| A1001 | りんご | 150 | A1003 | ||
| A1002 | みかん | 120 | A9999 | ||
| A1003 | ぶどう | 380 | |||
| A1004 | もも | 450 | A1006 | ||
| A1005 | なし | 200 |
※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。
STEP2. IFERRORでエラーをまとめて空白にする
まずは一番よく使うIFERROR関数です。
検索結果のセルに、VLOOKUPをIFERRORで包むだけです。
E3セルには次のように入力します。
=IFERROR(VLOOKUP($D$3,$A$2:$C$6,2,FALSE),"")
見つからないときは #N/A ではなく「””(空文字)」を返すので、セルは空に見えます。
つまり、エラー表示を丸ごと消せるというわけです。
商品名と単価の両方のセルに入れておきましょう。

エラーだったセルが、すべて空になりました。
存在するコード(A1003)の行だけ、これまでどおり商品名と単価が表示されています。
数式を入れる前はセルがエラーで埋まって見づらかったのが、すっきりしましたね。

STEP3. IFNAで「#N/Aだけ」を消す
IFERRORはすべてのエラーを消しますが、IFNA関数は#N/Aだけを消す関数です。
式の形はIFERRORと同じで、関数名を変えるだけです。
=IFNA(VLOOKUP($D$3,$A$2:$C$6,2,FALSE),"")
たとえば単価のセルに文字が混ざっていて #VALUE! が出ている場合、IFERRORだとそのエラーも隠れてしまいます。
IFNAなら #N/A だけを空白にして、#VALUE! はそのまま残せるので、入力ミスに気づけます。
間違いを見つけたい場合はIFNAがおすすめです。

STEP4. ISBLANKで空欄のセルを判定する
検索コードそのものが空欄のときに何も表示しないようにするには、ISBLANK関数を使います。
ISBLANKは「セルが本当に空かどうか」を判定する関数です。
E4セルには次のように入力します。
=IF(ISBLANK($D$4),"",VLOOKUP($D$4,$A$2:$C$6,2,FALSE))
検索コードが未入力なら何も表示せず、入力されていれば検索結果を出す、という式です。
「調べたいコードをまだ入れていないだけ」のときに #N/A が出るのを防げます。
なお、ISBLANKは「空のセル」しか空とみなしません。
「=””」で作った空文字や、数式の結果が空のセルは空とみなされない点に注意しましょう。

STEP5. IF + COUNTIFで完全一致のときだけ表示する
「そのコードが本当に表の中に存在するか」を先に確認したいときは、COUNTIF関数を組み合わせます。
COUNTIFで件数を数え、0件なら空白、1件以上ならVLOOKUPの結果を出す、という式です。
E5セルには次のように入力します。
=IF(COUNTIF($A$2:$A$6,$D$5)=0,"",VLOOKUP($D$5,$A$2:$C$6,2,FALSE))
COUNTIFは完全一致で探すので、余分なスペースや表記ゆれがあるコードはヒットしません。
「存在チェック」と「値の取得」を分けたいときに便利です。
見つからないときに「該当なし」と表示させたい場合は、”” の代わりに “該当なし” と書けばOKです。

IFERROR・IFNA・ISBLANK・IF+COUNTIFの使い分け
「どれを使えばいいの?」と迷ったときのために、違いを表にまとめました。
| 使う関数 | 何を消せるか | こんなときに |
|---|---|---|
| =IFERROR(式,””) | すべてのエラー(#N/A・#VALUE!・#DIV/0!など) | とにかくエラー表示を出したくないとき |
| =IFNA(式,””) | #N/Aだけ | #VALUE!などは気づけるように残しておきたいとき |
| =IF(ISBLANK(セル),””,式) | 空欄セルを参照したときのエラー | 検索コードが未入力のときに何も出したくないとき |
| =IF(COUNTIF(範囲,コード)=0,””,式) | 存在しないコードのときの結果 | 完全一致で存在チェックしてから値を出したいとき |
エラーを消すなら IFERROR、#N/Aだけを消すなら IFNAです。
「見つからない」と「未入力」は別物なので、空欄はISBLANK、存在しないコードはCOUNTIFで使い分けると失敗しません。
0を表示しないようにする
数値の0を表示しないようにしたいときも、同じ考え方でIF関数が使えます。
値が0なら「””」を返すようにします。
B9セルには次のように入力します。
=IF(A9=0,"",A9)
0の行だけが空欄になり、0以外はそのまま表示されます。
上の画像では、数量の0に対応する金額が空欄になっていますね。
なお、シート全体で0を隠したいときは、
ファイル → オプション → 詳細設定 → 「ゼロ値のセルにゼロを表示する」のチェックを外す
という方法もあります。
こちらはブック全体に効く設定なので、一部のセルだけ隠したいときはIF関数がおすすめです。

VBAで検索式をまとめて入れる
毎回数式をコピーして貼るのが面倒なときは、VBAでまとめて入れるのがおすすめです。
ボタン1つで検索エリアの数式を一気に更新できます。
Sub SetIfErrorLookup()
Dim i As Long, lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To 5
If Range("D" & i).Value <> "" Then
Range("E" & i).Formula = _
"=IFERROR(VLOOKUP($D$" & i & ",$A$2:$C$" & lastRow & ",2,FALSE),"""")"
Range("F" & i).Formula = _
"=IFERROR(VLOOKUP($D$" & i & ",$A$2:$C$" & lastRow & ",3,FALSE),"""")"
Else
Range("E" & i).ClearContents
Range("F" & i).ClearContents
End If
Next i
End Sub
まずは手で1つ数式を入れて動きを確かめてから、VBAでまとめるのがおすすめです。
うまくいかないときの対処法(トラブルシュート)
実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。
| 症状 | 原因 | 対処 |
|---|---|---|
| 空白にしたのに0が出る | 数式の最後を 0 や NULL で書いている | ダブルクォーテーション2つで “” と書く |
| 空にしたセルがCOUNTIFで数えられる | ISBLANKは「=””」で作った空文字を空とみなさない | 空文字も除きたいなら =IF(セル=””,””,式) を使う |
| #N/Aが消えない | IFERRORの括弧が数式全体を包んでいない | =IFERROR(VLOOKUP(…),””) の形にする |
| 検索コードに余分な空白がある | 文字列の前後にスペースが入っている | =TRIM() で整える、またはCOUNTIFで存在確認する |
| 違う商品の値が返る | VLOOKUPの最後の引数を省略して近似一致になっている | 最後に FALSE を付けて完全一致にする |
関数の説明
今回使う4つの関数の概要です。
どれも「表示しない」ための基本の関数なので、違いを押さえておきましょう。
IFERROR関数(イフエラー)
| 書式 | =IFERROR(値, エラーの場合の値) |
|---|---|
| できること | 数式がエラーになったとき、代わりに表示する値を指定します。 |
| 戻り値 | エラーでなければ「値」、エラーなら「エラーの場合の値」 |
| こんなときに | #N/Aや#VALUE!などのエラー表示をまとめて消したいとき。 |
| 注意 | エラーの種類を問わずすべて置き換えるため、気づきたいエラーも隠れてしまいます。 |
IFNA関数(イフエヌエー)
| 書式 | =IFNA(値, N/Aの場合の値) |
|---|---|
| できること | #N/Aエラーのときだけ、代わりの値を返します。 |
| 戻り値 | エラーが#N/Aなら代わりの値、それ以外はそのまま |
| こんなときに | 「見つからない」ときだけ空白にし、他のエラーは残したいとき。 |
| 注意 | Excel 2013以降で使えます。#VALUE!などは置き換えません。 |
ISBLANK関数(イズブランク)
| 書式 | =ISBLANK(テストの対象) |
|---|---|
| できること | セルが本当に空かどうかを判定します。 |
| 戻り値 | 空なら TRUE、空でなければ FALSE |
| こんなときに | 未入力のセルを参照したときのエラーを防ぎたいとき。 |
| 注意 | “=”” で作った空文字や、数式の結果が空のセルは FALSE になります。 |
COUNTIF関数(カウントイフ)
| 書式 | =COUNTIF(範囲, 検索条件) |
|---|---|
| できること | 条件に一致するセルの個数を数えます。 |
| 戻り値 | 条件に一致したセルの数(0以上) |
| こんなときに | 値が表の中に存在するかを先に確認したいとき。 |
| 注意 | 既定は完全一致です。ワイルドカード(*)を使うと部分一致になります。 |
完成
検索コードのA9999や空欄の行が、#N/Aではなく何も表示されなくなりました。
存在するコード(A1003)では、これまでどおり商品名と単価が表示されています。
エラーや0が見えなくなったぶん、表がとてもすっきりしましたね。
思ったとおりに動きましたか?

さいごに
いかがでしょうか。
今回は、
についてまとめました。
まずは今回のサンプル表で、検索コードをいろいろ変えて、ぜひ一度試してみてください。
エラー表示がなくなると、資料としても見やすくなりますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。














コメントを残す