【Excel】日付の引き算で「#NUM!」が出る!古い日付から新しい日付を引く際のエラー対策

【Excel】日付の引き算で「#NUM!」が出る!古い日付から新しい日付を引く際のエラー対策
🛡️ 超解決

Excelで2つの日付の差(期間)を計算する際、主にDATEDIF関数を使用すると「#NUM!」というエラーが表示されることがあります。また、単純な引き算(シリアル値の減算)において、結果がマイナスになる場合に「#######」と表示されたり、計算不能に陥ったりするケースも散見されます。

これらの事象は、Excelが日付を「1900年1月1日を1とするシリアル値」として管理しているという技術的仕様と、DATEDIF関数の「開始日は終了日より前でなければならない」という論理制約によって発生します。本記事では、引数の順序ミスから1900年以前の日付問題まで、日付計算における#NUM!エラーを解消する手順を詳説します。

結論:日付の#NUM!エラーを解消する3つの技術的解決策

  1. DATEDIF関数の引数順序を「開始日、終了日」に正す:古い日付を先に、新しい日付を後に指定することで論理整合性を確保します。
  2. ABS関数で絶対値を取得する:どちらの日付が新しいか不明な場合は、差の絶対値を求めることでエラーを回避します。
  3. 「1904年から計算する」オプションを検討する:時間の計算でマイナスが発生する場合に、計算エンジンの基準日を変更します。

1. 日付計算で#NUM!エラーが発生する技術的背景

Excelにおける日付と時刻の計算は、すべて「シリアル値」という数値に基づいています。#NUM!(数値エラー)が出る背景には、関数の引数に対する厳格な制限があります。

DATEDIF関数の論理制約

  • 逆転現象の禁止:DATEDIF関数は「期間」を求める関数であるため、DATEDIF(開始日, 終了日, 単位) という構文において、開始日が終了日よりも後の日付(未来)である場合、Excelは「期間が負の値になる」ことを許容せず、#NUM!エラーを返します。
  • 1900年問題:Excel(Windows版標準)は1900年1月1日より前の日付をシリアル値として認識できません。そのため、1899年以前の日付を計算に含めると、そもそも数値として扱われず、エラーや計算不能の原因となります。

2. 手順①:DATEDIF関数の引数順序の修正

勤続年数や年齢計算などで最も頻発するミスです。引数の論理順序を修正します。

  1. エラーが出ている =DATEDIF(A1, B1, "D") などの数式を確認します。
  2. セルの日付を比較し、A1がB1よりも「新しい(未来)」になっていないかチェックします。
  3. 数式の引数を =DATEDIF(古い方のセル, 新しい方のセル, "単位") に書き換えます。

3. 手順②:日付の前後が不明な場合の「絶対値」計算

アンケート結果の集計などで、どちらの日付が先か特定できない場合でもエラーを出さずに差を求める技術です。

単純な日数の差を求める場合

DATEDIFを使わず、引き算の結果を ABS関数 で囲みます。
=ABS(A1 - B1)

  • ABS関数は数値を絶対値(プラスの値)に変換するため、日付が前後していても正しい「経過日数」が得られます。

年数や月数をエラーなしで求める場合

=IF(A1>B1, DATEDIF(B1, A1, "Y"), DATEDIF(A1, B1, "Y"))

  • IF関数で大小関係を論理判定し、常に「古い方から新しい方」を引くように数式を構成します。

4. 手順③:負の時間を表示させる「1904年設定」の利用

勤務時間の計算などで、計算結果がマイナス(不足時間など)になった際に「#######」と表示されてしまう問題を根本的に解消する設定です。

  1. 「ファイル」タブ > 「オプション」を開きます。
  2. 左メニューから 「詳細設定」 を選択します。
  3. 「次のブックを計算するとき」セクションにある 「1904年から計算する」 にチェックを入れます。
  4. 「OK」をクリックします。

注意: この設定は「ブック単位」です。他のブックから日付をコピーすると「4年と1日」のズレが生じるため、外部とのデータ交換が多いファイルでは使用を避けてください。

5. 技術仕様:日付エラーの症状別・原因と解決表

症状 考えられる技術的原因 解決アクション
#NUM! DATEDIF関数の開始日と終了日が逆転している。 引数の順序を「古い日, 新しい日」に入れ替える。
#######(シャープの連続) 計算結果がマイナスの日付・時刻になっている。 1904年設定に変更、またはABS関数で処理。
#VALUE! 日付が文字列として認識されている、または1900年以前。 日付型に変換、またはTEXT関数での擬似計算。

まとめ:日付の「順序」と「基準日」を論理的に管理する

Excelの日付計算で発生する#NUM!エラーは、人間にとっての「期間(差)」という曖昧な概念を、Excelの計算エンジンが「非負の数値(0以上のシリアル値)」として厳密に処理しようとするために起こります。特にDATEDIF関数は、引数の順序という論理的な一貫性を求めるため、記述ミスが即座にエラーに直結します。

実務においては、まず「開始日 < 終了日」の原則を再確認してください。もしデータの順序を制御できない場合は、IF関数やABS関数による動的な例外処理を組み込むことが、エラーのない堅牢なワークシートを構築するための最短の手順です。また、負の時間を扱う際の「1904年設定」は強力ですが、他のブックとの互換性に影響を及ぼすという技術的トレードオフを理解した上で、慎重に適用してください。日付の管理ロジックを正しく定義し、精緻な期間計算を実現しましょう。