VLOOKUPが動かないときの原因と解決策!Googleスプレッドシートでのトラブルを解消する方法を実例付きで徹底解説

Sheet基本

VLOOKUPが#N/Aになる原因と直し方
エラー別トラブルシューティング完全版

VLOOKUPのエラーには必ず原因がある。エラー種類別に原因と対処法を体系的に整理する。

GASへの応用:エラー処理の考え方はGASでも同じ

GASで検索処理を書くときも「見つからなかった場合」の処理が必要です。try-catch や undefined チェックは、IFERRORと同じ発想です。

GASで自動化を学ぶ →
目次

VLOOKUPエラーの全体像

VLOOKUPで出るエラーは主に4種類です。まずエラー名を確認して、該当する原因に進んでください。

エラー意味最多の原因
#N/A値が見つからない検索値がマスターにない、または型の不一致
#REF!参照エラー列番号が検索範囲の列数を超えている
#VALUE!値の型エラー列番号に数値以外が入っている
間違った値エラーではないが結果が違う第4引数がTRUE(近似一致)になっている

#N/A の原因と対処

原因1:データ型の不一致(最多)

検索値が数値なのにマスターが文字列、またはその逆。見た目は同じ「001」でも型が違うと一致しません。

確認方法:セルを選択してセルの書式を確認。数字が左寄りなら文字列、右寄りなら数値です。

// 検索値が文字列、マスターが数値の場合
=VLOOKUP(VALUE(A2), マスター!A:C, 2, FALSE) // A2を数値に変換

// 逆パターン:検索値が数値、マスターが文字列の場合
=VLOOKUP(TEXT(A2, "000"), マスター!A:C, 2, FALSE) // ゼロ埋め3桁の文字列に変換

原因2:スペースが混入している

コピペしたデータや外部から取り込んだデータにスペースが紛れ込んでいる場合。「田中 」と「田中」は別の値として扱われます。

// TRIM で前後スペースを除去してから検索
=VLOOKUP(TRIM(A2), マスター!A:C, 2, FALSE)

// マスター側も疑われる場合はARRAYFORMULAとTRIMを組み合わせてマスターを整形済みの列で参照する

原因3:検索値がマスターに本当に存在しない

入力ミスや登録漏れが原因。COUNTIFで確認するのが確実です。

// マスターにA2の値が何件あるか確認
=COUNTIF(マスター!A:A, A2)
// 0なら存在しない → 登録漏れか入力ミス

原因4:検索範囲の左端列がキー列になっていない

VLOOKUPは必ず検索範囲の左端列でキーを探します。マスターのB列がキーなのに A列から範囲を指定すると見つかりません。

// NG:B列がキーなのにA列から範囲を取っている
=VLOOKUP(A2, マスター!A:D, 3, FALSE) // ← A列で検索してしまう

// OK:B列から始める範囲に修正
=VLOOKUP(A2, マスター!B:D, 2, FALSE) // ← B列で検索

対処の定番:IFERRORで#N/Aを処理する

// #N/Aを空白に
=IFERROR(VLOOKUP(A2, マスター!A:C, 2, FALSE), "")

// #N/Aを「未登録」に
=IFERROR(VLOOKUP(A2, マスター!A:C, 2, FALSE), "未登録")

// #N/Aのみ処理(他のエラーはそのまま表示したい場合)
=IFNA(VLOOKUP(A2, マスター!A:C, 2, FALSE), "未登録")

IFERRORとIFNAの違い:IFERRORはすべてのエラーを捕捉します。IFNAは#N/Aのみ。#REF!などは表示させたい場合はIFNAを使います。

#REF! の原因と対処

列番号が検索範囲の列数を超えているときに発生します。

// 検索範囲がA:C(3列)なのに列番号が4
=VLOOKUP(A2, マスター!A:C, 4, FALSE) // ← #REF!

// 修正:列番号を3以内に収める、または範囲を拡張
=VLOOKUP(A2, マスター!A:D, 4, FALSE) // ← D列まで含めれば4列目でOK

マスターに列を挿入した後にこのエラーが増える場合は、検索範囲を「全列指定(A:D)」にするか、XLOOKUPに移行するのが根本解決です。

間違った値が返る(エラーではない)

原因:第4引数がTRUE(近似一致)になっている

第4引数を省略するとデフォルトでTRUEになります。TRUEは「検索値以下で最大の値を返す」動作で、昇順ソートされていないと予測不能な値を返します。

// NG:第4引数省略(TRUEが適用される)
=VLOOKUP(A2, マスター!A:C, 2)

// OK:必ずFALSEを明示
=VLOOKUP(A2, マスター!A:C, 2, FALSE)

原因:検索範囲が固定されていない(コピー時にずれる)

数式をコピーしたときに検索範囲がずれてしまうケースです。絶対参照($)で固定してください。

// NG:コピーすると範囲がずれる
=VLOOKUP(A2, B2:D100, 2, FALSE)

// OK:$で検索範囲を絶対参照に固定
=VLOOKUP(A2, $B$2:$D$100, 2, FALSE)

それでも直らないときの確認チェックリスト

  • 検索値のデータ型(数値 vs 文字列)を確認したか
  • TRIM で前後スペースを除去したか
  • 第4引数を FALSE にしたか
  • 検索範囲の左端列がキー列になっているか
  • 列番号が検索範囲の列数以内か
  • 検索範囲に絶対参照($)をつけてコピーしているか

上記を全部確認しても解決しない場合、VLOOKUPの制約(左側検索不可、重複キーは最初の1件のみ)が原因の可能性があります。その場合はXLOOKUPまたはINDEX+MATCHへの切り替えを検討してください。

この知識をGASで活かす

GASでデータ照合処理を書くときも「見つからなかった場合のハンドリング」が必要です。エラーへの向き合い方はスプレッドシートもGASも同じです。

Free Newsletter

AIを業務に活かしたいなら
SMR-Labメルマガ

毎週火曜10時、コピペで使えるChatGPTプロンプト・
GASテンプレートをお届け。登録は1分・完全無料。

▶ 無料で登録する

📧 無料メルマガ登録

DX・AI活用のヒントを週1回お届け。登録特典:すぐ使えるプロンプト集&GASテンプレート。

登録情報は第三者に提供しません。いつでも配信停止できます。

目次