- 技術 💻
Excel日付計算の関数一覧|月末・営業日・年齢・期間の数式早見表
Excelの日付計算は、「日数は引き算、月数と年数はDATEDIF、月末はEOMONTH、営業日はWORKDAYとNETWORKDAYS」と目的で関数を選ぶと迷いません。 日付の正体は連番の数値(シリアル値)なので、日数だけなら引き算で求められます。月や年、営業日のように暦のルールが関わるところで関数を使います。
この記事では、やりたいことから数式を引ける30行の早見表と、月末日・うるう年をまたぐ境界日での計算結果をまとめました。数式はそのままコピーして使えます。
確認環境:計算結果は LibreOffice Calc 24.2.7.2 のヘッドレス実行で求めた値です(確認日 2026-10-05)。関数の仕様と注意点は Microsoft サポートの各関数のページの記載にもとづいています。
この記事の結論
| 求めたいもの | 使うもの | 基本の数式 |
|---|---|---|
| 日数 | 引き算 | =終了日-開始日 |
| 満年数・満月数(年齢、勤続年数) | DATEDIF | =DATEDIF(開始日,終了日,"Y") |
| Nか月後の同じ日 | EDATE | =EDATE(開始日,月数) |
| 月末、月初、翌月○日 | EOMONTH | =EOMONTH(開始日,月数) |
| N営業日後の日付 | WORKDAY | =WORKDAY(開始日,日数,休日) |
| 2つの日付の間の営業日数 | NETWORKDAYS | =NETWORKDAYS(開始日,終了日,休日) |
| 土日以外が休みの営業日 | WORKDAY.INTL/NETWORKDAYS.INTL | =WORKDAY.INTL(開始日,日数,週末,休日) |
Excel日付計算の数式早見表(30行)
次のセルに値が入っているものとして、数式と結果例を並べます。2026年10月5日は月曜日です。
| セル | 内容 | 値 |
|---|---|---|
| A2 | 基準日 | 2026/10/05 |
| B2 | 生年月日 | 1990/04/15 |
| C2 | 入社日 | 2015/04/01 |
| D2 | 期限 | 2026/12/25 |
| H2:H7 | 休日リスト | 2026/10/12、11/03、11/23、12/29、12/30、12/31 |
| No. | やりたいこと | 数式 | 結果例 |
|---|---|---|---|
| 1 | 2つの日付の間の日数 | =D2-A2 |
81 |
| 2 | 両端を含めた日数 | =D2-A2+1 |
82 |
| 3 | 年末までの残り日数 | =DATE(YEAR(A2),12,31)-A2 |
87 |
| 4 | 満年齢 | =DATEDIF(B2,A2,"Y") |
36 |
| 5 | 勤続年数(○年○か月) | =DATEDIF(C2,A2,"Y")&"年"&DATEDIF(C2,A2,"YM")&"か月" |
11年6か月 |
| 6 | 満月数 | =DATEDIF(C2,A2,"M") |
138 |
| 7 | 次の誕生日 | =EDATE(B2,(DATEDIF(B2,A2,"Y")+1)*12) |
2027/04/15 |
| 8 | 30日後 | =A2+30 |
2026/11/04 |
| 9 | 1か月後の同じ日 | =EDATE(A2,1) |
2026/11/05 |
| 10 | 3か月前の同じ日 | =EDATE(A2,-3) |
2026/07/05 |
| 11 | 1年後の同じ日 | =EDATE(A2,12) |
2027/10/05 |
| 12 | 当月末 | =EOMONTH(A2,0) |
2026/10/31 |
| 13 | 翌月末 | =EOMONTH(A2,1) |
2026/11/30 |
| 14 | 前月末 | =EOMONTH(A2,-1) |
2026/09/30 |
| 15 | 当月1日 | =EOMONTH(A2,-1)+1 |
2026/10/01 |
| 16 | 翌月1日 | =EOMONTH(A2,0)+1 |
2026/11/01 |
| 17 | 翌月10日 | =EOMONTH(A2,0)+10 |
2026/11/10 |
| 18 | 翌々月10日 | =EOMONTH(A2,1)+10 |
2026/12/10 |
| 19 | 20日締めの翌月末 | =EOMONTH(A2,IF(DAY(A2)<=20,1,2)) |
2026/11/30 |
| 20 | その月の日数 | =DAY(EOMONTH(A2,0)) |
31 |
| 21 | 5営業日後 | =WORKDAY(A2,5,$H$2:$H$7) |
2026/10/13 |
| 22 | 5営業日前 | =WORKDAY(A2,-5,$H$2:$H$7) |
2026/09/28 |
| 23 | 期限までの営業日数 | =NETWORKDAYS(A2,D2,$H$2:$H$7) |
57 |
| 24 | 当月の最終営業日 | =WORKDAY(EOMONTH(A2,0)+1,-1,$H$2:$H$7) |
2026/10/30 |
| 25 | 当月の最初の営業日 | =WORKDAY(EOMONTH(A2,-1),1,$H$2:$H$7) |
2026/10/01 |
| 26 | 日曜だけ休みで5営業日後 | =WORKDAY.INTL(A2,5,11,$H$2:$H$7) |
2026/10/10 |
| 27 | 水曜と日曜が休みの営業日数 | =NETWORKDAYS.INTL(A2,D2,"0010001",$H$2:$H$7) |
56 |
| 28 | 年度(4月始まり) | =YEAR(EDATE(A2,-3)) |
2026 |
| 29 | 四半期(4月始まり) | =ROUNDUP(MONTH(EDATE(A2,-3))/3,0) |
3 |
| 30 | 曜日 | =TEXT(A2,"aaa") |
月 |
結果が日付になる数式は、セルの表示形式を「日付」にすると表の形で表示されます。30行目の曜日は、Calcでは書式コードの先頭に日本語の指定を付けた =TEXT(A2,"[$-411]aaa") で「月」になることを確かめました。"aaaa" にすると「月曜日」です。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Excel日付計算の関数一覧|月末・営業日・年齢・期間の数式早見表」
表計算ソフトに貼れるタブ区切り版
A2・B2・C2・D2・H2:H7に上の値を入れたうえで、J1など表と重ならない位置に貼り付けてください。数式の列はそのまま計算されます。
やりたいこと 数式 結果例
2つの日付の間の日数 =D2-A2 81
両端を含めた日数 =D2-A2+1 82
年末までの残り日数 =DATE(YEAR(A2),12,31)-A2 87
満年齢 =DATEDIF(B2,A2,"Y") 36
勤続年数(○年○か月) =DATEDIF(C2,A2,"Y")&"年"&DATEDIF(C2,A2,"YM")&"か月" 11年6か月
満月数 =DATEDIF(C2,A2,"M") 138
次の誕生日 =EDATE(B2,(DATEDIF(B2,A2,"Y")+1)*12) 2027/04/15
30日後 =A2+30 2026/11/04
1か月後の同じ日 =EDATE(A2,1) 2026/11/05
3か月前の同じ日 =EDATE(A2,-3) 2026/07/05
1年後の同じ日 =EDATE(A2,12) 2027/10/05
当月末 =EOMONTH(A2,0) 2026/10/31
翌月末 =EOMONTH(A2,1) 2026/11/30
前月末 =EOMONTH(A2,-1) 2026/09/30
当月1日 =EOMONTH(A2,-1)+1 2026/10/01
翌月1日 =EOMONTH(A2,0)+1 2026/11/01
翌月10日 =EOMONTH(A2,0)+10 2026/11/10
翌々月10日 =EOMONTH(A2,1)+10 2026/12/10
20日締めの翌月末 =EOMONTH(A2,IF(DAY(A2)<=20,1,2)) 2026/11/30
その月の日数 =DAY(EOMONTH(A2,0)) 31
5営業日後 =WORKDAY(A2,5,$H$2:$H$7) 2026/10/13
5営業日前 =WORKDAY(A2,-5,$H$2:$H$7) 2026/09/28
期限までの営業日数 =NETWORKDAYS(A2,D2,$H$2:$H$7) 57
当月の最終営業日 =WORKDAY(EOMONTH(A2,0)+1,-1,$H$2:$H$7) 2026/10/30
当月の最初の営業日 =WORKDAY(EOMONTH(A2,-1),1,$H$2:$H$7) 2026/10/01
日曜だけ休みで5営業日後 =WORKDAY.INTL(A2,5,11,$H$2:$H$7) 2026/10/10
水曜と日曜が休みの営業日数 =NETWORKDAYS.INTL(A2,D2,"0010001",$H$2:$H$7) 56
年度(4月始まり) =YEAR(EDATE(A2,-3)) 2026
四半期(4月始まり) =ROUNDUP(MONTH(EDATE(A2,-3))/3,0) 3
曜日 =TEXT(A2,"aaa") 月
似た関数の違いと選び方
| 比べる関数 | 違い | 選び方 |
|---|---|---|
| 引き算 と DATEDIF の "D" | どちらも日数。引き算は開始日が後でも負の数で返り、DATEDIFはエラーになる | 日数は引き算で足りる |
| EDATE と EOMONTH | EDATEは「同じ日」、EOMONTHは「月の末日」を返す | 月末基準の日付はEOMONTH |
| WORKDAY と NETWORKDAYS | WORKDAYは日付を返し、NETWORKDAYSは日数を返す | 納期を出すならWORKDAY、日数を数えるならNETWORKDAYS |
| WORKDAY と WORKDAY.INTL | INTLは休みの曜日を自由に指定できる | 土日休みならWORKDAY、それ以外はINTL |
| 条件 | 選ぶもの |
|---|---|
| 「何日あるか」を知りたい | 引き算 |
| 「満何年・満何か月か」を知りたい | DATEDIF の "Y" "M" "YM" |
| 開始日が月末で、毎月の月末を求めたい | EOMONTH(EDATEを繰り返さない) |
| 毎月15日のように、同じ日を求めたい | EDATE |
| 土日と祝日を除いて数えたい | WORKDAY/NETWORKDAYS+休日リスト |
| 定休日が水曜など土日以外 | WORKDAY.INTL/NETWORKDAYS.INTL |
日数を求める:引き算と日付の正体
Excelは日付を連番の数値として扱います。Microsoft サポートのページには、1900年1月1日がシリアル値1と書かれています。Calcで2026年10月5日を数値にすると46300でした。
=D2-A2 → 81
=DAYS(D2,A2) → 81
=D2-A2+1 → 82
=A2+30 → 2026/11/04
=DATE(2024,3,1)-DATE(2024,2,28) → 2(うるう年)
=DATE(2026,3,1)-DATE(2026,2,28) → 1
引き算は「終了日−開始日」で、開始日そのものは数えません。開始日も1日目として数えるなら、+1 を足します。DAYS関数は引数の順番が「終了日, 開始日」です。
8桁の数字や文字列を日付に直すときは、年・月・日を切り出してDATE関数に渡します。F2に数値の20261005が入っている場合です。
=DATE(LEFT(F2,4),MID(F2,5,2),RIGHT(F2,2)) → 2026/10/05
=TEXT(F2,"0000-00-00")*1 → 2026/10/05
DATE関数は、月や日がはみ出した値も暦に合わせて繰り上げ・繰り下げます。
=DATE(2026,13,1) → 2027/01/01
=DATE(2026,3,0) → 2026/02/28
=DATE(2026,1+1,31) → 2026/03/03
3つ目は「1月31日の1か月後」を月に1を足して求めたつもりの式です。2月31日は無いので、3月3日まで繰り上がりました。月を足すときはDATEではなくEDATEを使う理由がここにあります。
月数・年数を求める:DATEDIF
=DATEDIF(開始日,終了日,単位) の単位は6種類です(Microsoft サポートの DATEDIF 関数のページ)。
| 単位 | 返すもの | 2015/04/01 → 2026/10/05 の結果 |
|---|---|---|
| "Y" | 満年数 | 11 |
| "M" | 満月数 | 138 |
| "D" | 日数 | 引き算と同じ |
| "YM" | 年を除いた月数 | 6 |
| "MD" | 月と年を除いた日数 | 4 |
| "YD" | 年を除いた日数 | 187 |
年齢と勤続年数
=DATEDIF(B2,A2,"Y") → 36
=DATEDIF(C2,A2,"Y")&"年"&DATEDIF(C2,A2,"YM")&"か月" → 11年6か月
=DATEDIF(DATE(2025,10,5),DATE(2026,10,5),"Y") → 1
=DATEDIF(DATE(2025,10,6),DATE(2026,10,5),"Y") → 0
DATEDIFは「満」で数えます。1年後の同じ日になって初めて1が返り、1日手前では0です。
2月29日生まれの年齢
| 開始日 | 終了日 | "Y" の結果 |
|---|---|---|
| 2000/02/29 | 2026/02/28 | 25 |
| 2000/02/29 | 2026/03/01 | 26 |
| 2000/02/29 | 2028/02/29 | 28 |
うるう年でない年は、3月1日に年齢が1つ上がる計算になりました。2月28日の時点で上げたい規程の場合は、この境界を確かめてから式を決めます。
"MD" の注意点と代わりの数式
Microsoft サポートの DATEDIF 関数のページには、"MD" は既知の制限があるため使用をおすすめしない、結果が負の値・ゼロ・不正確な値になる場合がある、と書かれています。Calcでも月末をまたぐ日付で負の値を確認できました。
| 開始日 | 終了日 | "M" | "MD" | Microsoftのページの代わりの式 | EDATEを使う式 |
|---|---|---|---|---|---|
| 2026/01/15 | 2026/03/10 | 1 | 23 | 9 | 23 |
| 2026/01/15 | 2026/03/20 | 2 | 5 | 19 | 5 |
| 2026/01/31 | 2026/02/28 | 0 | 28 | 27 | 28 |
| 2026/01/31 | 2026/03/01 | 1 | -2 | 0 | 1 |
| 2024/01/31 | 2024/03/01 | 1 | -1 | 0 | 1 |
| 2000/02/29 | 2026/03/01 | 312 | 0 | 0 | 1 |
| 2025/10/06 | 2026/10/05 | 11 | 29 | 4 | 29 |
2つの代わりの式は次のとおりです(開始日がA2、終了日がB2の場合)。
Microsoftのページの式: =B2-DATE(YEAR(B2),MONTH(B2),1)
EDATEを使う式: =B2-EDATE(A2,DATEDIF(A2,B2,"M"))
Microsoftのページの式は、終了日からその月の1日を引く式です。開始日を使わないので、開始日が月の1日のときに「満月数の残りの日数」と一致します(2015/04/01 → 2026/10/05 では "MD" もこの式も 4)。
開始日が月の途中のときは、EDATEを使う式が向いています。「開始日から満月数だけ進めた日」を終了日から引くので、負の値になりません。1月31日から3月1日は、1か月後が2月28日、そこから1日で「1か月と1日」になります。
開始日が終了日より後のとき
Microsoft サポートのページでは、開始日が終了日より後だと #NUM! になると説明されています。Calcではエラー(Err:502)になりました。順番が入れ替わる可能性がある表では、=DATEDIF(MIN(A2,B2),MAX(A2,B2),"M") のように小さいほうを開始日にします。
月末と月初を求める:EOMONTHとEDATEの違い
=EOMONTH(開始日,月) は、指定した月数だけ前後した月の最終日を返します。=EDATE(開始日,月) は、指定した月数だけ前後した同じ日を返します。
1月31日の1か月後はどうなるか
| 数式 | 結果 | 補足 |
|---|---|---|
=EDATE(DATE(2026,1,31),1) |
2026/02/28 | 2月31日は無いので月末に寄る |
=EOMONTH(DATE(2026,1,31),1) |
2026/02/28 | 月末 |
=EDATE(DATE(2024,1,31),1) |
2024/02/29 | うるう年 |
=EDATE(DATE(2026,1,30),1) |
2026/02/28 | 30日も月末に寄る |
=EDATE(DATE(2026,1,29),1) |
2026/02/28 | 29日も月末に寄る |
=EDATE(DATE(2026,1,28),1) |
2026/02/28 | 同じ日 |
=EDATE(DATE(2026,2,28),1) |
2026/03/28 | 月末ではなく28日のまま |
=EOMONTH(DATE(2026,2,28),1) |
2026/03/31 | 月末 |
=EDATE(DATE(2026,1,31),2) |
2026/03/31 | 元の日付から2か月 |
=EDATE(EDATE(DATE(2026,1,31),1),1) |
2026/03/28 | 1か月ずつ2回 |
=EDATE(DATE(2024,2,29),12) |
2025/02/28 | うるう日の1年後 |
=EDATE(DATE(2024,2,29),48) |
2028/02/29 | 4年後はうるう日に戻る |
=DATE(2026,1,31)+30 |
2026/03/02 | 30日後は翌々月になる |
EDATEは、一度月末に寄ると元の31日には戻りません。 1月31日から毎月の日付を作るとき、前の月の結果にEDATEを重ねると3月が28日になります。元の日付から EDATE(開始日,1)、EDATE(開始日,2) と月数を増やすか、月末がほしいならEOMONTHを使います。
月末を基準にした日付の作り方
EOMONTHは月末を返すので、そこに日数を足すと「翌月○日」が作れます。
=EOMONTH(A2,0) → 2026/10/31(当月末)
=EOMONTH(A2,-1)+1 → 2026/10/01(当月1日)
=EOMONTH(A2,0)+10 → 2026/11/10(翌月10日)
=EOMONTH(A2,1)+10 → 2026/12/10(翌々月10日)
=EOMONTH(DATE(2026,12,10),1) → 2027/01/31(年をまたぐ)
=DAY(EOMONTH(A2,0)) → 31(その月の日数)
当月1日は =DATE(YEAR(A2),MONTH(A2),1)、当月末は =DATE(YEAR(A2),MONTH(A2)+1,0) でも同じ結果(2026/10/01、2026/10/31)になりました。
うるう年の判定
2月の末日が29日かどうかで判定できます。
=DAY(EOMONTH(DATE(2024,2,1),0)) → 29
=DAY(EOMONTH(DATE(2026,2,1),0)) → 28
=DAY(EOMONTH(DATE(2028,2,1),0)) → 29
=DAY(EOMONTH(DATE(2100,2,1),0)) → 28
=IF(DAY(EOMONTH(DATE(2028,2,1),0))=29,"うるう年","平年") → うるう年
2100年は4で割り切れますが平年です。自分で割り算の条件を書くより、EOMONTHに任せると取りこぼしがありません。
営業日を求める:WORKDAYとNETWORKDAYS
NETWORKDAYSは開始日と終了日の両方を数える
=NETWORKDAYS(開始日,終了日,[休日]) は、土日と指定した休日を除いた日数を返します。引き算と違い、開始日と終了日の両方を数えます。
| 数式 | 結果 | 補足 |
|---|---|---|
=NETWORKDAYS(DATE(2026,10,5),DATE(2026,10,5)) |
1 | 同じ日(月曜)で1 |
=NETWORKDAYS(DATE(2026,10,5),DATE(2026,10,9)) |
5 | 月曜から金曜 |
=DATE(2026,10,9)-DATE(2026,10,5) |
4 | 引き算は4 |
=NETWORKDAYS(DATE(2026,10,5),DATE(2026,10,9))-1 |
4 | 開始日を数えない場合 |
=NETWORKDAYS(DATE(2026,10,3),DATE(2026,10,4)) |
0 | 土曜から日曜 |
=NETWORKDAYS(DATE(2026,10,9),DATE(2026,10,5)) |
-5 | 開始日が後だと負の数 |
=NETWORKDAYS(DATE(2026,10,1),DATE(2026,10,31)) |
22 | 10月の平日 |
=NETWORKDAYS(DATE(2026,10,1),DATE(2026,10,31),$H$2:$H$7) |
21 | 10/12を休日として除く |
=NETWORKDAYS(DATE(2026,10,12),DATE(2026,10,12),$H$2:$H$7) |
0 | 休日だけの期間 |
=NETWORKDAYS(DATE(2026,12,28),DATE(2027,1,4),$H$2:$H$7) |
3 | 12/28、1/1、1/4 |
「作業にかかる日数」は両端を数える形が合い、「今日から期限まであと何営業日」は開始日を数えない形(-1)が合います。どちらの数え方かを決めてから式を選びます。
最後の行で1月1日が営業日として数えられているのは、休日リストに2027年の日付を入れていないためです。年をまたぐ計算では、翌年の休日もリストに足します。
WORKDAYは開始日の翌営業日から数える
=WORKDAY(開始日,日数,[休日]) は、開始日から指定した営業日数だけ前後した日付を返します。
| 数式 | 結果 | 補足 |
|---|---|---|
=WORKDAY(DATE(2026,10,9),1) |
2026/10/12 | 金曜の1営業日後は月曜 |
=WORKDAY(DATE(2026,10,9),1,$H$2:$H$7) |
2026/10/13 | 10/12が休日なので火曜 |
=WORKDAY(DATE(2026,10,5),5) |
2026/10/12 | 月曜の5営業日後は翌週の月曜 |
=WORKDAY(DATE(2026,10,5),-1) |
2026/10/02 | 負の数で前の営業日 |
=WORKDAY(DATE(2026,10,5),0) |
2026/10/05 | 0は開始日のまま |
=WORKDAY(DATE(2026,10,3),0) |
2026/10/03 | 土曜でも動かない |
=WORKDAY(DATE(2026,10,3)-1,1) |
2026/10/05 | 土曜なら次の月曜へ |
=WORKDAY(DATE(2026,10,5)-1,1) |
2026/10/05 | 営業日ならその日のまま |
=WORKDAY(DATE(2026,10,12)-1,1,$H$2:$H$7) |
2026/10/13 | 休日なら次の営業日へ |
=WORKDAY(DATE(2026,10,3)+1,-1) |
2026/10/02 | 土曜なら前の金曜へ |
=WORKDAY(DATE(2026,10,5),1.9) |
2026/10/06 | 日数の小数は切り捨て |
日数に0を渡しても、休日を営業日にずらしてはくれません。「その日が休みなら次の営業日」は =WORKDAY(日付-1,1,休日)、「休みなら前の営業日」は =WORKDAY(日付+1,-1,休日) と書きます。早見表の「当月の最終営業日」「当月の最初の営業日」はこの形を使っています。
土日以外が休みのとき:WORKDAY.INTLとNETWORKDAYS.INTL
=WORKDAY.INTL(開始日,日数,[週末],[休日]) と =NETWORKDAYS.INTL(開始日,終了日,[週末],[休日]) は、第3引数で休みの曜日を指定します。指定の方法は番号と文字列の2通りです。
週末番号の一覧
番号と曜日の対応は Microsoft サポートの WORKDAY.INTL 関数のページの表です。右の2列は、Calcで求めた計算結果です。
| 週末番号 | 休みの曜日 | 2026/10/05(月)の5営業日後 | 2026年10月の営業日数 |
|---|---|---|---|
| 1(省略時) | 土曜、日曜 | 2026/10/12 | 22 |
| 2 | 日曜、月曜 | 2026/10/10 | 23 |
| 3 | 月曜、火曜 | 2026/10/11 | 23 |
| 4 | 火曜、水曜 | 2026/10/12 | 23 |
| 5 | 水曜、木曜 | 2026/10/12 | 22 |
| 6 | 木曜、金曜 | 2026/10/12 | 21 |
| 7 | 金曜、土曜 | 2026/10/12 | 21 |
| 11 | 日曜のみ | 2026/10/10 | 27 |
| 12 | 月曜のみ | 2026/10/10 | 27 |
| 13 | 火曜のみ | 2026/10/11 | 27 |
| 14 | 水曜のみ | 2026/10/11 | 27 |
| 15 | 木曜のみ | 2026/10/11 | 26 |
| 16 | 金曜のみ | 2026/10/11 | 26 |
| 17 | 土曜のみ | 2026/10/11 | 26 |
8〜10の番号はありません。数式は =WORKDAY.INTL(DATE(2026,10,5),5,番号) と =NETWORKDAYS.INTL(DATE(2026,10,1),DATE(2026,10,31),番号) です。
週末文字列の一覧
番号の表に無い組み合わせ(水曜と日曜など)は、7文字の文字列で指定します。左から月・火・水・木・金・土・日の順で、1が休み、0が営業日です。
| 週末文字列 | 休みの曜日 | 5営業日後 | 10月の営業日数 |
|---|---|---|---|
| "0000011" | 土曜、日曜(番号1と同じ) | 2026/10/12 | 22 |
| "0000001" | 日曜のみ(番号11と同じ) | 2026/10/10 | 27 |
| "0010001" | 水曜、日曜 | 2026/10/12 | 23 |
| "1000001" | 月曜、日曜 | 2026/10/10 | 23 |
| "0000000" | 休みなし | 2026/10/10 | 31 |
| "1111111" | 毎日休み | #VALUE! | 0 |
| "00011"(5文字) | 長さが合わない | #VALUE! | #VALUE! |
Microsoft サポートのページには、文字列の長さが7文字でない場合や 0 と 1 以外の文字を含む場合は #VALUE! になること、NETWORKDAYS.INTLで "1111111" を指定すると常に 0 が返ることが書かれています。
休日リストと組み合わせた例です。
=WORKDAY.INTL(DATE(2026,10,5),5,"0010001",$H$2:$H$7) → 2026/10/13
水曜・日曜と10/12を除いて数えるので、6日・8日・9日・10日・13日の5日目で13日になります。
休日リスト(祝日リスト)の作り方
WORKDAY・NETWORKDAYSの最後の引数には、休みにしたい日付を並べたセル範囲を渡します。祝日はExcelが自動で判定しないので、自分で用意します。
- 休日用のシートを1枚作り、A列に日付を縦に並べる。 B列に名称を書いておくと見直しやすくなります。
- 国民の祝日を入れる。 内閣府の「国民の祝日について」のページで、昭和30年(1955年)から令和9年(2027年)までの祝日が CSV 形式(syukujitsu.csv)で公開されています。
- 会社の休日(年末年始、創立記念日など)を同じ列に足す。
- 数式では絶対参照(
$H$2:$H$7)か、範囲に付けた名前で指定する。 数式を下にコピーしても範囲がずれません。 - 年をまたぐ計算に備えて、翌年分まで入れておく。
この記事で使った休日リストです。
日付 名称
2026/10/12 スポーツの日
2026/11/03 文化の日
2026/11/23 勤労感謝の日
2026/12/29 年末休業
2026/12/30 年末休業
2026/12/31 年末休業
10月に当たる休日は10月12日の1日だけなので、10月の営業日数は、この1日だけを渡した =NETWORKDAYS(DATE(2026,10,1),DATE(2026,10,31),DATE(2026,10,12)) でも、リスト全体(H2:H7)を渡した式でも同じ21でした。期間の外にある日付は結果に影響しません。
年度・四半期・曜日を求める
=YEAR(EDATE(A2,-3)) → 2026(4月始まりの年度)
=YEAR(A2)-(MONTH(A2)<4) → 2026(同じ結果になる別の書き方)
=ROUNDUP(MONTH(A2)/3,0) → 4(1月始まりの四半期)
=ROUNDUP(MONTH(EDATE(A2,-3))/3,0) → 3(4月始まりの四半期)
=MOD(MONTH(A2)-4,12)+1 → 7(年度の何か月目か)
=WEEKDAY(A2) → 2(日曜が1)
=WEEKDAY(A2,2) → 1(月曜が1)
=CHOOSE(WEEKDAY(A2),"日","月","火","水","木","金","土") → 月
=ISOWEEKNUM(A2) → 41
=A2-DATE(YEAR(A2),1,0) → 278(年初からの通算日)
4月始まりの年度は、日付を3か月戻してから年を取り出すと1つの式で書けます。開始月が違う場合は、戻す月数を「開始月−1」に変えます。
確かめて分かったこと
- 1月31日の1か月後は、EDATEでもEOMONTHでも2月28日。違いが出るのはその次の月。 EDATEを重ねると3月28日、EOMONTHなら3月31日でした。
=DATE(2026,1+1,31)は3月3日になる。 月に1を足す書き方は、月末の日付で翌々月にはみ出します。- DATEDIFの "MD" は、2026/01/31 → 2026/03/01 で -2 になった。 Microsoftのページの注意書きどおり、月末をまたぐ日付で負の値が出ます。
- Microsoftのページにある代わりの式は、開始日を見ない式。 開始日が月の途中だと "MD" とは別の値になるので、開始日からの端数がほしいときはEDATEを使う式が合います。
- NETWORKDAYSは同じ日どうしで1を返す。 月曜から金曜は5で、引き算の4より1多くなります。
WORKDAY(日付,0)は休日でも日付を動かさない。 営業日に寄せるには、1日戻してから1営業日進めます。- 2月29日生まれは、平年の3月1日に満年齢が上がる計算になった。
よくある質問
Q. Excelで2つの日付の日数を計算するには?
A. 終了日から開始日を引きます。=D2-A2 で81のように日数が返ります。開始日も数えるなら +1 を足します。
Q. DATEDIFとDAYSの違いは? A. DAYSは日数だけを返し、DATEDIFは単位を変えて満年数・満月数も返せます。日数だけなら引き算かDAYS、年齢や勤続年数はDATEDIFの "Y" を使います。
Q. EDATEとEOMONTHの違いは? A. EDATEは同じ日、EOMONTHは月の末日を返します。開始日が2月28日のとき、1か月後はEDATEが3月28日、EOMONTHが3月31日です。
Q. 営業日の計算で祝日が除かれないときは? A. 第3引数(INTLでは第4引数)に休日リストの範囲を指定します。WORKDAYとNETWORKDAYSが自動で除くのは土曜と日曜だけです。
Q. DATEDIFでエラーになって計算できないときは? A. 開始日が終了日より後になっていないかを確かめます。順番が入れ替わる表では、MINとMAXで小さいほうを開始日にします。
まとめ
- 日数は引き算、月数と年数はDATEDIF、月末はEOMONTH、営業日はWORKDAYとNETWORKDAYS。
- 月を足すときはEDATE。 DATEの月に足すと、月末の日付で翌々月にはみ出す。
- 月末を毎月求めるならEOMONTH。 EDATEは一度28日に寄ると31日に戻らない。
- DATEDIFの "MD" は避け、
=終了日-EDATE(開始日,DATEDIF(開始日,終了日,"M"))を使う。 - NETWORKDAYSは両端を数える。 開始日を数えないなら -1。
- 休みの日を営業日に寄せるのは
WORKDAY(日付-1,1,休日)。 - 土日以外が休みならINTL。 文字列は月曜始まりの7文字で、1が休み。
参考・出典
- Microsoft サポート「DATEDIF 関数」https://support.microsoft.com/ja-jp/office/datedif-関数-25dba1a4-2812-480b-84dd-8b32a451b35c
- Microsoft サポート「EDATE 関数」https://support.microsoft.com/ja-jp/office/edate-関数-3c920eb2-6e66-44e7-a1f5-753ae47ee4f5
- Microsoft サポート「EOMONTH 関数」https://support.microsoft.com/ja-jp/office/eomonth-関数-7314ffa1-2bc9-4005-9d66-f49db127d628
- Microsoft サポート「WORKDAY function」https://support.microsoft.com/en-us/office/workday-function-f764a5b7-05fc-4494-9486-60d494efbf33
- Microsoft サポート「NETWORKDAYS function」https://support.microsoft.com/en-us/office/networkdays-function-48e717bf-a7a3-495f-969e-5005e3eb18e7
- Microsoft サポート「WORKDAY.INTL 関数」https://support.microsoft.com/ja-jp/office/workday-intl-関数-a378391c-9ba7-4678-8a39-39611a9bf81d
- Microsoft サポート「NETWORKDAYS.INTL function」https://support.microsoft.com/en-us/office/networkdays-intl-function-a9b26239-4f20-46a1-9ab8-4e925bfd5e28
- 内閣府「国民の祝日について」https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Excel日付計算の関数一覧|月末・営業日・年齢・期間の数式早見表」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。