「DATEDIF関数 使えない」というキーワード検索がサジェストで出ていました。
気になったのは、
DATEDIF関数が使えないときはExcelブックの設定を「1904年から計算する」に変えましょう
と解説しているサイトが目立ったこと。
Google検索上位にヒットするいくつかの記事に共通していました。
本当でしょうか?
この記事では「1904年から計算する」の意味を解説します。
そして、DATEDIF関数のエラーが発生して「使えない」ときの対処方法を示します。
DATEDIF関数について
2つの日付から、満年数・満月数・満日数を算出する関数です。
Lotus1-2-3 という古いソフトとの互換性を保つために残されていますが、Excelでも標準で使用することができます。
Microsoftサポートによると一部の日数を求める引数のみ使用を推奨しないとする公式なコメントがあります。
が、通常の年数・月数・日数を算出するには問題なく扱える関数です。
DATEDIF関数の基本的な使い方や注意点については、こちらの記事で解説しています。
Excelブックの設定を「1904年から計算する」に変更するリスク
結論として「1904年から計算する」への設定変更はしない方がいいです。
その理由は、1904年の設定をしたExcelブックが、標準のExcelブックと混在すると、意図しない計算結果を招くからです。
たとえば、会社のほとんどの人が太陽暦を採用しているのに、あなただけが太陰暦(旧暦)を採用している状態を想像しましょう。
「2023年1月1日は休業です。」
あなたにとっての1月1日は、旧暦の1月1日。みんなとは違う日に休むことになります。
同じ日付なのに、解釈が2つある。
これに似た状況が、「1904年から計算する」を選ぶことで起こります。
Microsoft 標準は「1900年から計算する」
Microsoft Windowsは「1900年から計算する」を規定としています。
既定では、Microsoft Excel for Windows では 1900 日付システムが使用されます。 1900 年の日付システムを使用すると、MS-DOS または Microsoft Windows で実行するように設計された Excel とその他のスプレッドシート プログラム (Lotus 1-2-3 など) 間の互換性が向上します。
Microsoft Learn
ですので、そもそも「1904年から計算する」に変更する必要はありません。
1900年システムと1904年システムでは日付のシリアル値が変わる
Excelの日付の正体はシリアル値です。
Excelではシリアル値を足したり引いたりすることで、日付の計算を行っています。
Windows規定では、1900年1月1日を「1」として数え始めて、以降のすべての日付に連続した番号(シリアル値)が振られています。
ちなみに、1900年システムの場合、2023年1月1日のシリアル値は「44927」です。
1904年システムでは、同じ日付のシリアル値が変わります。
Excelの設定を「1904年から計算する」に変更すると、シリアル値は1904年1月1日を「1」として数え始めます。
1904年システムの場合、2023年1月1日のシリアル値は「43465」。
1900年システムとは、同じ日付でもシリアル値で「1462」の差が生じます。
つまり、4年と1日ズレます。
異なる日付システムが混在すると日付がズレる
1900年システムのExcelブックと1904年システムのExcelブックどうしで日付データのやりとりを行った場合に、日付がズレます。
たとえば、1900年システムに入力した「2023年1月1日」を、1904年システムのExcelブックにコピペすると、「2027年1月2日」と表示されます。
シリアル値の起点が違うからです。
1904年システムのExcelブックには、シリアル値「44927」がそのままコピペされます。
しかし、1904年システムのシリアル値「44927」は、1904年1月1日から数えた「2027年1月2日」です。
「1904年から計算する」のチェックは外そう
少なくとも、「1904年から計算する」はDATEDIF関数を使用するためのスイッチではありません。
安易に利用すると、部署内や他社とやりとりする際、思わぬ混乱を招きます。
「1904年から計算する」のチェックは外しましょう。
ちなみに、1900年システム・1904年システムが混在する場合の対処方法については、Microsoft公式の記事をご覧ください。
Excelブックの設定変更は慎重に。
DATEDIF関数が「使えない」ときの対処法
DATEDIF関数でエラーが起こるのは、おおむね数式が正しく入力できていないことが原因です。
次の画像は、DATEDIF関数が誤って入力されているパターンを作成したものです。
No.1だけが正常な入力です。
>> DATEDIF関数の書式や使い方はこちら
そもそも関数名を間違えていないか?
関数名を間違えて入力するとエラー #NAME? が返されます。
入力例のNo.2では、スペルを誤っています。
DATEDIF関数は数式の入力時にガイドが出ません。
最初から最後まで手入力をする必要があるので、スペルミスをしがちです。
=datediff
スペルを正しく入力していれば、自動で半角大文字に修正されます。
=DATEDIF
数式は全角で入力しないように!!
DATEDIF関数の引数: 日付の書式を間違えていないか?
日付の入力が正しくないとエラー #NUM! が返されます。
または予期しない数値が返されます。
入力例のNo.3〜No.5は、日付の入力体裁を誤っているケースです。
=DATEDIF(1974/5/10, 2023/11/14, “Y”)
数式内に日付を入力するときは、ダブルクォーテーションで囲みます。
=DATEDIF(“1974/5/10”, “2023/11/14”, “Y”)
DATEDIF関数の引数: 開始日・終了日の順序を間違えていないか?
順序が正しくないとエラー #NUM! が返されます。
入力例のNo.6は、開始日と終了日が逆になっているケースです。
=DATEDIF(D7, C7, “Y”)
セル参照するときに間違いがち。日付を直接入力するときも同様です。
=DATEDIF(“2023/11/14”, “1974/5/10”, “Y”)
開始日には古い日付・終了日には新しい日付が入るようにします。
=DATEDIF(C7, D7, “Y”)
=DATEDIF(“1974/5/10”, “2023/11/14”, “Y”)
DATEDIF関数の引数: 単位の入力を間違えていないか?
引数: 単位 の入力を誤っていると #NAME? が返されます。
入力例のNo.7は、引数: 単位の入力体裁を誤っているパターンです。
=DATEDIF(C10, D10, Y)
引数: 単位は必ずダブルクォーテーションで囲みます。
=DATEDIF(C10, D10, “Y”)
1900年より古い日付を扱おうとしていないか?
引数に古い日付を使うと #VALUE! が返されます。
入力例のNo.8〜No.9は、開始日もしくは終了日が1900年より古い日付です。
標準的なExcelでは1900年1月1日より古い日付は利用できません。
まとめ
DATEDIF関数が使えない問題と、Excelブックの「1904年から計算する」設定は無関係です。
前半では、Excelブックの「1904年から計算する」設定の意味を解説しました。
後半では、DATEDIF関数がエラーを出す原因と対処方法を解説しました。
ExcelはWindows標準の1900年システムで利用しましょう。