Excelで数式を入力した際に突然 #NAME? と表示されて困った経験はないでしょうか。このエラーは「ネームエラー」と読み、英語の「NAME(名前)」に疑問符が付いたものです。Excelが数式の中に含まれる「名前」を認識できないときに発生し、「この名前は何ですか?」とExcelが問いかけている状態を表しています。関数を使い始めたばかりの方から上級者まで誰でも遭遇するエラーですが、原因のパターンは限られており、正しく理解すれば必ず解決できます。本記事では、#NAME?エラーが発生する原因を関数別・ケース別に網羅し、具体的なコード例と修正方法を詳しく解説します。

#NAME?エラーとは何か

#NAME?エラーは、Excelが数式の中に含まれる「名前」を理解できないときに表示されるエラーです。Excelにとっての「名前」とは、関数名・定義済みのセル範囲名・文字列の参照などを指します。これらのいずれかが正しく認識されないと、計算結果の代わりに #NAME? が表示されます。

他のエラーと大きく異なる点として、#NAME?エラーはIFERROR関数などで非表示にすることが推奨されません。Microsoft公式サポートでも、このエラーは数式の構文に問題があることを示しているため、エラーハンドリング関数でマスクするのではなく、構文そのものを修正すべきと明記されています。エラーを隠しても正しい計算結果は得られないため、必ず根本から修正しましょう。

// #NAME?エラーが連鎖する例
// A1セルに #NAME? エラーがある場合
A1: =SUMM(B1:B5)   // ← 関数名ミスで #NAME? エラー

// A1を参照しているセルも影響を受ける
B10: =A1 + 100     // ← #NAME? エラーが連鎖
C10: =SUM(A1:A5)   // ← 範囲内にエラーが含まれるため影響あり

#NAME?エラーが発生する主な原因と修正方法

原因1:関数名のスペルミス

#NAME?エラーの中で最も多い原因が、関数名の入力ミスです。ExcelはAVERAGEをABEREGEと入力した場合や、SUMをSUMMと入力した場合など、認識できない関数名が含まれると即座に#NAME?エラーを返します。

重要なポイントとして、Excelの関数名は大文字・小文字を区別しません。=SUM、=sum、=Sumはいずれも正常に動作します。ただし、関数名が正しく認識されると自動的に大文字に変換されます。入力後に大文字に変わらない場合はスペルに誤りがある証拠ですので、すぐに確認しましょう。

// 関数名のスペルミスによるエラー例

// 誤り:AVERAGEのスペルが違う
=ABEREGE(A1:A10)   // ← #NAME?エラー
=AVEREGE(A1:A10)   // ← #NAME?エラー

// 正しい
=AVERAGE(A1:A10)   // ← 正常

// 誤り:SUMの後ろにMが余分
=SUMM(B1:B5)       // ← #NAME?エラー

// 正しい
=SUM(B1:B5)        // ← 正常

// 誤り:IFのスペルが違う
=IF(A1>0, 正, 誤)  // ← #NAME?エラー(文字列の問題もある)
=IIF(A1>0, "正", "誤")  // ← #NAME?エラー(IIFはVBAの関数)

// 正しい
=IF(A1>0, "正", "誤")   // ← 正常

修正方法:数式バーで関数名を正しく入力し直します。スペルに自信がない場合は、セルに関数名を途中まで入力したときに表示されるオートコンプリートの候補リストを活用するか、「数式」タブの「関数の挿入」ボタン(fx)から関数を選択することで入力ミスを防ぐことができます。

原因2:文字列をダブルクォーテーションで囲んでいない

数式内で文字列を使用する場合、必ずダブルクォーテーション(”)で囲まなければなりません。これを忘れると、Excelは文字列を「定義済みの名前」として解釈しようとするため#NAME?エラーが発生します。IF関数の戻り値にテキストを指定する場合や、SEARCH関数・FIND関数などで検索文字列を指定する際によく起こるミスです。

// ダブルクォーテーション漏れによるエラー例

// 誤り:IF関数で文字列を囲んでいない
=IF(A1>=80, 合格, 不合格)    // ← 「合格」「不合格」がエラー

// 正しい
=IF(A1>=80, "合格", "不合格")  // ← 正常

// 誤り:SEARCH関数で文字列を囲んでいない
=SEARCH(都, A1)               // ← 「都」がエラー

// 正しい
=SEARCH("都", A1)             // ← 正常

// 誤り:文字列結合で囲んでいない
=A1&has&B1                    // ← 「has」がエラー

// 正しい
=A1&"has"&B1                  // ← 正常

// 誤り:スペース1文字だけの場合も囲む必要がある
=A1& &B1                      // ← エラー

// 正しい
=A1&" "&B1                    // ← 正常

修正方法:数式内のすべての文字列がダブルクォーテーションで囲まれているかを確認します。「数式」タブの「関数の引数」ダイアログボックスを使って引数を入力すると、文字列への自動変換が行われるため、このようなミスを防ぎやすくなります。

原因3:未定義またはスペルを間違えた名前(セル範囲名)を参照している

Excelにはセルやセル範囲に「名前」を定義する機能があります。たとえばB2:B12のセル範囲に「売上データ」という名前を付けておけば、=SUM(売上データ) のように数式内で使用できます。しかし、この定義済みの名前を間違えて入力したり、名前の定義自体が存在しない場合は#NAME?エラーが発生します。

// 未定義の名前を参照している例

// 「売上合計」という名前が定義されていない場合
=SUM(売上合計)    // ← #NAME?エラー

// 定義されている正しい名前を使用する
=SUM(売上データ)  // ← 正常(「売上データ」が定義済みの場合)

// 名前のスペルを間違えた例
// 定義されているのは「参加者名簿」なのに「参加者一覧」と入力
=COUNTA(参加者一覧)  // ← #NAME?エラー

// 正しい名前で入力し直す
=COUNTA(参加者名簿)  // ← 正常

// 名前の定義を削除した後に数式を残していた場合も同様のエラー
// 例:「売上目標」の名前定義を削除してしまった
=A1/売上目標         // ← #NAME?エラー(定義が存在しない)

修正方法:「数式」タブの「名前の管理」を開き、使用しようとしている名前が正しく定義されているかを確認します。名前が存在しない場合は「新規作成」で定義を追加します。数式内で使用する場合は「数式」タブの「数式で使用」から定義済みの名前を選んで挿入すると、スペルミスを防ぐことができます。

原因4:セル範囲のコロン(:)が抜けている

セル範囲を指定する際のコロン(:)が抜けていると、Excelはその部分を「名前」として解釈しようとして#NAME?エラーを発生させます。手入力で数式を作成した際によく起こるミスです。

// コロン抜けによるエラー例

// 誤り:B2とB12の間にコロンがない
=INDEX(B2 B12, MATCH(E2, A2:A12, 0))  // ← #NAME?エラー

// 正しい
=INDEX(B2:B12, MATCH(E2, A2:A12, 0))  // ← 正常

// 誤り:SUM関数でコロンが抜けている
=SUM(A1 A10)  // ← #NAME?エラー

// 正しい
=SUM(A1:A10)  // ← 正常

// 誤り:AVERAGE関数でコロンが抜けている
=AVERAGE(C3 C8)  // ← #NAME?エラー

// 正しい
=AVERAGE(C3:C8)  // ← 正常

修正方法:数式バーでセル範囲の指定部分を確認し、コロンが正しく入力されているかチェックします。セル範囲の入力はマウスでドラッグして選択するとコロンが自動的に挿入されるため、手入力によるミスを防ぐことができます。

原因5:アドインが有効になっていない

Excelの一部の関数は、特定のアドインが有効になっていないと使用できません。たとえばEUROCONVERT関数を使用するには「ユーロ通貨ツール」アドインが、一部の統計・分析関数には「分析ツール」アドインの有効化が必要です。これらのアドインが無効な状態で関数を呼び出すと#NAME?エラーが発生します。

// アドイン未有効によるエラー例

// 「分析ツール」アドインが無効の場合
=EDATE(A1, 3)        // ← 環境によっては#NAME?エラー
=NETWORKDAYS(A1, B1) // ← 環境によっては#NAME?エラー

// 「ユーロ通貨ツール」アドインが無効の場合
=EUROCONVERT(100, "EUR", "USD")  // ← #NAME?エラー

修正方法(アドインを有効にする手順):

  • 「ファイル」タブをクリックする
  • 「オプション」を選択する
  • 「アドイン」をクリックする
  • 画面下部の「管理」ボックスで「Excelアドイン」を選択し「設定」をクリックする
  • 必要なアドイン(分析ツール、ユーロ通貨ツールなど)にチェックを入れてOKをクリックする

原因6:Excelのバージョンが対応していない関数を使用している

XLOOKUP関数・IFS関数・TEXTJOIN関数・LET関数など、Excel 2019以降またはMicrosoft 365でのみ使用できる新しい関数が存在します。これらの関数を古いバージョンのExcelで開いた場合、関数名が認識されないため#NAME?エラーが表示されます。同僚や取引先とExcelファイルを共有する場合に、相手のExcelのバージョンが異なることで発生するケースが多いです。

// バージョン非対応によるエラー例

// Excel 2016では認識されない関数
=XLOOKUP(A2, D2:D10, E2:E10)   // ← Excel 2019未満では#NAME?エラー
=IFS(A1>90, "優", A1>70, "良", A1>50, "可", TRUE, "不可")
                                 // ← Excel 2016以前では#NAME?エラー
=TEXTJOIN(",", TRUE, A1:A5)     // ← Excel 2016以前では#NAME?エラー

// 互換性のある代替関数に書き換える
// XLOOKUPの代替 → INDEX + MATCH
=INDEX(E2:E10, MATCH(A2, D2:D10, 0))  // ← 全バージョン対応

// IFSの代替 → IF関数のネスト
=IF(A1>90, "優", IF(A1>70, "良", IF(A1>50, "可", "不可")))  // ← 全バージョン対応

修正方法:使用している関数がどのバージョンから対応しているかをMicrosoft公式ドキュメントで確認します。互換性が必要な場合は古いバージョンでも動作する代替関数に書き換えるか、ファイルを受け取る側のExcelをより新しいバージョンにアップデートすることを検討しましょう。

原因7:VBAのユーザー定義関数(カスタム関数)が認識されない

VBAで作成したユーザー定義関数を含むマクロが無効になっていたり、VBAモジュール自体が削除されている場合も#NAME?エラーが発生します。ファイルを別の環境で開いた際や、マクロのセキュリティ設定が変更されたときによく起こります。

// VBAユーザー定義関数が原因のエラー例

// VBAで定義したはずの関数「MyFunc」を呼び出す
=MyFunc(A1, B1)   // ← マクロが無効またはモジュールがない場合は#NAME?エラー

// VBAエディターでの確認方法
// Alt + F11 でVBAエディターを開く
// 左側のプロジェクトウィンドウで「標準モジュール」を確認する
// Function MyFunc(...) の定義が存在するかをチェックする

修正方法:「ファイル」タブの「オプション」から「セキュリティセンター」を開き、「マクロの設定」を確認します。マクロが有効になっているにもかかわらずエラーが解消しない場合は、Alt + F11 でVBAエディターを開き、コード自体に誤りがないか・モジュールが存在するかを確認しましょう。

関数別・#NAME?エラーの発生パターン早見表

よく使われる関数で#NAME?エラーが起きやすいパターンをまとめます。

// IF関数でのエラーパターン
=IF(A1>0, 正の値, 負の値)     // ← 文字列を""で囲んでいない
=IF(A1>0, "正の値", "負の値") // ← 正しい

// VLOOKUP関数でのエラーパターン
=VLOOKAP(A1, B1:C10, 2, FALSE) // ← VLOOKUPのスペルミス(VLOOKAP)
=VLOOKUP(A1, B1:C10, 2, FALSE) // ← 正しい

// SUM関数でのエラーパターン
=SUM(売上合計)                 // ← 「売上合計」が未定義の名前
=SUM(B2:B12)                   // ← セル範囲を直接指定(正しい)
=SUM(売上データ)               // ← 定義済みの名前を使用(正しい)

// SUMIF関数でのエラーパターン
=SUMIF(A1:A10, 東京, B1:B10)   // ← 検索条件「東京」が""で囲まれていない
=SUMIF(A1:A10, "東京", B1:B10) // ← 正しい

// INDEX + MATCH でのエラーパターン
=INDEX(C2:C10, MACH(A1, B2:B10, 0)) // ← MATCHのスペルミス(MACH)
=INDEX(C2:C10, MATCH(A1, B2:B10, 0)) // ← 正しい

// COUNTIF関数でのエラーパターン
=COUNTIF(A1:A10, 完了)          // ← 文字列「完了」が""で囲まれていない
=COUNTIF(A1:A10, "完了")        // ← 正しい

#NAME?エラーの効率的な見つけ方

関数名を小文字で入力して確認する

Excelでは、関数名を小文字で入力して確定ボタン(Enterキーまたはチェックボタン)を押したとき、関数名が正しければ自動的に大文字に変換されます。大文字に変換されない場合は関数名のスペルに誤りがある証拠です。これは手軽に使える確認方法として覚えておくと便利です。

// 小文字で入力して確認する例
=sum(A1:A10)     // ← 確定後に =SUM(A1:A10) に自動変換 → 正しい
=samm(A1:A10)    // ← 確定後も =samm(A1:A10) のまま → スペルミスあり

数式バーで#REF!部分を直接確認する

エラーが表示されているセルを選択し、数式バーを確認することで、どの部分が問題になっているかを特定できます。数式バー上で直接クリックして編集モードに入り、正しい関数名や文字列に書き直すことが最も直接的な修正方法です。

Ctrl + Shift + @ で数式を一括表示する

シート全体の数式をまとめて確認したい場合は、Ctrl + Shift + @ を押すと全セルの数式が表示モードに切り替わります。どのセルに問題のある数式が入っているかをシート全体で一目で把握できます。もう一度同じキーを押せば元の計算結果表示に戻ります。

「検索と置換」で#NAME?を一括検索する

大量のデータが入っているシートで#NAME?エラーを探す場合は、Ctrl + F で検索ダイアログを開き、「#NAME?」と入力して検索します。検索対象を「数式」に指定することで、エラーが発生しているセルへ素早くジャンプできます。

// 検索と置換での検索設定
検索する文字列:#NAME?
検索対象:数式(オプションで「数式」を選択)
// → シート内の#NAME?エラーセルをすべて検索できる

#NAME?エラーを今後発生させないための予防策

  • 関数の入力には必ずオートコンプリートまたは「関数の挿入」ボタンを使う:セルに関数名を入力し始めると表示される候補リストからTabキーで補完するか、「数式」タブの「関数の挿入」(fx)から選択することで、スペルミスを根本から防ぐことができます。
  • 文字列は必ずダブルクォーテーションで囲む習慣をつける:数式内で文字を扱う際は忘れずに ” ” で囲みます。「数式の引数」ダイアログを使うと文字列への自動変換が行われるため便利です。
  • セル範囲の指定はマウスのドラッグで行う:コロン(:)の入力漏れを防ぐことができます。特に長い範囲を指定するときはドラッグ入力を徹底しましょう。
  • 定義済みの名前は「数式で使用」から挿入する:「数式」タブの「数式で使用」から定義済みの名前を選ぶことで、スペルを間違えることなく数式に挿入できます。
  • ファイルを共有する前にバージョン互換性を確認する:新しい関数を使用している場合は、受け取る側のExcelバージョンが対応しているかを事前に確認します。互換性チェックは「ファイル」タブの「情報」→「互換性チェック」から実行できます。
  • アドインが必要な関数を使う前に有効化を確認する:分析ツール系の関数を使用する際は、アドインが有効になっているかをあらかじめチェックしておきましょう。

まとめ:#NAME?エラーは構文を修正することが最優先

#NAME?エラーは、Excelが数式内の「名前」を認識できない場合に発生するエラーです。主な原因は以下の7つに整理できます。

  • 関数名のスペルミス
  • 文字列をダブルクォーテーションで囲んでいない
  • 未定義またはスペルを間違えた名前(セル範囲名)を参照している
  • セル範囲のコロン(:)が抜けている
  • 必要なアドインが有効になっていない
  • Excelのバージョンが対応していない関数を使用している
  • VBAのユーザー定義関数が認識されない

他のエラーと異なり、#NAME?エラーはIFERROR関数で隠すことが推奨されません。数式そのものに誤りがあるため、エラーを非表示にしても正しい計算結果は得られません。エラーが出たら慌てずに数式バーを確認し、上記の原因を一つずつチェックして根本から修正することを徹底しましょう。オートコンプリートや「関数の挿入」ダイアログを日頃から活用することで、#NAME?エラーの大半は最初から防ぐことができます。