数式にエラーが出たとき、エラーの種類が原因をほぼ特定してくれます。
このページでは7種類のエラーについて、原因と直し方を順に整理します。まず出ているエラーの種類を確認してから、該当する項目を読んでください。
エラー種別の早見表
| エラー | 一言で言うと | 主な原因 |
|---|---|---|
#N/A |
見つからなかった | 検索キーが存在しない |
#REF! |
参照が壊れた | 行列の削除、範囲外の指定 |
#VALUE! |
型が違う | 数値のところに文字列 |
#DIV/0! |
0で割った | 分母が空欄か0 |
#NAME? |
名前が分からない | 関数名の綴り違い |
#NUM! |
数値がおかしい | 計算範囲外、引数の矛盾 |
#ERROR! |
数式の書き方が不正 | 括弧やカンマの誤り |
#N/A ── 見つからなかった
VLOOKUP や MATCH などの検索系で出ます。「探したけれど無かった」という意味で、数式自体は正しく動いています。
原因1:本当に存在しない
マスタに登録されていないデータです。これは数式の問題ではなくデータの問題なので、エラーを消すのではなくマスタを直してください。
原因2:余分なスペース
"B-201 " と "B-201" は別物です。見た目では分かりません。
=LEN(A2)
で文字数を確認すると判別できます。TRIM で整えてください。
=VLOOKUP(TRIM(A2), マスタ!A:B, 2, FALSE)
原因3:数値と文字列の食い違い
101(数値)と "101"(文字列)は一致しません。セルが左寄せなら文字列です。
原因4:全角と半角
"ABC" と "ABC" は別物です。ASC で半角に統一できます。
原因5:検索範囲が左端にない
VLOOKUP は範囲の左端列しか検索しません。 右から左へは探せません。XLOOKUP か INDEX+MATCH を使ってください。
対処
原因を特定したうえで、見つからないことが正常なら包みます。
=IFNA(VLOOKUP(A2, マスタ!A:B, 2, FALSE), "未登録")
IFERROR より IFNA を推奨します。 IFERRORは #REF! や #NAME? まで隠してしまい、本当の不具合に気づけなくなります。
#REF! ── 参照が壊れた
最も危険なエラーです。 参照先が失われています。
原因1:参照していた行や列を削除した
数式が指していたセルが消えました。元に戻すには、削除を取り消すしかありません。 定期的にバージョン履歴を確認する習慣が効きます。
原因2:列番号が範囲を超えている
=VLOOKUP(A2, A:C, 4, FALSE)
範囲が3列なのに4列目を指定しています。
原因3:結果の展開先にデータがある
FILTER SORT UNIQUE SPLIT ARRAYFORMULA など、複数セルに結果を返す関数で頻出します。
数式の下や右に何か入力されていないか確認してください。これが分かれば一瞬で直せます。
原因4:IMPORTRANGEのアクセス未許可
IMPORTRANGE を入れた直後は #REF! になります。セルにカーソルを合わせて「アクセスを許可」を押してください。
原因5:循環参照
自分自身を参照しています。=SUM(A:A) をA列に書いた場合などです。列全体を指定するときは、数式を別の列に置いてください。
#VALUE! ── 型が違う
数値を期待している場所に文字列が入っています。
原因1:数値が文字列になっている
CSVや他システムからのコピーで頻出します。セルが左寄せなら文字列です。
=COUNT(A2:A100)
COUNT が行数より少なければ、文字列が混ざっています。
原因2:範囲の大きさが揃っていない
FILTER や SUMIFS で、条件範囲と対象範囲の行数が違うと出ます。すべて同じ行数に揃えるか、列全体で統一してください。
原因3:日付が文字列になっている
DATEVALUE で変換してください。
原因4:引数の型が間違っている
MID の開始位置に0以下、OFFSET の高さに0以下を指定した場合など。
#DIV/0! ── 0で割った
分母が0か空欄です。
対処
計算できないことが正常なら包みます。
=IFERROR(A2/B2, "")
0 ではなく "" を返してください。 0を返すと、後で AVERAGE を取ったときに平均が下がります。
AVERAGEIF で出る場合は、条件に合う行が1件もないという意味です。条件のスペースや全角半角を確認してください。
#NAME? ── 名前が分からない
原因1:関数名の綴り違い
VLOOKUP を VLOOKUPP と書いた、など。
原因2:その環境に無い関数
Excel 2019以前で XLOOKUP や FILTER を使った場合。
逆に、QUERY SPLIT FLATTEN ARRAYFORMULA REGEXEXTRACT はスプレッドシート専用で、Excelでは動きません。
原因3:文字列をクォートで囲んでいない
=VLOOKUP(東京, A:B, 2, FALSE) ← 誤り
=VLOOKUP("東京", A:B, 2, FALSE) ← 正しい
原因4:名前付き範囲が存在しない
範囲名の綴りを確認してください。
#NUM! ── 数値がおかしい
原因1:引数の順番が逆
DATEDIF で開始日が終了日より後になっている、など。
原因2:計算結果が扱える範囲を超えた
極端に大きい数、負の数の平方根など。
原因3:日付の範囲外
EOMONTH に極端な月数を渡した場合など。
#ERROR! ── 数式の書き方が不正
スプレッドシート特有のエラーです。Excelでは入力時に弾かれるものが、ここでは #ERROR! になります。
原因1:括弧の数が合っていない
長い数式でよく起きます。数式バーで括弧の対応が色分けされるので確認してください。
原因2:カンマの数が合っていない
IFS で条件と値がペアになっていない、など。
原因3:クォートで囲むべき引数を囲んでいない
IMPORTRANGE の第2引数、QUERY のクエリ文で頻出します。
=IMPORTRANGE("キー", 売上!A1:D100) ← 誤り
=IMPORTRANGE("キー", "売上!A1:D100") ← 正しい
エラーを消す前に確認すること
IFERRORで全部包む前に、必ず一度は原因を確認してください。
IFERROR はすべての種類のエラーを区別なく置き換えます。「見つからなかっただけの #N/A」も「参照が壊れた #REF!」も、同じ値に化けます。
結果として、本当は取得できるはずのデータが黙って消えている状態になります。数字は出るのに間違っている、という最も気づきにくい不具合です。
手順:
- 1. まずIFERROR無しで数式を書く
- 2. 出たエラーの種類を確認する
- 3. 原因を特定して潰す
- 4. 想定内のエラーだけを包む
包むときも、可能なら範囲を絞ってください。
- –
#N/AだけならIFNA - – 検索なら XLOOKUP の第4引数
エラーの件数を監視する
エラーを隠す代わりに、件数を数えて見えるようにするという方法もあります。
=COUNTIF(C2:C1000, "#N/A")
マスタ未登録の件数が分かるので、データの不備に気づけます。隠すより数えるほうが運用しやすい場面は多くあります。
まとめ
- – エラーの種類が原因をほぼ特定する。まず種類を確認する
- –
#N/Aは「見つからない」。スペース・型・全角半角を疑う - –
#REF!は最も危険。複数セルを返す関数では展開先を確認 - –
#VALUE!は型違いか、範囲の行数のずれ - –
#ERROR!はスプレッドシート特有。括弧・カンマ・クォートを確認 - – 原因を特定する前にIFERRORで包まない
コメントを残す