Excel日付関数の活用ガイド:基本的な関数からデータ分析まで

Excelの日付分析は、日付を文字列ではなくシリアル値として揃え、目的に合う関数を選ぶのが基本です。年月日から作るならDATE、今日ならTODAY、月単位の同日ならEDATE、月末ならEOMONTH、営業日数ならNETWORKDAYS、営業日後の日付ならWORKDAYを使います。最初に対象セルを選び、表示形式を「標準」に一時変更して整数が現れるか、=ISNUMBER(A2) がTRUEになるか確認してください。見た目が日付でも文字列なら計算結果が変わります。

目次

Excelが日付を保存する仕組み

Excelは日付を連続する数値、時刻を1日未満の小数として保存し、セルの表示形式で年月日や時分秒に見せます。Windowsの既定の1900日付システムでは1900年1月1日が1です。表示形式を変えても内部値は変わりません。逆に「2026/7/17」という文字列は、地域設定や取り込み方法によって日付と認識されないことがあります。

日付列を点検するには =ISNUMBER(A2)、文字列なら =ISTEXT(A2) を使います。左寄せ・右寄せだけで判断しません。CSVや基幹システムからの取り込みでは、Power Queryで列のデータ型とロケールを指定する方が再現性があります。DATEVALUEは文字列を日付へ変換できますが、システムの日付形式に依存するため、YYYYMMDDのように構造が決まる値はLEFT、MID、RIGHTとDATEで組み立てる方が明確です。

DATEで安全に日付を組み立てる

DATEの構文は DATE(年,月,日) です。年・月・日がB2、C2、D2にあるなら、=DATE(B2,C2,D2) とします。年は4桁を使います。0~1899を指定すると1900が加算されるため、=DATE(26,7,17) は2026年ではなく1926年になります。入力規則で年を4桁に制限すると誤りを防げます。

=DATE(B2,C2,D2)
=DATE(LEFT(A2,4),MID(A2,5,2),RIGHT(A2,2))

DATEは月や日が範囲を超えると翌月・前月へ繰り上げ、繰り下げます。=DATE(2026,13,1) は2027年1月1日、=DATE(2026,8,0) は2026年7月31日です。この性質は月末計算に便利ですが、入力検証では「2026年2月31日」をエラーにせず3月へ補正してしまいます。入力値そのものの妥当性が必要なら、作成後のYEAR、MONTH、DAYが元入力と一致するか検査します。

TODAYとNOWで基準日を作る

TODAY()は現在の日付、NOW()は現在の日付と時刻を返します。どちらも再計算されるため、ブックを翌日に開くと結果が変わります。年齢、期限超過、当日一覧には適しますが、申請日や確定日を固定保存する用途には向きません。固定値が必要なら、承認フローや入力時刻を記録する仕組みを使い、TODAYの結果を証跡として扱いません。

=TODAY() // 現在の日付を返す
=TODAY()
=NOW()
=IF(B2<TODAY(),"期限超過","期限内")

結果が1日ずれる場合は、PCの時刻、タイムゾーン、Excel for the webを利用する環境の設定を確認します。NOWから日付だけを得るなら=INT(NOW())、時刻だけなら=MOD(NOW(),1)とできますが、表示形式も日付または時刻に設定します。

=NOW() // 現在の日付と時刻を返す

月単位の期日をEDATEとEOMONTHで計算する

EDATE(開始日,月数)は指定月数後の同じ日付を返し、契約更新日や定期点検日に向きます。EOMONTH(開始日,月数)は指定した月の末日を返し、締め日や月末残高に向きます。月数が正なら未来、負なら過去です。開始日は文字列を直書きせず、セル参照またはDATEの結果を使います。

=EDATE(A2,3)
=EOMONTH(A2,0)
=EOMONTH(A2,0)+1
=EOMONTH(A2,-1)+1
=YEAR(A1) // 年を返す

上から、3か月後の同日、当月末、翌月初、当月初です。1月31日の1か月後など、同じ日がない月ではEDATEはその月の末日になります。請求規則が「翌月末」なら=EOMONTH(A2,1)、「翌月の同日」なら=EDATE(A2,1)であり、目的が違います。月数が小数の場合は整数部分へ切り捨てられるため、月数列の入力規則も確認します。

=MONTH(A1) // 月を返す

営業日をNETWORKDAYSとWORKDAYで扱う

NETWORKDAYS(開始日,終了日,祝日)は、土日と指定した祝日を除く営業日数を返します。開始日と終了日の両方が営業日なら両端を含みます。WORKDAY(開始日,日数,祝日)は、指定営業日数後または前の日付を返します。祝日範囲は実際の日付値で作り、毎年更新します。

=DAY(A1) // 日を返す
=NETWORKDAYS(A2,B2,$H$2:$H$30)
=WORKDAY(A2,10,$H$2:$H$30)
=NETWORKDAYS.INTL(A2,B2,11,$H$2:$H$30)

週末が土日以外ならINTL版を使います。例の11は日曜のみを週末とするコードです。国・拠点・勤務体系で休日が違うため、祝日表へ説明列と適用年度を付けます。振替休日や会社休日を入れ忘れると結果は正しく見えても業務上誤ります。開始日から10営業日後という規則で開始日を1日目に含めるかは、仕様を確認して式を調整します。

集計用に年・月・曜日を取り出す

YEAR、MONTH、DAYは日付から各要素を返します。月別集計では、単にMONTHだけを使うと2025年7月と2026年7月が混ざります。ピボットテーブルで年と月をグループ化するか、=DATE(YEAR(A2),MONTH(A2),1) で月初日を作り、yyyy年m月の表示形式を設定すると、並べ替え可能な月キーになります。

=DATE(YEAR(A2),MONTH(A2),1)
=WEEKDAY(A2,2)
=TEXT(A2,"yyyy-mm")

WEEKDAY(A2,2)は月曜=1~日曜=7です。TEXTは表示用文字列を返すため、その結果は日付計算に使えません。グラフ軸や集計キーには日付値の月初を使い、ラベルだけ表示形式で整える方が安全です。ISO週が必要ならISOWEEKNUMを使い、年末年始にISO週年と暦年がずれる点を考慮します。

年齢と期間計算の注意点

単純な=(TODAY()-生年月日)/365では、うるう年と誕生日前後で誤差が出ます。満年齢ならDATEDIFを使う例がありますが、基準日が動くことに注意します。監査資料ではTODAYではなく基準日セルを固定し、その日付を明示します。日数差は終了日-開始日で計算でき、両端を含む日数なら+1するなど業務定義を式へ反映します。

=DATEDIF(A2,$B$1,"Y")
=B2-A2
=B2-A2+1

エラーを切り分ける

  • #VALUE!:開始日が文字列、または地域設定と合わない日付文字列
  • #NUM!:対応範囲外の日付、または関数結果が無効
  • #####:列幅不足、または負の日付・時刻
  • 想定外の1900年代:DATEの年を2桁で指定
  • 月別集計の重複:MONTHだけで年を区別していない

修正は原列を上書きせず、隣の検証列で変換結果と件数を比較します。最小日、最大日、空白数、エラー数、年度別件数を確認し、異常な未来日・過去日がないかを見ます。文字列を日付へ変換したら、コピーして値貼り付けする前に元データと変換式を保存します。

実務での検証手順

少なくとも月末、うるう日、年末年始、祝日、空白、文字列日付をテスト行に用意します。期待値を手計算またはカレンダーで確認し、式を列全体へ展開します。表示形式を変えてもシリアル値が正しいこと、保存・再オープン後も同じこと、Excelデスクトップ版とWeb版で必要な関数が使えることを確認します。

分析結果には「基準日」「休日表の版」「週末定義」「両端を含むか」を記載します。同じ日付関数でも前提が違えば答えが変わるためです。関数名を覚えるだけでなく、内部値、基準、境界条件、表示形式を一組として管理すると、月次更新でも壊れにくい表になります。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次