VLOOKUPを入れたら表が「#N/A」だらけになった。あるいは、空欄のはずなのに「0」が並んでいる。調べて「IF関数で囲めばいい」と出てきたのに、なぜか直らない。
実は、VLOOKUPで空白にならない原因は3種類あり、原因ごとに使う関数が違います。この記事では3つの症状の見分け方から、それぞれの正しい数式、さらに多くの解説が触れていない落とし穴まで解説します。
コピーしてそのまま使える数式も用意しましたので、ぜひご活用ください。
VLOOKUPで空白にならない原因は3つある
まず、自分がどの状態なのかを特定するところから始めましょう。ここを間違えてしまうと、いくら数式を書き換えても直らずに抜け出せなくなってしまいます。
| 症状 | 画面に出るもの | 原因 |
| 症状A | #N/A | 検索値のセルが、まだ空欄になっている |
| 症状B | 0 | 参照する表の側のセルが空欄になっている |
| 症状C | #N/A | 検索値の打ち間違い、または表に存在しないデータ |
見分け方はシンプルです。
- 画面に出ているのは「エラー」か「0」か。「0」なら症状Bです。
- 「#N/A」の場合は、検索値のセルを確認します。何も入力していなければ症状A、入力してあるのに出ているなら症状Cです。
ここで重要なのは、症状Aと症状Cは、画面に出る文字がどちらも「#N/A」で同じだという点です。しかし原因が違うので、直し方も変わってきます。この2つを混同したまま数式を触ると、いつまでも解決しないという事態に陥ってしまいます。
なお、「#N/A」も「0」も、数式が壊れて出ているわけではありません。「#N/A」は「探しているものが見つかりませんでした」というExcelからのメッセージであり、「0」はExcelが空欄のセルを0として扱う仕様によるものです。
【作業メモ: 画像: 3つの症状を並べた比較スクリーンショット】
【コピペ用】VLOOKUPで空白なら空白にする数式3パターン
急いでいる方のために、先に完成形を掲載します。
症状A:検索値が空欄のとき
=IF(A2="","",VLOOKUP(A2,$D$2:$E$50,2,FALSE))
症状B:参照先が空欄で0が出るとき
=IF(VLOOKUP(A2,$D$2:$E$50,2,FALSE)="","",VLOOKUP(A2,$D$2:$E$50,2,FALSE))
症状C:該当データがなく#N/Aが出るとき
=IFERROR(VLOOKUP(A2,$D$2:$E$50,2,FALSE),"")
ただし、症状Bには重大な落とし穴があります。ネットやYouTubeでよく紹介されている別の書き方をそのまま使ってしまうと、表の合計が正しく計算されなくなってしまいます。詳しくは後述します。
症状A:検索値が空欄で#N/Aが出るときの対処法
症状Aは最も多いパターンです。表を先に作り、まだ入力していない行にも数式だけコピーしてある状態で発生します。
検索値が空欄だと、VLOOKUPは「空っぽ」を探しに行きます。当然そんなデータは表にないため、「#N/A」が返ってきます。
IF関数で「空欄なら空白」にする
対処は、「もし検索値が空っぽなら、何も表示しない」という条件を先に付け足すだけです。
=IF(A2="","",VLOOKUP(A2,$D$2:$E$50,2,FALSE))
すでにVLOOKUPを書いている場合は、後から囲む形が早いです。
- 直したいセルを選び、F2キーを押して編集状態にする
- イコールのすぐ後ろに IF( を入力する
- 検索値のセル(例ではA2)をクリックし、="" と入力する
- カンマで区切り、"" を入力する(空欄だったときに表示する内容)
- もう一度カンマで区切る(この後ろが、値が入っていたときの処理になる)
- 末尾に閉じカッコ ) をもう1つ足してEnter
""(ダブルクォーテーション2つ)は、Excelでは「空っぽ」を意味します。
閉じカッコは2つ必要
多くのExcel初心者がつまずいてしまうのがここです。
閉じカッコは2つ必要なので注意しましょう。1つはVLOOKUPを閉じるため、もう1つはIFを閉じるためです。「そのとおりに入力したのにエラーになる」という場合、ほとんどはカッコが1つ足りていません。
検索の型は必ずFALSEにする
VLOOKUPの4つ目の引数は、必ず `FALSE`(または `0`)にしましょう。「完全に一致するものだけを探す」という指定です。
TRUE にすると「近いものでよいから探す」という動作になり、表に存在しないデータなのに、近い値を勝手に持ってきてしまいます。エラーが出ないため間違いに気づけず、かえって危険です。
【作業メモ: 画像: IF関数で囲む前と後の数式バー比較】
症状B:参照先が空白で0が表示されるときの対処法
検索値は合っていて、表にもデータがある。それでも「0」が出る場合、参照する表の、そのセルだけが空欄になっています。Excelは空欄のセルを0として扱うため、0が返ってくるのです。
対処法は2つあり、扱うデータの種類によって選ぶべき方法が変わります。
方法1:&"" を付ける(文字データ向け)
最も手軽なのは、数式の末尾に &"" を付ける方法です。
=VLOOKUP(A2,$D$2:$E$50,2,FALSE)&""
& は文字と文字をつなげる記号です。空欄のセルを参照した結果である「0」に空っぽの文字を連結すると、結果が数値ではなく文字として扱われ、見た目が空白になります。
&"" の落とし穴:合計が計算できなくなる
ここが最も重要な注意点です。
&"" を付けると結果が「文字」になります。つまり、数値ではなくなります。そのため次の問題が起きます。
- SUMで合計しても0になる — 数式もデータも正しく見えるのに、Excelから見れば文字なので足せません
- 通貨などの表示形式が効かない — セル内で左寄せになるのが、文字である証拠です
- 日付が壊れる — Excelは日付を内部的に数値で管理しているため、意味の分からない数字の羅列になります
したがって、`&""` は商品名や氏名のように、文字として扱ってよいデータにだけ使うようにしましょう。金額・数量・日付には使わないでください。
【作業メモ: 画像: &"" を使った列でSUMの合計が0になっているスクリーンショット】
方法2:IF関数で分岐する(数値・日付向け)
金額や数量など、数値のまま扱いたい場合はIF関数を使います。
=IF(VLOOKUP(A2,$D$2:$E$50,2,FALSE)="","",VLOOKUP(A2,$D$2:$E$50,2,FALSE))
「VLOOKUPの結果が空っぽなら空白、そうでなければVLOOKUPの結果を表示する」という意味です。VLOOKUPを2回書くぶん式は長くなりますが、結果が数値のままなので、表示形式も合計も正しく機能します。
やってはいけない書き方:=0 で判定する
多くの解説で紹介されているにもかかわらず、避けるべき書き方があります。
=IF(VLOOKUP(...)=0,"",VLOOKUP(...))
「0だったら空白にする」という一見正しそうな書き方ですが、これを使うと価格0円・在庫0個・数量0といった「本物の0」まで消えてしまいます。
さらに問題なのは、画面上は空白になるため、データが消えたことに気づけない点です。
判定は必ず =0 ではなく ="" を使ってください。="" は「空っぽかどうか」を、=0 は「ゼロかどうか」を見ています。似ているようで、まったく別物です。
方法の比較
| 方法 | 結果の型 | 合計の可否 | 向いているデータ |
| &"" を付ける | 文字列 | 計算できない | 商品名・氏名などの文字 |
| IF関数で ="" 判定 | 元のまま | 計算できる | 金額・数量・日付 |
| IF関数で =0 判定 | 元のまま | 計算できる | 使用しない(本物の0が消える) |
症状C:該当データがないときの#N/Aを消す方法
検索値は入力されているのに「#N/A」が出る場合、その値が表に存在しません。打ち間違いか、そもそも未登録かのどちらかです。
このときに使うのがIFERROR関数です。
=IFERROR(VLOOKUP(A2,$D$2:$E$50,2,FALSE),"")
数式全体をIFERRORで囲み、カンマの後ろに "" を書くと、エラー時に空白が表示されます。似た関数にIFNAがあり、こちらは「#N/A」だけを拾います。
IFERRORとIF、どちらを使うべきか
この2つは、用途がまったく違います。
IF関数は「狙い撃ち」です。 検索値が空欄のときだけを空白にし、それ以外のエラーは残します。そのため、列番号の間違いや範囲指定のミスには気づけます。
IFERRORは「すべて隠します」。 エラーであれば種類を問わず空白にするため、見た目は最もきれいになります。しかし、範囲指定ミスも列番号ミスもまとめて見えなくなるため、中身が壊れていても画面上は正常に見えてしまいます。
| 使う関数 | 消せるもの | 残るもの | 適した場面 |
| IF | 検索値が空欄のときの#N/A | その他すべてのエラー | 作りかけの表・検証中の表 |
| IFERROR | すべてのエラー | なし | 完成して人に渡す表 |
| IFNA | #N/Aのみ | その他のエラー | #N/Aだけを想定内としたい表 |
つまり、まだ作りかけの表ならIF、完成して人に渡す表ならIFERRORと使い分けるのが安全です。IFERRORが悪い関数なのではなく、使いどころを選ぶ必要がある、ということです。
3つの症状すべてに対応する数式
=IF(A2="","",IFERROR(IF(VLOOKUP(A2,$D$2:$E$50,2,FALSE)="","",VLOOKUP(A2,$D$2:$E$50,2,FALSE)),""))
長く見えますが、外側から「検索値が空欄か」「エラーか」「参照先が空欄か」を順に処理しているだけです。
XLOOKUPで空白なら空白にする方法
比較的新しいExcelをお使いの場合は、XLOOKUP関数を使うともっと短く書けます。
=XLOOKUP(A2,$D$2:$D$50,$E$2:$E$50,"")
XLOOKUPには「見つからない場合」という引数が最初から用意されており、4つ目に "" を指定するだけでエラーが空白になります。IFERRORで囲む必要はありません。
ただし注意点が2つあります。
- 参照先が空欄で0になる問題は、XLOOKUPでも同様に発生します。 この場合は前述のIF関数による分岐が必要です
- XLOOKUPはMicrosoft 365、またはExcel 2021以降でしか使えません。 それより古いExcelにはこの関数自体が存在しません
【要確認】お使いの環境で利用できるかは、セルに =XLOOKUP( と入力し、候補に表示されるかで判断できます。表示されない場合は、VLOOKUPとIF、IFERRORの組み合わせで同じことが実現できます。
数式を使わずに0を非表示にする方法
「他の人が作ったファイルなので数式を触りたくない」という場面もあります。その場合は、表示の設定だけで0を消すことができます。
Excelのオプションを開き、詳細設定の中にある「ゼロ値のセルにゼロを表示する」のチェックを外すと、そのシートの0がすべて非表示になります。
【要確認】メニューの名称や配置はExcelのバージョンによって異なる場合があります。
ただし、これは見えなくなるだけで、値としては0のまま残っています。合計を出せばその0も計算に含まれます。「表示を整えたいだけなのか、値そのものを空白にしたいのか」を区別して使い分けてください。
IF関数の""は本当の空白ではない
見落とされがちですが、実務で後から効いてくる重要な仕様です。
IF関数で返した `""` は、本当の空白ではありません。 これは「長さが0の文字」であり、何も入力されていないセルとは別物として扱われます。
実際に確認すると、次のようになります。
- ISBLANK関数 で判定すると FALSE(空白ではないと判定される)
- COUNTA関数 では、"" のセルもカウントされる
そのため、「件数を数えたら明らかに多い」「並べ替えたら空白のはずの行が上に来ない」といった現象が起こります。原因の多くはここにあります。
見た目が空白であっても、Excelから見れば「何か入っている」状態である。この違いを知っておくだけで、後から件数が合わずに悩む時間をなくせます。
【作業メモ: 画像: ISBLANKとCOUNTAの検証結果スクリーンショット】
VLOOKUPがうまくいかないときのチェックリスト
「解説どおりにやったのに動かない」というときは、次の5点を確認してください。
| 確認項目 | よくある状態 | 対処 |
| 閉じカッコの数 | IFとVLOOKUPで2つ必要なのに1つしかない | 末尾に ) を追加する |
| カンマ | 入れ忘れ、または全角のカンマになっている | 半角カンマに直す |
| 絶対参照 | 範囲に $ がなく、コピーで範囲がずれる | 範囲選択の直後にF4キーを押す |
| テーブル化 | 表をテーブルに変換していて書き方が変わる | 構造化参照の書式を確認する |
| 空白セルへの上書き | 空白に見えるセルに直接入力し、数式を消してしまった | 数式を入れ直す |
特に絶対参照は見落としがちです。上の行は正しいのに下の行ほど結果がおかしくなる場合、範囲がずれている可能性が高いので、まずここを疑ってください。
また、空白表示のセルには数式が入っています。見た目が空白だからと手入力すると数式が消え、しかも消えたことに気づかないまま作業が進みます。「昨日まで動いていたのに今日は動かない」という場合、上書きされていることがあります。
よくある質問
Q. IF関数とIFERROR関数、結局どちらを使えばよいですか
目的が違います。 検索値が空欄のときだけを空白にしたいならIF、エラーの種類を問わずすべて隠したいならIFERRORです。IFERRORは列番号や範囲指定のミスまで隠してしまうため、検証が済んでいない表では使わないほうが安全です。
Q. VLOOKUPの検索の型は、TRUEとFALSEのどちらが正しいですか
基本はFALSE(または0)です。 FALSEは完全一致のみを探します。TRUEは近似一致となり、表にないデータでも近い値を返してしまうため、エラーが出ないまま間違った値が入る危険があります。教材や資格試験でも通常はFALSEが使われます。
Q. 表をテーブルに変換したら、数式がうまく動かなくなりました
テーブルに変換すると、範囲の指定方法が $D$2:$E$50 のような形式から、テーブル名を使った構造化参照に変わります。数式の見た目が解説と違ってもエラーではありません。テーブル名と列名が正しく指定されているかを確認してください。
Q. 参照する表を別シートに作りたいのですが
範囲指定の際に別シートの範囲をドラッグすれば、シート名が自動的に付きます。シート名にスペースが含まれる場合は、シート名をシングルクォーテーションで囲む必要があります。書き方自体は同じシートの場合と変わりません。
Q. 数量や単価の列で、絶対参照は必要ですか
参照する表の範囲には必要ですが、検索値のセルには不要です。 数式を下方向にコピーしたとき、検索値は行ごとにずれてほしい一方、参照する表の範囲は固定されている必要があるためです。判断に迷ったら「コピーしたときにずれてほしいか」で考えてください。
Q. 空白にしたセルを、後から集計に使っても大丈夫ですか
&"" を使った場合は文字列になっているため、SUMなどの計算には使えません。集計する予定があるなら、IF関数で ="" を判定する方法を選んでください。また、IF関数で返した "" はISBLANKでは空白と判定されない点にも注意が必要です。
まとめ
- VLOOKUPで空白にならない原因は3つ。まず自分の症状を特定する
- 検索値が空欄なら =IF(A2="","",VLOOKUP(...))
- 参照先が空欄で0が出るなら、文字データは &""、数値・日付は =IF(VLOOKUP(...)="","",VLOOKUP(...))
- 該当データがないときの#N/Aは =IFERROR(VLOOKUP(...),"")
- &"" は結果が文字になるため、金額や日付には使わない
- =0 判定は本物の0まで消えるので使わない。判定は必ず =""
- IFERRORは便利だが、本当のミスまで隠す。作りかけの表ではIFを使う
- IF関数の "" は本当の空白ではない。件数を数えるときは注意する
最も大切なのは、エラーは隠す前に原因を特定することです。原因を見ないままIFERRORで囲むと、見た目はきれいでも中身が壊れた表ができあがります。「特定する、直す、それでも残るものだけ隠す」という順番を守れば、VLOOKUPで悩む時間は確実に減らせます。