#NUM!エラーの原因と対処法

平方根や利率の計算、上位◯番目の抽出などで#NUM!と表示されることがあります。数式のつづりは合っているし、参照先にもちゃんと数値が入っている。それでもエラーになるのは、その計算の答えがExcelにとって「数値として成立しない」からです。結論から言うと、#NUM!エラーは数式に渡した数値そのものが無理をしているサインです。この記事では、#NUM!が出る5つの典型パターンと、それぞれの直し方を解説します。

目次

#NUM!エラーの意味

#NUM!(Number=数値)エラーは、数式や関数に無効な数値が渡されたとき、または計算結果がExcelの扱える範囲を超えたときに発生します。文字列が混ざっていて計算できない#VALUE!エラーとは異なり、渡している値はきちんと数値なのにエラーになるのが特徴です。データの型ではなく、値の大きさや符号、件数が問題になっています。

#NUM!エラーが出る5つの典型パターン

次のような支店別の売上表(A1:B5)を例に見ていきます。A列が支店、B列が売上です。

A(支店) B(売上)
2 東京 320000
3 大阪 280000
4 名古屋 195000
5 福岡 150000

1. 上位◯番目がデータ件数を超えている(LARGE・SMALL)

実務でもっとも遭遇しやすいのがこれです。A列が支店、B列が売上の表から、売上が2番目に大きい支店の金額を取り出す数式です。

=LARGE(B2:B5,2)

売上は大きい順に320,000/280,000/195,000/150,000なので、2番目の280,000(大阪)が返ります。ところがデータは4件しかないため、5番目を求める=LARGE(B2:B5,5)は#NUM!になります。小さいほうから数えるSMALL関数も同じで、=SMALL(B2:B5,2)は2番目に小さい195,000(名古屋)を返しますが、5を指定すればやはり#NUM!です。

集計表で「上位5件を表示」のような枠を固定で作っておくと、データが4件しかない月にエラーが並びます。件数を先に確認して逃がすのが確実です。

=IF(COUNT($B$2:$B$5)<5,"-",LARGE($B$2:$B$5,5))

B列(売上)の数値の個数が5未満なら「-」を表示し、足りているときだけLARGEを実行する、という意味の数式です。件数の数え方はCOUNTIFSで複数条件を満たすセルの個数を数える方法もあわせて参考にしてください。順位そのものを付けたい場合はRANK関数で同順位を考慮した順位付けをする方法、真ん中の値を取りたい場合はエクセル関数で条件付きで中央値(MEDIAN)を計算する方法が使えます。

2. 平方根や対数にマイナスの数値を渡している

マイナスの平方根は実数として存在しないため、=SQRT(-4)は#NUM!になります。同じくLOG関数やLN関数に0以下の値を渡した場合もエラーです。

差分の平方根を取るような計算で、引き算の結果がたまたまマイナスになったときに起こります。絶対値にしてよい計算なら、ABS関数で包みます。

=SQRT(ABS(-4))

-4の絶対値4の平方根で、2が返ります。ただし符号を無視してよい計算なのかは必ず確認してください。マイナスになること自体がデータ不備のサインである場合、ABSで包むのは問題を隠すだけになります。

3. 計算結果が大きすぎる・小さすぎる

Excelが扱える数値には上限があり、およそ1.79×10の308乗を超えると#NUM!になります。=10^1000のようなべき乗計算や、大きな数どうしの掛け算を繰り返す複利計算で起こります。桁が現実的な範囲に収まっているかを見直しましょう。

4. 日付の期間計算で開始日と終了日が逆になっている

期間の年数や日数を求めるDATEDIF関数は、開始日が終了日より後だと#NUM!を返します。

=DATEDIF("2026/8/1","2026/3/1","D")

開始日8月1日に対して終了日が3月1日と過去になっているため、エラーになります。引数の順番は開始日、終了日の順です。入社日と退社日、契約開始と契約終了などを取り違えているケースがほとんどなので、参照しているセルを入れ替えれば直ります。日付を範囲で集計する場合の書き方はSUMIFで日付範囲を指定して集計する方法も参考になります。

5. 利率や内部収益率が求まらない(RATE・IRR)

RATE関数やIRR関数は、答えを一発で計算するのではなく少しずつ値を変えながら解を探す仕組みになっています。既定では20回試して答えに近づけなかった場合、#NUM!を返します。

IRR関数はキャッシュフローにマイナス(支出)とプラス(収入)の両方が含まれていないと解が存在しないため、符号が片方だけになっていないかをまず確認します。上の売上表のようにすべて正の値しかない範囲を渡すと、それだけで#NUM!になります。初期投資をマイナスで入力したうえで、第2引数に推定値を渡すと収束することがあります。E列に年度ごとのキャッシュフローを入力している場合の書き方は次のとおりです。

=IRR(E2:E7,0.1)

0.1(10%)あたりから探し始めてください、という意味です。数式が長くなって読みにくくなる場合は、LET関数で数式を読みやすく整理する方法で紹介している書き方が使えます。

よくあるエラー・注意点

  • #NUM!は「隠す」より「条件を付ける」: IFERRORで包むとエラーは消えますが、上位5件のうち実際には4件しかないという事実まで見えなくなります。COUNTで件数を判定して「-」を出すほうが、読み手にも正しく伝わります。
  • 引数の順番に注意する: LARGE関数の引数は「範囲、順位」の順です。=LARGE(2,B2:B5)のように逆に書くと、#NUM!とは限らず別の種類のエラーになるため、原因にたどり着くのが遅れます。
  • 関数名を打ち間違えている場合は#NAME?: そもそも関数として認識されていない場合は#NUM!ではなく#NAME?が出ます。エラーの種類で切り分けられるので、#NAME?エラーが出たときの確認ポイントもあわせて確認してください。
  • DATEDIFは候補に出てこない関数: DATEDIFは互換性のために残されている関数で、入力時のオートコンプリート候補に表示されません。表示されないからといって間違いではないので、そのまま手入力して問題ありません。
  • 反復計算の設定を変える前に数式を疑う: RATEやIRRが収束しないとき、Excelのオプションで反復回数を増やす方法もありますが、多くの場合は入力しているキャッシュフローの符号やセル範囲のほうが間違っています。設定を触るのは最後にしましょう。

まとめ

#NUM!エラーは、データの型ではなく数値そのものが計算として成立していないときに出ます。LARGEやSMALLで件数を超えた順位を指定した、マイナスの平方根を求めた、DATEDIFで日付が逆、といったパターンが典型です。エラーを隠すのではなく、COUNTで件数を確認する・ABSで符号をそろえる・引数の順番を直す、といった形で原因側を潰すのが正解です。数式の書き方そのものが認識されない#NAME?エラーが出たときの確認ポイントや、参照演算子の使い方を間違えたときの#NULL!エラーが出る理由と直し方もあわせてご覧ください。

IF関数そのものの基本的な使い方はIF関数の基本的な使い方|条件で処理を分ける書き方でも解説しています。あわせてご覧ください。

LARGE関数・SMALL関数そのものの使い方はLARGE関数・SMALL関数の使い方|大きい順・小さい順に◯番目の値を取り出す方法でも解説しています。あわせてご覧ください。

COUNT関数・COUNTA関数そのものの使い方はCOUNT関数・COUNTA関数の違い|数値のセルと空白以外のセルを数える方法でも解説しています。あわせてご覧ください。

DATEDIF関数そのものの使い方はDATEDIF関数の使い方|2つの日付の間の年数・月数・日数を求める方法でも解説しています。あわせてご覧ください。

ABS関数そのものの使い方はABS関数の使い方|絶対値を求めて差の大きさを比べる方法でも解説しています。あわせてご覧ください。

目次