「社員の年齢を自動で計算したい」「プロジェクトの残り営業日を数えたい」。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/1 | 4 | 4以上 → そのまま | 2026 |
| 2026/9/30 | 9 | 4以上 → そのまま | 2026 |
| 2027/3/31 | 3 | 4未満 → 1年引く | 2026 |
| 2027/1/15 | 1 | 4未満 → 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(開始日,終了日,基準) | 利息計算・勤続年数 |
| DAYS | 2つの日付間の日数 | =DAYS(終了日,開始日) | 経過日数 |
| DAYS360 | 360日基準の日数 | =DAYS360(開始日,終了日,方式) | 会計計算 |
| NETWORKDAYS | 営業日数 | =NETWORKDAYS(開始日,終了日,祝日) | 稼働日計算 |
| NETWORKDAYS.INTL | 営業日数(カスタム休日) | =NETWORKDAYS.INTL(開始日,終了日,パターン,祝日) | 変則シフトの稼働日 |
| EOMONTH | 月末日 | =EOMONTH(開始日,月数) | 支払期日・締め日 |
| EDATE | N ヶ月後の同日 | =EDATE(開始日,月数) | 契約更新日 |
| YEAR | 年を取り出す | =YEAR(日付) | 年度判定 |
| MONTH | 月を取り出す | =MONTH(日付) | 月別集計 |
| DAY | 日を取り出す | =DAY(日付) | 月末日判定 |
| TODAY | 今日の日付 | =TODAY() | 年齢計算の基準日 |
| DATE | 年・月・日から日付を作成 | =DATE(年,月,日) | 日付の組み立て |
| DATEVALUE | 文字列を日付に変換 | =DATEVALUE(文字列) | データ取り込み |
この表をブックマークしておけば、日付計算で迷ったときにすぐ確認できます。
まとめ
Excelの日付計算は、場面に応じて最適な関数を選ぶのがポイントです。最後にもう一度、使い分けをおさらいしましょう。
- 年齢を求める → DATEDIF関数(
"Y"単位)が最もシンプル - 日数を数える → 日付の引き算が基本。営業日ならNETWORKDAYS関数
- 月末日を求める → EOMONTH関数一択
- 年度を判定する → YEAR関数+IF関数で
=IF(MONTH(A2)>=4,YEAR(A2),YEAR(A2)-1)
DATEDIF関数は非公式サポートですが、年齢計算("Y" 単位)では問題なく動作します。気になる方は代替策(YEAR+IF、YEARFRAC+INT)も活用してください。
まずは自分の業務でよく使うパターンから試してみてください。一度数式を組んでしまえば、日付が変わるたびに手計算する必要がなくなりますよ。
関連記事
日付関数の個別解説も合わせてチェックしてみてください。
