Excelで関数を入力した際に #N/A と表示されて困った経験はないでしょうか。このエラーは「ノー・アサイン(N/A)」と読み、英語の「Not Available(該当なし)」を略したものです。数式が参照・検索しようとした値や対象が見つからないときに発生します。VLOOKUP関数やMATCH関数など、検索系の関数を使うユーザーであれば一度は必ず遭遇するエラーです。本記事では原因別に具体的なコード例と修正方法を詳しく解説します。
#N/Aエラーとは何か
#N/Aエラーは、数式が検索・参照しようとした値が見つからない場合に表示されるエラーです。Excelが「その値はデータの中に存在しませんでした」と教えてくれているサインとも言えます。
主に発生する関数は以下の通りです。
- VLOOKUP関数
- HLOOKUP関数
- XLOOKUP関数
- MATCH関数
- LOOKUP関数
- INDEX + MATCH の組み合わせ
また、SUM関数など集計系の関数でも、参照先のセルに#N/Aエラーが含まれていると、そのセル自身も#N/Aエラーになる点に注意が必要です。
// SUM関数がN/Aエラーのセルを参照している例
// A1: #N/A(エラー状態)
// A2: 100
// A3: 200
=SUM(A1:A3) // ← #N/Aエラーが連鎖してSUM全体がエラーになる
なお、#N/Aエラーは「意図的に使われる場合もある」という点で他のエラーとは少し異なります。たとえばグラフを作成する際、データが存在しないポイントに0を入れると折れ線グラフに不自然な0の線が描画されてしまいます。その箇所をあえて#N/Aにしておくことで、グラフ上にプロットされない(線が途切れる)という挙動を利用することができます。
#N/Aエラーが発生する主な原因と修正方法
原因1:検索値がデータの中に存在しない
#N/Aエラーの中で最も多い原因が、検索値として指定した値が参照範囲の中に存在しないケースです。VLOOKUP関数で言えば、第1引数(検索値)がテーブルの左端列に見つからない場合にエラーが発生します。
// 商品コード「A005」がテーブルに存在しない場合
=VLOOKUP("A005", A2:C10, 2, FALSE) // ← #N/Aエラー発生
// 修正例1:正しい検索値を指定する
=VLOOKUP("A003", A2:C10, 2, FALSE) // ← 正常
// 修正例2:IFERROR関数でエラー時の表示を制御する
=IFERROR(VLOOKUP("A005", A2:C10, 2, FALSE), "該当なし") // ← 「該当なし」と表示
修正方法:まず参照範囲のデータに検索値が実際に含まれているかを目視で確認します。検索値のスペルミスや全角・半角の違いがないかもチェックしましょう。データとして存在しないことがわかった場合は、テーブルにデータを追加するか、検索値を正しいものに修正します。
原因2:ひらがな・カタカナ、全角・半角の違いによる不一致
検索値が参照範囲に存在しているように見えるのにエラーになる場合は、文字の種類の不一致が原因であることが多いです。たとえば「エクセル」(全角カタカナ)と「エクセル」(半角カタカナ)はExcelでは別の値として扱われます。同様に「Excel」(半角)と「Excel」(全角)も一致しません。
// A列に「エクセル」(全角カタカナ)が入力されている場合
=VLOOKUP("エクセル", A2:B10, 2, FALSE) // ← 半角カタカナで検索しているためエラー
// 修正例:ASC関数またはJIS関数で文字を統一してから比較する
// 参照側を半角に統一する場合
=VLOOKUP(ASC("エクセル"), ASC(A2:A10), 2, FALSE)
// または検索前にデータ側を統一して前処理しておく
修正方法:検索値と参照データの文字コードを統一します。半角に統一する場合はASC関数、全角に統一する場合はJIS関数を使って変換してから比較するか、元データの入力規則を統一しましょう。また、セルを選択してF2キーで編集モードにすると末尾のスペースの有無を視認できます。
原因3:検索値の前後に不要なスペースが含まれている
データを外部システムからコピーしたり、CSVから取り込んだりした場合に、セルの値の前後に不可視のスペースが混入していることがあります。見た目は同じでもスペースが1文字入るだけで一致しないと判断されます。
// A1に「 東京 」(前後にスペースあり)が入力されている場合
=VLOOKUP("東京", A2:B10, 2, FALSE) // ← スペースのせいで不一致となりエラー
// 修正例:TRIM関数でスペースを除去してから検索する
=VLOOKUP(TRIM(A1), A2:B10, 2, FALSE)
// または参照範囲ごとTRIMで処理する(配列数式)
=VLOOKUP("東京", TRIM(A2:B10), 2, FALSE)
修正方法:TRIM関数を使って検索値または参照範囲の余分なスペースを取り除きます。大量データの場合は、元のデータを別列にTRIM関数で変換したものをコピーして値貼り付けし、参照用データとして使う方法が効率的です。
原因4:データ型の不一致(数値と文字列)
見た目が同じ数字でも、片方が数値型でもう片方が文字列型として保存されているとExcelは別物として扱います。特にCSVやデータベースからインポートしたデータでよく発生します。
// A列に数値の「1001」が入力されている場合
// 検索値が文字列の"1001"だと一致しない
=VLOOKUP("1001", A2:B10, 2, FALSE) // ← #N/Aエラー(型が違う)
// 修正例1:VALUE関数で文字列を数値に変換して検索する
=VLOOKUP(VALUE("1001"), A2:B10, 2, FALSE) // ← 正常
// 修正例2:TEXT関数で数値を文字列に変換して検索する
=VLOOKUP(TEXT(1001, "0"), A2:B10, 2, FALSE) // ← 正常
// 修正例3:&""を使って数値を文字列に強制変換する
=VLOOKUP(A1&"", A2:B10, 2, FALSE)
修正方法:エラーが出たセルを確認し、セルの左上に緑色の三角マーク(エラーインジケーター)が表示されていれば文字列として保存された数値の可能性があります。VALUE関数で数値に変換するか、TEXT関数で文字列に変換して型を統一してから検索しましょう。
原因5:VLOOKUPの検索値が参照範囲の左端列にない
VLOOKUP関数には「参照範囲の最も左端の列から検索値を探す」というルールがあります。テーブルの途中の列や右側の列を検索しようとすると#N/Aエラーになります。
// B列(商品名)を検索値にしてA列(コード)を取得しようとしている誤った例
// テーブル構成:A列=コード、B列=商品名、C列=価格
=VLOOKUP("りんご", A2:C10, 1, FALSE) // ← B列を検索したいのにA列(左端)が検索される
// 修正例1:INDEX+MATCHで左方向の検索を実現する
=INDEX(A2:A10, MATCH("りんご", B2:B10, 0)) // ← 商品名でコードを逆引き
// 修正例2:XLOOKUP関数を使う(Excel 2019以降・Microsoft 365)
=XLOOKUP("りんご", B2:B10, A2:A10) // ← 検索列と返す列を個別に指定できる
修正方法:VLOOKUPで左方向の検索が必要な場合は INDEX + MATCH の組み合わせに切り替えます。Microsoft 365またはExcel 2019以降を使用している場合は、検索列と返却列を自由に指定できるXLOOKUP関数への移行を検討しましょう。
原因6:近似一致(TRUE)で検索しているがデータが昇順になっていない
VLOOKUP関数の第4引数を TRUE(または省略)にすると「近似一致」で検索します。近似一致の場合は参照範囲の左端列が昇順に並んでいる必要があります。並んでいない場合は誤った値を返したり#N/Aエラーになったりします。
// 第4引数をTRUEにしているが参照範囲が昇順になっていない
=VLOOKUP(D2, A2:B10, 2, TRUE) // ← データが昇順でないため誤動作またはN/Aエラー
// 修正例1:FALSEに変更して完全一致で検索する(通常はこちらを推奨)
=VLOOKUP(D2, A2:B10, 2, FALSE) // ← 完全一致、昇順不要
// 修正例2:昇順に並べ替えてから近似一致を使用する
// データを昇順に並べ替えた上で第4引数をTRUEのまま使用
修正方法:通常の検索では第4引数に FALSE を指定して完全一致で検索することを推奨します。段階的な金額ランクや評価基準など、近似一致が必要な場面では参照データを必ず昇順に並べ替えてから使用しましょう。
原因7:MATCH関数で検索値が見つからない
MATCH関数は指定した値が配列の何番目にあるかを返す関数ですが、検索値が存在しない場合は#N/Aエラーを返します。INDEX関数と組み合わせて使うことが多いため、エラーが出るとINDEX+MATCH全体がエラーになります。
// MATCH関数単体でのエラー
=MATCH("バナナ", A2:A10, 0) // ← 「バナナ」がA2:A10に存在しない場合は#N/Aエラー
// INDEX+MATCHの組み合わせでのエラー
=INDEX(B2:B10, MATCH("バナナ", A2:A10, 0)) // ← MATCHがエラーのためINDEX全体もエラー
// 修正例:IFERRORでエラー時の表示を指定する
=IFERROR(INDEX(B2:B10, MATCH("バナナ", A2:A10, 0)), "見つかりません")
修正方法:MATCH関数の第3引数(照合の型)が0(完全一致)、1(以下で最大値)、-1(以上で最小値)のいずれかになっているかを確認します。0以外を指定している場合はデータが昇順または降順になっている必要があります。
#N/Aエラーを非表示にする方法
IFERROR関数を使う方法
業務上、検索値が存在しない場合でも画面上にエラーを表示させたくないケースがあります。そのような場合は IFERROR 関数を使うことでエラー表示を任意の値に置き換えられます。
// IFERROR関数の基本構文
=IFERROR(エラーが出る可能性のある数式, エラー時に表示する値)
// 例1:エラー時に空白を表示する
=IFERROR(VLOOKUP(A2, D2:F10, 2, FALSE), "")
// 例2:エラー時に「対象外」と表示する
=IFERROR(VLOOKUP(A2, D2:F10, 2, FALSE), "対象外")
// 例3:エラー時に0を表示する(集計に影響させない場合)
=IFERROR(VLOOKUP(A2, D2:F10, 2, FALSE), 0)
IFNA関数を使う方法(#N/Aエラー専用)
IFERROR関数はすべての種類のエラーに対応しますが、#N/Aエラーのみを対象にしたい場合はIFNA関数が最適です。#VALUE!や#REF!などの他のエラーはそのまま表示させつつ、#N/Aエラーだけを非表示にできます。
// IFNA関数の基本構文(#N/Aエラーのみに対応)
=IFNA(エラーが出る可能性のある数式, #N/Aエラー時に表示する値)
// 例:VLOOKUPの#N/Aエラーのみ「未登録」に置き換える
=IFNA(VLOOKUP(A2, D2:F10, 2, FALSE), "未登録")
// IFERROR vs IFNA の使い分け
// ・すべてのエラーを同じ値に置き換えたい → IFERROR
// ・#N/Aだけ置き換えて他のエラーは検知したい → IFNA(推奨)
XLOOKUP関数を使って根本からエラーを防ぐ方法
Microsoft 365またはExcel 2019以降を使用している場合は、XLOOKUP関数を使うことで#N/Aエラーをより直感的にハンドリングできます。XLOOKUP関数は第4引数に「見つからない場合の値」を直接指定できるため、IFERROR関数を外側に重ねる必要がありません。
// XLOOKUP関数の基本構文
=XLOOKUP(検索値, 検索範囲, 戻り範囲, 見つからない場合の値, 一致モード, 検索モード)
// 例:見つからない場合に「該当なし」を表示する
=XLOOKUP(A2, D2:D10, E2:E10, "該当なし")
// VLOOKUPと異なり左方向の検索も可能
=XLOOKUP(A2, D2:D10, C2:C10, "該当なし") // ← C列(左側)の値を返す
#N/Aエラーを予防するためのポイント
- VLOOKUPの第4引数は基本的にFALSEを指定する:TRUEにするとデータが昇順でないと誤作動するため、通常はFALSE(完全一致)で使うことを習慣にしましょう。
- 外部データのインポート後は文字コードと型を確認する:CSVやデータベースからコピーしたデータには、全角・半角の混在や数値の文字列化が起きやすいため、インポート直後に確認する習慣をつけましょう。
- 入力規則でデータの表記を統一する:「ホーム」タブの「データの入力規則」を使ってドロップダウンリストからのみ入力できるようにすることで、表記のゆれを根本から防げます。
- VLOOKUPよりXLOOKUPへの移行を検討する:Microsoft 365環境があればXLOOKUP関数を使うことで、左方向の検索や「見つからない場合の値」の指定がシンプルに書けます。
- IFNA関数でN/Aエラーのみをハンドリングする:IFERRORは全エラーを隠してしまうため、他のエラー(#REF!など)を見逃す可能性があります。#N/Aエラーのみに対処したい場合はIFNA関数を使いましょう。
- TRIM関数とVALUE関数でデータを前処理しておく:スペルのゆれや型の混在が起きやすいデータには、TRIM関数でスペースを除去し、VALUE関数で数値型に統一してから検索用の列として用意する運用が効果的です。
まとめ:#N/Aエラーは原因を特定して根本から対処しよう
#N/Aエラーは、検索関数が参照データの中に検索値を見つけられないときに発生するエラーです。主な原因は以下の7つに整理できます。
- 検索値がデータの中に存在しない
- ひらがな・カタカナ、全角・半角の違いによる不一致
- 検索値の前後に不要なスペースが含まれている
- データ型(数値と文字列)の不一致
- VLOOKUPの検索値が参照範囲の左端列にない
- 近似一致(TRUE)で検索しているがデータが昇順になっていない
- MATCH関数で検索値が見つからない
エラーを非表示にしたい場合はIFNA関数またはIFERROR関数を活用し、Microsoft 365環境であればXLOOKUP関数への移行も検討してください。根本原因を修正したうえで適切なエラーハンドリングを組み合わせることで、安定したスプレッドシート運用が実現できます。