Excelの#N/A・#VALUE!・#REF!・#DIV/0!エラーの意味と直し方
この記事はAIの支援を受けて原文を翻訳したものです。専門用語や数式は原文とあわせて確認してください。
Excelのエラー値は、コードごとに原因が決まっています。#N/Aは検索しても一致する値が見つからない状態、#VALUE!は数式に渡したデータの種類が合っていない状態(文字列や見えない空白が原因になりがちです)、#REF!は参照していたセルがなくなった状態、#DIV/0!は割る数が0または空白の状態、#NAME?は数式の中にExcelが理解できない文字がある状態を表します。まず原因を直し、IFNAやIFERRORで隠すのは、リストにないコードのように、エラーになって当然の場合だけにしましょう。
Excelのエラー値の一覧(早見表)
Microsoftが説明している従来からのエラー値は7種類です。これに、Microsoft 365とExcel 2021以降の動的配列数式で表示される#SPILL!を加えた8種類を、下の表にまとめました。
| エラー | Excelが伝えていること | よくある原因 | 最初の対処 |
|---|---|---|---|
| #N/A | 該当する値がない | 検索値が見つからない | 空白・型・完全一致を確認する |
| #VALUE! | データの種類が違う | 文字列や空白のセルを計算している | セルを整える。+ではなくSUMを使う |
| #REF! | セル参照が無効 | 参照先の行や列を削除した | 元に戻す、または参照を入れ直す |
| #DIV/0! | 0で割っている | 割る数が0または空白 | IFで割る数を先に調べる |
| #NAME? | 認識できない文字がある | 関数名の誤字、引用符のない文字列、未定義の名前 | スペルを直す、引用符を付ける |
| #NUM! | 数値が不正 | 負の数のSQRT、結果が求まらないIRR | 引数を直す、別の推定値を試す |
| #NULL! | 範囲に共通部分がない | 2つの範囲の間に半角スペースがある | コロンかカンマを使う |
| #SPILL! | 結果を置く場所がない | スピル範囲のセルが空でない | 邪魔なセルを消すか移動する |
原因がすぐに分からないときは、セルを選んで「数式」タブの「数式の検証」を開きます(Windows版Excelの機能です)。「評価」を繰り返し押すと、数式が部分ごとに計算順に実行され、どこで初めてエラーになるかが分かります。
#N/A:検索しても一致する値が見つからない
VLOOKUP、XLOOKUP、MATCH、XMATCHで#N/Aが出たら、「検索値と同じものが検索範囲になかった」という意味です。表に同じ値が見えているのに出るときは、たいてい目に見えない違いがあります。次の順に確認してください。
- 見えない空白。「A-102 」のように末尾に空白があると、「A-102」とは別の文字列です。余分な空白はTRIMで取り除けますが、TRIMが対象にするのは半角スペース(文字コード32)だけです。Webページからコピーした文字列に混じりやすいノーブレークスペース(文字コード160)は残るため、先にSUBSTITUTE(A2,UNICHAR(160)," ")で通常の空白に置き換えます。
- 数値と文字列の不一致。数値の1001と文字列の「1001」は別物です。文字列として保存された数値は、たいてい左揃えで、左上に小さな緑の三角が付きます。どちらか片側を変換し、両側とも数値、または両側とも文字列にそろえます。
- 近似一致。VLOOKUPの最後の引数(検索方法)を省略するとTRUE(近似一致)として扱われ、並べ替えていないデータでは#N/Aや別の行の値が返ることがあります。FALSE(完全一致)を指定しましょう。XLOOKUPは、何も指定しなくても完全一致で検索します。
- 本当に存在しない。コードが表にないなら、#N/Aは正しい答えです。代わりに何を表示するかを決め、後述のIFNAの項のとおり、意図して処理します。
#VALUE!と#NAME?:データの種類の違いと、認識できない文字
#VALUE!は、数式が受け取ったデータを使えないときに出ます。典型は、空に見えて実は空白が入っているセルを計算に使ったときや、数字に余分な文字が混じっているときです。+や*のような演算子は文字列があると失敗しますが、SUMなどの関数は文字列を無視して計算します。そのためMicrosoftは、=A2+B2+C2の代わりに=SUM(A2:C2)を勧めています。原因の特定には「数式の検証」が役立ち、隠れた空白は「 」のように表示されます。
#NAME?は、入力した内容をExcelが認識できないときに出ます。よくある原因は次のとおりです。
- 関数名のスペルミス。たとえば=VLOKUP(...)です。関数名の入力候補(オートコンプリート)から選べば防げます。
- ダブルクォーテーションで囲んでいない文字列。=IF(A2>B2,"超過","OK")は動きますが、「超過」の引用符を忘れると#NAME?になります。
- 存在しない、またはスペルを間違えた名前。「数式」タブの「名前の管理」で確認します。
- XLOOKUPのような新しい関数を、その関数がない古いバージョンのExcelで開いた場合。
#REF!と#DIV/0!:消えた参照と、空白の割る数
#REF!は、数式が存在しないセルを指しているときに出ます。Microsoftの例では、=SUM(B2,C2,D2)という数式でC列を削除すると、=SUM(B2,#REF!,C2)に変わります。削除した直後なら、Ctrl+Zで列を元に戻せば直ります。時間がたっていたら、壊れた参照を入力し直します。防ぐほうが簡単で、=SUM(B2:D2)のように範囲で書いておけば、範囲内の列を削除しても=SUM(B2:C2)に縮むだけで、数式は動き続けます。
#REF!は、VLOOKUPの列番号が範囲の列数より大きいとき(4列の範囲に対して5列目を求めた場合など)や、INDIRECTが閉じているブックを参照しているときにも出ます。
#DIV/0!は、割る数(除数)が0または空白のセルのときに出ます。まだデータを入れていない行でよく起こるので、割り算の前に割る数を調べておきましょう。=IF(C2,B2/C2,"")なら、C2が空白か0のあいだは空欄のままで、値が入ると割り算を実行します。#DIV/0!を消したいときも、IFERRORで全部を隠すより、このように原因の側で処理するほうが安全です。AVERAGEIFも、条件に合うセルが1つもないと#DIV/0!を返します。
#NUM!・#NULL!・#SPILL!:出番の少ない3つ
- #NUM!:数値の引数が不正なとき、または結果を求められないときに出ます。=SQRT(-4)が代表例で、IRRは20回計算しても結果が得られないと#NUM!を返します。Microsoftは、推定値に別の値を指定してみることを勧めています。
- #NULL!:2つの参照の間に置いた半角スペースは、Excelでは「共通部分」を求める演算子です。=SUM(A1:A5 C1:C5)は2つの範囲に共通するセルを合計する式ですが、共通するセルはありません。別々の範囲を合計するならカンマで=SUM(A1:A5,C1:C5)、ひと続きの範囲ならコロンを使います。
- #SPILL!:FILTER、UNIQUE、SORTなどの動的配列数式は複数の結果を返しますが、その置き場所がないときに出ます。多くは、スピル範囲にすでに何かが入っているのが原因です。エラーのセルの警告アイコンを開き、「障害物セルの選択」を選ぶと、邪魔なセルが分かります。ほかにも、Excelのテーブルの中、結合セルの上、列全体の参照がシートの下端を超える場合などで、スピルは失敗します。
IFERRORとIFNAの使い分け:エラーを隠してよい場面
IFERROR(値, エラーの場合の値)が置き換えるのは、#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL!の7種類です。IFNA(値, #N/Aの場合の値)が置き換えるのは、#N/Aだけです。#SPILL!はIFERRORの対象として挙げられていません。スピルできない数式をIFERRORで包んでも結果の置き場所は増えないので、スピル範囲を空けて対処します。
「価格表」という名前を付けた4列の範囲があるとして、例として=IFERROR(VLOOKUP(A2,価格表,5,FALSE),0)という数式を考えます。5列目は存在しないので、すべての行が静かに0になり、合計もそれらしく見えてしまいます。IFERRORをIFNAに替えれば、#REF!が画面に残るので、列番号を直せます。
- まず数式を正しく動かします。Microsoftも、IFERRORのような包括的なエラー処理は、想定外のエラーまで隠すと注意しています。
- 検索では、IFNA、またはXLOOKUPの4番目の引数(見つからない場合)で「見つからない」ケースだけを処理し、ほかのエラーは見えたままにします。
- 0よりも「未登録」のような見える言葉を使います。0は本物のデータに見えて、平均を押し下げます。
- IFERRORは、どのエラーでも意味が同じになる表示用のセルに限って使い、包む前に数式をテストします。
よくある質問
#####はエラーですか?
数式のエラーではありません。列幅が狭くて数値や日付を表示しきれないときの表示なので、列幅を広げれば解消します。日付や時刻が負の値のときにも表示されます。
ブックを同僚のPCで開くと#NAME?になるのはなぜですか?
相手のExcelに、そのブックで使っている関数がない可能性が高いです。Microsoftは、新しい関数が古いバージョンで再計算されると#NAME?を返すと説明しています。古い関数に置き換えるか、その関数が使えるバージョンで開いてください。
セルの左上にある緑の三角は何ですか?
バックグラウンドのエラー チェックが、「文字列として保存された数値」や「隣と異なる数式」など、問題の可能性を知らせているもので、エラー値ではありません。「ファイル」→「オプション」→「数式」で、ルールごとにオンとオフを切り替えられます。
参考資料(Microsoft サポート):Excel で数式のエラーを検出する、エラー値 #REF! を修正する方法、IFERROR 関数、IFNA 関数
関連記事
本文の理解を助けるために制作したオリジナルイラストです。