Excel(エクセル)で数式を入力した際、セルに「#NUM!」というエラーメッセージが表示され、計算結果が出ずに困った経験はないでしょうか。Excelには「#VALUE!」や「#N/A」など様々なエラーが存在しますが、その中でも「#NUM!」エラーは特定の関数を使用した場合や、特殊な計算を行った際に頻発するエラーです。 「数式自体は間違っていないはずなのに、なぜかエラーになる」「他の行は正常に計算されているのに、一部のセルだけ#NUM!になる」といった場合、関数に与えている数値の条件や、Excelが内部で行っている計算の限界を超えてしまっていることが原因です。 この記事では、Excelで「#NUM!」エラーが発生する本当の原因と、特にエラーが起きやすい「DATEDIF関数」や「IRR関数」「SQRT関数」などでの具体的な対処法・直し方を初心者にも分かりやすく詳細に解説します。

目次

1. Excelの「#NUM!」エラーとは?発生する基本的な原因

「#NUM!」エラーは「Number(数値)エラー」の略称です。数式や関数の中で「無効な数値」が使用されている、あるいはExcelの計算能力の限界を超えた数値が入力・算出された場合に表示されます。 基本的な原因としては以下の4パターンに分類されます。

  • 関数のルールに反する数値が入っている: 関数が想定していない数値(日付の逆転、マイナスの数値など)を引数として指定している。
  • 反復計算によって解が見つからない: 財務関数などで、Excelが内部で計算を繰り返しても正しい答えにたどり着けない。
  • 数値が大きすぎる、または小さすぎる: Excelが扱える数値の最大値や最小値を超えてしまっている。
  • 反復計算の設定が無効になっている: 意図的に循環参照を行う数式を使用しているのに、Excelのオプション設定で許可されていない。

文字が入力されているべき場所に数値が入っているといった「データ型の不一致」で起こる「#VALUE!」エラーとは異なり、「#NUM!」はあくまで「数値としては認識しているが、数学的・仕様的に計算が不可能である」という状況で発生します。次項からは、このエラーが頻発する代表的な関数ごとの具体的な解消法を解説します。

2. DATEDIF関数で#NUM!エラーが出る原因と直し方

勤続年数や年齢、契約期間などを計算する際、2つの日付の期間(年数、月数、日数)を求める「DATEDIF(デイトディフ)関数」は非常に便利です。しかし、このDATEDIF関数は「#NUM!」エラーを引き起こす代表格でもあります。

原因:開始日が終了日よりも未来(後)になっている

DATEDIF関数は、以下のような構文で入力します。

=DATEDIF(開始日, 終了日, "単位")

この関数の絶対的なルールとして、「開始日」は必ず「終了日」よりも過去(または同じ日)でなければなりません。もし、開始日のセルに入力されている日付が、終了日のセルに入力されている日付よりも「未来」であった場合、期間がマイナスになってしまうため、DATEDIF関数は計算を拒否して「#NUM!」エラーを返します。 例えば、開始日(A1セル)に「2025/12/31」、終了日(B1セル)に「2025/01/01」が入力されている状態で `=DATEDIF(A1, B1, “Y”)` と入力するとエラーになります。

対処法1:セルの参照順序を正しく直す

最も単純なミスは、数式を入力する際に開始日と終了日のセルを逆に指定してしまっているケースです。数式バーを確認し、第1引数が古い日付、第2引数が新しい日付になっているかをチェックして修正してください。

対処法2:IF関数を使って日付の前後を判定する

アンケート結果やシステムから抽出したデータなどで、日付の順番がバラバラであったり、場合によっては開始日が終了日を過ぎてしまう(予定より遅れた等)ケースがある場合、単純にエラーのままにしておくわけにはいきません。 このような場合は、IF関数を組み合わせて「開始日が終了日より未来の場合は別の処理をする(または0にする)」という数式に変更します。 【数式の例】開始日(A1)が終了日(B1)より未来の場合は「エラー」と表示し、正しい場合は期間を計算する

=IF(A1>B1, "日付エラー", DATEDIF(A1, B1, "Y"))

【数式の例】どちらの日付が先であっても、とにかく2つの日付の間の年数を求めたい場合(MIN関数とMAX関数を使用)

=DATEDIF(MIN(A1,B1), MAX(A1,B1), "Y")

MIN関数とMAX関数を使うことで、Excelが自動的に古い日付を「開始日」に、新しい日付を「終了日」に割り当ててくれるため、どのような日付の組み合わせでも絶対に「#NUM!」エラーが発生しなくなります。

3. IRR関数・RATE関数で#NUM!エラーが出る原因と直し方

ビジネスの現場や投資分析において、内部収益率を求める「IRR関数」や、利率を求める「RATE関数」などの財務関数を使用することがあります。これらの関数で「#NUM!」エラーが出る場合は、データの前提条件やExcelの計算アルゴリズムそのものに原因があります。

原因1:キャッシュフローにプラスとマイナスの両方が存在しない

IRR関数は、投資に対してどれだけの利回りがあったかを計算します。この計算を成立させるためには、必ず「お金が出ていく(マイナスの数値)」と「お金が入ってくる(プラスの数値)」の両方がデータ範囲内に存在しなければなりません。 例えば、初期投資額から毎年の収益まですべてがプラスの数値で入力されていたり、逆にすべてがマイナスの数値であったりすると、投資としての計算が成立しないため「#NUM!」エラーになります。 必ず初期投資額などの支出項目を「-1000000」のようなマイナスの数値で入力しているか確認してください。

原因2:計算が収束せず答えが見つからない(反復計算の限界)

IRR関数やRATE関数は、内部的に何度もシミュレーション(反復計算)を繰り返すことで、少しずつ正しい答えに近づいていくという特殊な計算方法(逐次近似法)を行っています。 Excelの仕様では、この計算を「最大20回(RATE関数などは最大20回、場合によっては100回)」繰り返します。しかし、キャッシュフローの変動が激しい場合など、20回計算しても答えの誤差が基準値(0.0000001など)以内に収まらない場合、「計算を諦めて」#NUM!エラーを出力します。

対処法:引数「推定値」を設定して計算の起点を変える

Excelが答えにたどり着けない場合、ユーザー側から「大体このくらいの数字から計算をスタートしてみて」というヒントを与えてあげる必要があります。これが引数の「推定値(guess)」です。 IRR関数の構文は以下のようになっています。

=IRR(値, [推定値])

通常、この「推定値」は省略され、Excelは自動的に「0.1(10%)」を起点として計算を始めます。しかしエラーが出る場合は、この推定値を手動で指定します。 【対処手順】 数式の末尾に、カンマ区切りで異なるパーセンテージ(例:0.05 や 0.2 など)を入力します。

=IRR(B2:B10, 0.05)
=IRR(B2:B10, 0.2)

ヒントとなるスタート地点が変わることで、Excelが20回の計算以内に正しい答えにたどり着けるようになり、「#NUM!」エラーが解消されて正しい利回りが表示されます。エラーが消えるまで、0.01や0.3など、いくつかの推定値を試してみてください。

4. SQRT関数・LOG関数などで#NUM!エラーが出る原因と直し方

数学・三角関数を使用する場合、数学のルール上あり得ない計算を行おうとすると「#NUM!」エラーが発生します。

原因:数学的に成立しない「マイナスの数値」を指定している

代表的なものが、平方根(ルート)を求める「SQRT(スクワートルート)関数」や、対数を求める「LOG関数」です。 平方根とは「2乗するとその数になる値」のことです。例えば、9の平方根は3(3×3=9)です。しかし、実数の世界では「2乗してマイナスになる数」は存在しません。そのため、SQRT関数の引数にマイナスの数値(例:-9)を指定すると、計算不可能として「#NUM!」エラーになります。 LOG関数の場合も同様に、真数にゼロやマイナスの数値を指定するとエラーになります。

対処法:ABS関数を使って数値を「絶対値」に変換する

データ集計の都合上、どうしても計算対象のセルにマイナスの数値が混ざってしまう場合、マイナスの記号を取り除いた「絶対値(プラスの数値)」に変換してから計算させるという手法が有効です。 数値を絶対値に変換するには「ABS(アブソリュート)関数」を使用します。SQRT関数の中にABS関数を入れ子(ネスト)にして使用します。 【数式の例】A1セルが「-9」であってもエラーを出さずに「3」と計算させる

=SQRT(ABS(A1))

このように記述することで、まずABS関数が「-9」を「9」に変換し、その後にSQRT関数が「9」の平方根を計算するため、エラーを完全に防ぐことができます。

5. 数値の桁数が大きすぎる・小さすぎる(桁あふれ)場合の対処法

Excelが取り扱える数値には上限と下限があります。Excelは非常に優秀な表計算ソフトですが、無限の数値を扱えるわけではありません。 Excelの仕様上、扱える数値の最大値は「10の308乗(1の後に0が308個並ぶ数字)」程度です。これを少しでも超えると、計算の限界を突破した「桁あふれ(オーバーフロー)」となり、「#NUM!」エラーが発生します。

原因:POWER関数やべき乗の使い間違い

実務で10の308乗という天文学的な数値を扱うことは通常ありませんが、数式の入力ミスによって意図せず発生することがあります。 例えば、POWER関数(べき乗を求める関数)や、キャレット記号「^」を使った計算で、以下のような入力をしたとします。

=1000^1000

これは「1000を1000回掛ける」という計算になり、あっという間にExcelの限界を超えてエラーになります。 対処法: 桁あふれによるエラーの場合は、数式そのものに設定ミスがないか(乗算「*」とべき乗「^」を間違えていないか等)を確認し、正しい計算式に修正するしかありません。学術的なデータなどで本当に限界を超える数値を扱う必要がある場合は、数値を対数に変換して計算するなどの専門的な処理が必要になります。

6. 実務で必須:IFERROR関数を使って#NUM!エラーを非表示にする方法

ここまで関数ごとの根本的な原因と直し方を解説してきましたが、実際の業務では「データが未入力のセルがあるため、一時的に#NUM!エラーが表示されてしまうのは仕方がない」というケースが多々あります。 しかし、表の中に「#NUM!」というエラーが剥き出しになっていると、印刷時の見栄えが悪くなるだけでなく、そのエラーセルを参照している別の合計セルの計算まで連鎖的にエラーになってしまうという問題が生じます。 これを防ぐための最も実用的なテクニックが、「IFERROR(イフエラー)関数」を使ってエラーを強制的に隠す(空白にする)方法です。 【対処手順】 元の数式全体をIFERROR関数で囲み、「もしエラーだったら空白(””)を表示する」という命令を追加します。 例えば、元の数式が `=DATEDIF(A1, B1, “Y”)` の場合、以下のように修正します。

=IFERROR(DATEDIF(A1, B1, "Y"), "")

この数式に変更すると、DATEDIF関数が正常に計算できた場合はその年数が表示され、もし日付の逆転や未入力などで「#NUM!」エラーが発生した場合は、エラー文字の代わりに「何も表示しない(空白)」状態になります。 空白以外にも、特定の文字を表示させることも可能です。

=IFERROR(IRR(B2:B10), "計算不可")

このように記述すれば、エラー時に「計算不可」という文字を表示させることができます。IFERROR関数は、#NUM!だけでなく#VALUE!や#N/Aなど全てのエラーをキャッチしてくれるため、人に提出するExcelファイルを作成する際は必ず覚えておきたい必須テクニックです。

7. まとめ

Excelにおける「#NUM!」エラーは、一見するとファイルが壊れてしまったかのような不安を覚えますが、その原因は「関数のルール違反」や「Excelの計算能力の限界」という非常に明確なものです。 特に、業務で頻繁に使用する「DATEDIF関数」においては、開始日と終了日の逆転が原因の9割を占めます。エラーが出たときは、まず「指定している数値の大小関係やプラスマイナスが正しいか」を疑ってみてください。 IRR関数などの特殊な計算では、引数の「推定値」を指定するというExcelならではの操作を知っているかどうかが解決の鍵となります。 エラーの原因を特定して数式を正しく修正することが最優先ですが、どうしても一時的なエラーを許容しなければならない場合は、IFERROR関数を活用してエラー表示を美しく処理しましょう。原因と対処法をしっかり理解していれば、「#NUM!」エラーはもう怖くありません。