Excelの日付計算を完全攻略|年齢・日数・営業日・年度を関数で自動化

スポンサーリンク

「社員の年齢を自動で計算したい」「プロジェクトの残り営業日を数えたい」。Excelで日付まわりの計算をしようとすると、どの関数を使えばいいか迷いますよね。

日付計算に使える関数はたくさんあります。しかし場面ごとに最適な関数は異なります。間違った関数を選ぶと、計算結果がずれたり余計な手間が増えたりすることも。

この記事では、よくある4つの実務シーン別にベストな関数を早見表で整理しました。年齢・日数・営業日・年度、それぞれの計算方法をマスターしていきましょう。

Excel日付計算の関数早見表【結論から】

まずは結論です。「どの場面でどの関数を使えばいいか」を一覧表にまとめました。

やりたいことおすすめ関数数式の例
年齢を求めるDATEDIF関数=DATEDIF(A1,TODAY(),"Y")
2つの日付の日数差日付の引き算=B1-A1
営業日を数えるNETWORKDAYS関数=NETWORKDAYS(A1,B1)
月末日を求めるEOMONTH関数=EOMONTH(A1,0)
年度を判定するYEAR関数+IF関数=IF(MONTH(A1)>=4,YEAR(A1),YEAR(A1)-1)
期間の年数・月数DATEDIF関数=DATEDIF(A1,B1,"M")
休日パターンをカスタムNETWORKDAYS.INTL関数=NETWORKDAYS.INTL(A1,B1,11)

迷ったらこの表を見れば、使うべき関数がすぐにわかります。ここからは各シーンの詳しい使い方を順番に解説していきます。

年齢を自動計算する関数の使い分け

人事・総務の業務でよく出てくるのが年齢計算です。生年月日から「今日時点で何歳か」を自動で求める方法を見ていきましょう。

DATEDIF関数で年齢を求める基本

年齢計算でもっともシンプルなのがDATEDIF関数です。

=DATEDIF(生年月日, TODAY(), "Y")

第1引数に生年月日のセル、第2引数にTODAY関数、第3引数に "Y" を指定します。これで「満年齢」が数値で返ります。

たとえばセルA2に 1990/4/15 と入力されている場合、数式は次のとおりです。

=DATEDIF(A2, TODAY(), "Y")

2026年3月17日時点では 35 と表示されます。

DATEDIF関数の第3引数(単位)を変えると、年数以外の期間も求められます。

単位意味用途の例
“Y”期間の年数年齢計算
“M”期間の月数在籍月数の計算
“D”期間の日数経過日数の計算
“YM”年数を無視した月数「○年○ヶ月」の月部分
“MD”年数と月数を無視した日数「○年○ヶ月○日」の日部分

「○年○ヶ月」と表示したい場合は、次のように組み合わせます。

=DATEDIF(A2,TODAY(),"Y")&"年"&DATEDIF(A2,TODAY(),"YM")&"ヶ月"

DATEDIFの非公式サポート問題と代替策

DATEDIF関数には知っておくべき注意点があります。この関数はExcelの関数一覧やオートコンプリートに表示されません。

Microsoftの公式ドキュメントでも「既知の問題がある」と記載されています(出典: Microsoft公式)。もともとLotus 1-2-3との互換性のために残されている関数です。

NOTE

DATEDIF関数の "Y" 単位(年齢計算)は問題なく動作します。注意が必要なのは "MD" 単位で、まれに不正確な結果を返すことがあります。

年齢計算だけなら安心してDATEDIFを使ってOKです。ただし「念のためDATEDIFを避けたい」という方向けに代替策を紹介します。

代替策1: YEAR関数とIF関数を組み合わせる

=YEAR(TODAY())-YEAR(A2)-IF(DATE(YEAR(TODAY()),MONTH(A2),DAY(A2))>TODAY(),1,0)

ちょっと長いですが、やっていることはシンプルです。「今年の誕生日がまだ来ていなければ1を引く」という仕組みです。

代替策2: YEARFRAC関数+INT関数

=INT(YEARFRAC(A2,TODAY(),1))

YEARFRAC関数は「期間が1年に占める割合」を返します。これをINT関数で整数に切り捨てれば年齢になります。第3引数の 1 は「実日数ベース」の意味です。

方法数式の長さ精度おすすめ度
DATEDIF短い高い(”Y”単位)最もおすすめ
YEAR+IF長い高いDATEDIFを避けたい場合
YEARFRAC+INT短いやや低い(閏年で1日ずれる場合あり)簡易計算向き

YEARFRAC関数との違い

YEARFRAC関数は「期間の年数」を小数で返す関数です。DATEDIF関数の "Y" は整数を返す点が異なります。

=YEARFRAC(A2, TODAY(), 1)

上の数式は 35.92... のような小数を返します。年齢の端数(勤続年数の精密計算など)が必要なときに便利です。

一方、満年齢のように整数で欲しいときはDATEDIFのほうがシンプルです。

日数を計算する関数の使い分け

「プロジェクトの残り日数」や「契約期間の日数」など、2つの日付の間の日数を数えたい場面を見ていきましょう。

日付の引き算でシンプルに日数を求める

もっとも簡単な方法は、日付どうしの引き算です。

=B2-A2

Excelの日付は内部的にシリアル値(1900年1月1日を1とした連番)で管理されています。そのため引き算するだけで日数差が求まります。

たとえばA2に 2026/4/1、B2に 2026/9/30 と入力して引き算すると、182 と表示されます。

TIP

結果が 182 ではなく日付(1900/7/1 など)で表示される場合は、セルの表示形式を「標準」に変更してください。

DAYS関数で日数を数える

DAYS関数は日数を求める専用の関数です。

=DAYS(終了日, 開始日)

引き算と同じ結果が得られます。ただし引数の順序に注意してください。第1引数が「終了日」、第2引数が「開始日」です。引き算とは逆の順番になります。

=DAYS(B2, A2)

DAYS関数のメリットは、文字列の日付にも対応している点です。=DAYS("2026/9/30", "2026/4/1") のように直接文字列を指定しても正しく計算できます(出典: Microsoft公式)。

方法数式メリット
引き算=B2-A2シンプル。計算が速い
DAYS関数=DAYS(B2,A2)文字列日付にも対応
DATEDIF(“D”)=DATEDIF(A2,B2,"D")月数・年数も同時に扱える

実務ではシンプルな引き算で十分なケースがほとんどです。文字列の日付を扱う場面ではDAYS関数を使ってみてください。

NETWORKDAYS関数で営業日を数える

「土日・祝日を除いた営業日だけを数えたい」。こんなときに使うのがNETWORKDAYS関数です。

=NETWORKDAYS(開始日, 終了日, 祝日リスト)

第3引数の祝日リストは省略可能です。省略すると土日だけが休みとして計算されます。

=NETWORKDAYS(A2, B2)

祝日も除外したい場合は、祝日の日付を別のセル範囲に入力しておきます。たとえばD2:D15に祝日を入力した場合は次のとおりです。

=NETWORKDAYS(A2, B2, D2:D15)

NOTE

NETWORKDAYS関数は開始日と終了日の両方を含めてカウントします。「4月1日から4月3日」は3日(月・火・水)です。引き算の B2-A2 は2日になる点が異なります。

NETWORKDAYS.INTL関数で休日パターンをカスタマイズ

「うちの会社は水曜と日曜が休み」のように、土日以外の休日パターンを設定したいケースもありますよね。そんなときはNETWORKDAYS.INTL関数を使います。

=NETWORKDAYS.INTL(開始日, 終了日, 休日パターン, 祝日リスト)

第3引数の休日パターンは数値で指定します。よく使うパターンは次のとおりです。

パターン番号休日使いどころ
1(既定)土曜・日曜一般企業
2日曜・月曜月曜定休の店舗
7金曜・土曜イスラム圏の企業
11日曜のみ土曜出勤の工場・小売

たとえば日曜のみ休みで営業日を数える場合はこうなります。

=NETWORKDAYS.INTL(A2, B2, 11)

月末日を求めるEOMONTH関数の日付計算

経理・請求業務で活躍するのが月末日の計算です。「今月の最終日は何日か」「翌々月末の支払期日はいつか」を自動で求めてみましょう。

EOMONTH関数の基本

EOMONTH関数は指定した月数後(または前)の月末日を返します。

=EOMONTH(開始日, 月数)

第2引数の月数で「何ヶ月後の月末か」を指定します。

数式意味結果の例(A2が2026/4/15の場合)
=EOMONTH(A2, 0)当月末2026/4/30
=EOMONTH(A2, 1)翌月末2026/5/31
=EOMONTH(A2, -1)前月末2026/3/31
=EOMONTH(A2, 2)翌々月末2026/6/30

翌月末・翌々月末の支払期日を計算する

請求書の支払条件が「翌月末払い」や「翌々月末払い」の場合、EOMONTH関数で期日を自動計算できます。

翌月末払い(月末締め)の場合

=EOMONTH(A2, 1)

翌々月末払い(月末締め)の場合

=EOMONTH(A2, 2)

月初日を求めたい場合

EOMONTH関数で前月末を求めて、1日を足すと当月1日になります。

=EOMONTH(A2, -1)+1

TIP

「月末の5営業日前」を求めたいときは、EOMONTH関数とWORKDAY関数を組み合わせます。=WORKDAY(EOMONTH(A2,0), -5, 祝日リスト) とすれば、月末から営業日ベースで5日前の日付が求まります。

年度を判定する関数テクニック

日本の企業や学校では「4月始まり」の年度を使うことが多いですよね。Excelには年度を直接返す関数はありませんが、YEAR関数IF関数を組み合わせれば簡単に求められます。

YEAR関数+IF関数で年度を求める

年度判定の基本の数式はこちらです。

=IF(MONTH(A2)>=4, YEAR(A2), YEAR(A2)-1)

考え方はシンプルです。「MONTH関数で月を取り出し、4月以降ならそのまま、3月以前なら1年引く」。これだけで4月始まりの年度が求まります。

日付MONTH(A2)判定年度の結果
2026/4/144以上 → そのまま2026
2026/9/3094以上 → そのまま2026
2027/3/3134未満 → 1年引く2026
2027/1/1514未満 → 1年引く2026

2026年4月から2027年3月まで、すべて「2026年度」と判定されるのがわかります。

4月始まりの年度またぎ処理

年度判定を使った実務パターンをいくつか紹介します。

「○○年度」と表示する

=IF(MONTH(A2)>=4,YEAR(A2),YEAR(A2)-1)&"年度"

上半期・下半期を判定する

4月〜9月を上半期、10月〜3月を下半期として判定します。

=IF(AND(MONTH(A2)>=4,MONTH(A2)<=9),"上半期","下半期")

四半期(Q1〜Q4)を判定する

4月始まりでQ1=4〜6月、Q2=7〜9月、Q3=10〜12月、Q4=1〜3月です。CHOOSE関数を使うとわかりやすく書けます。

=CHOOSE(MONTH(A2),4,4,4,1,1,1,2,2,2,3,3,3)

この数式は月の番号(1〜12)に応じてQ1〜Q4の数字を返します。「Q」を付けて表示したい場合はこうなります。

="Q"&CHOOSE(MONTH(A2),4,4,4,1,1,1,2,2,2,3,3,3)

NOTE

年度の開始月が4月以外の場合は、IF関数の条件を変更してください。たとえば10月始まりなら =IF(MONTH(A2)>=10, YEAR(A2), YEAR(A2)-1) です。

Excel日付計算の関数一覧と比較表

ここまで紹介した関数を含めて、日付計算で使う主要な関数を一覧にまとめました。

関数名機能構文主な用途
DATEDIF期間の年数・月数・日数=DATEDIF(開始日,終了日,単位)年齢計算・在籍期間
YEARFRAC期間の年数(小数)=YEARFRAC(開始日,終了日,基準)利息計算・勤続年数
DAYS2つの日付間の日数=DAYS(終了日,開始日)経過日数
DAYS360360日基準の日数=DAYS360(開始日,終了日,方式)会計計算
NETWORKDAYS営業日数=NETWORKDAYS(開始日,終了日,祝日)稼働日計算
NETWORKDAYS.INTL営業日数(カスタム休日)=NETWORKDAYS.INTL(開始日,終了日,パターン,祝日)変則シフトの稼働日
EOMONTH月末日=EOMONTH(開始日,月数)支払期日・締め日
EDATEN ヶ月後の同日=EDATE(開始日,月数)契約更新日
YEAR年を取り出す=YEAR(日付)年度判定
MONTH月を取り出す=MONTH(日付)月別集計
DAY日を取り出す=DAY(日付)月末日判定
TODAY今日の日付=TODAY()年齢計算の基準日
DATE年・月・日から日付を作成=DATE(年,月,日)日付の組み立て
DATEVALUE文字列を日付に変換=DATEVALUE(文字列)データ取り込み

この表をブックマークしておけば、日付計算で迷ったときにすぐ確認できます。

まとめ

Excelの日付計算は、場面に応じて最適な関数を選ぶのがポイントです。最後にもう一度、使い分けをおさらいしましょう。

DATEDIF関数は非公式サポートですが、年齢計算("Y" 単位)では問題なく動作します。気になる方は代替策(YEAR+IF、YEARFRAC+INT)も活用してください。

まずは自分の業務でよく使うパターンから試してみてください。一度数式を組んでしまえば、日付が変わるたびに手計算する必要がなくなりますよ。

関連記事

日付関数の個別解説も合わせてチェックしてみてください。

タイトルとURLをコピーしました