DATE関数の使い方|年月日から日付を作成する
DATE関数は、年・月・日の3つの数値を指定して日付データ(シリアル値)を作成するExcelの基本関数です。文字列から日付を組み立てたり、月末日や期日を動的に計算したりする場面で活躍します。日付関連の数式を組む際の土台となる関数です。
DATE関数の基本構文
=DATE(年, 月, 日)
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 年 | 日付の年を数値で指定(1900~9999) | 必須 |
| 月 | 日付の月を数値で指定(1~12) | 必須 |
| 日 | 日付の日を数値で指定(1~31) | 必須 |
基本的な動作
=DATE(2026, 4, 1) ' 結果:2026/04/01
=DATE(2026, 12, 25) ' 結果:2026/12/25
DATE関数はシリアル値を返します。セルの表示形式が「標準」の場合は数値で表示されるため、書式設定で「日付」を選択してください。
月や日の繰り上がり・繰り下がり
DATE関数の大きな特徴は、月や日に範囲外の数値を指定しても自動的に繰り上がり・繰り下がりが行われる点です。
月が13以上の場合
=DATE(2026, 13, 1) ' 結果:2027/01/01(翌年1月に繰り上がり)
=DATE(2026, 15, 1) ' 結果:2027/03/01(翌年3月に繰り上がり)
月が0や負の値の場合
=DATE(2026, 0, 1) ' 結果:2025/12/01(前年12月に繰り下がり)
=DATE(2026, -1, 1) ' 結果:2025/11/01(前年11月に繰り下がり)
日が0の場合
=DATE(2026, 4, 0) ' 結果:2026/03/31(前月の末日)
=DATE(2026, 3, 0) ' 結果:2026/02/28(2月の末日)
この「日に0を指定すると前月の末日になる」という性質は、月末日の計算で非常に便利です。
日が月の最大日数を超える場合
=DATE(2026, 2, 30) ' 結果:2026/03/02(2月は28日なので3月に繰り上がり)
=DATE(2026, 1, 32) ' 結果:2026/02/01(1月は31日なので2月に繰り上がり)
実践例1:月末日を求める
任意の日付が属する月の末日を求める方法です。DATE関数の「日に0を指定」する性質を利用します。
当月の末日
A2に日付が入っている場合、その月の末日を求めます。
=DATE(YEAR(A2), MONTH(A2)+1, 0)
MONTH(A2)+1で翌月を指定し、日に0を指定することで当月の末日が返ります。
サンプル結果
| A列(日付) | 数式の結果 |
|---|---|
| 2026/01/15 | 2026/01/31 |
| 2026/02/10 | 2026/02/28 |
| 2026/04/22 | 2026/04/30 |
| 2024/02/05 | 2024/02/29(うるう年) |
うるう年の2月も正しく29日が返されます。
翌月の末日
=DATE(YEAR(A2), MONTH(A2)+2, 0)
前月の末日
=DATE(YEAR(A2), MONTH(A2), 0)
実践例2:月初日を求める
月末日と対になる月初日の計算です。
当月の1日
=DATE(YEAR(A2), MONTH(A2), 1)
翌月の1日
=DATE(YEAR(A2), MONTH(A2)+1, 1)
月初日と月末日のペア
月次レポートの集計期間を自動設定する場合に便利です。
| 項目 | 数式 | 2026/04/15の場合 |
|---|---|---|
| 当月初日 | =DATE(YEAR(A2),MONTH(A2),1) | 2026/04/01 |
| 当月末日 | =DATE(YEAR(A2),MONTH(A2)+1,0) | 2026/04/30 |
| 翌月初日 | =DATE(YEAR(A2),MONTH(A2)+1,1) | 2026/05/01 |
| 翌月末日 | =DATE(YEAR(A2),MONTH(A2)+2,0) | 2026/05/31 |
実践例3:支払期日の計算
請求書の発行日から支払期日を計算する例です。「月末締め翌月末払い」のようなルールに対応します。
月末締め翌月末払い
=DATE(YEAR(A2), MONTH(A2)+2, 0)
A2が「2026/04/15」(4月中の請求)なら、4月末締めの翌月末(5月31日)が期日です。MONTH+2で6月を指定し、日に0を入れると5月末日が返ります。
月末締め翌々月10日払い
=DATE(YEAR(A2), MONTH(A2)+2, 10)
A2が「2026/04/15」なら2026/06/10が返ります。
20日締め翌月末払い
締め日が月末でない場合は、条件分岐を加えます。
=IF(DAY(A2)<=20, DATE(YEAR(A2), MONTH(A2)+1, 0), DATE(YEAR(A2), MONTH(A2)+2, 0))
20日以前の取引は当月20日で締め、翌月末が期日です。21日以降の取引は翌月20日で締め、翌々月末が期日です。
サンプルデータでの確認
| 取引日 | 月末締め翌月末 | 20日締め翌月末 |
|---|---|---|
| 2026/04/05 | 2026/05/31 | 2026/05/31 |
| 2026/04/22 | 2026/05/31 | 2026/06/30 |
| 2026/05/10 | 2026/06/30 | 2026/06/30 |
| 2026/05/25 | 2026/06/30 | 2026/07/31 |
実践例4:年月の数値から日付を組み立てる
データベースや外部システムからインポートしたデータで、年と月が別々の列に入っている場合に日付を作成します。
年と月が別セルにある場合
| A列(年) | B列(月) | C列(数式) | 結果 |
|---|---|---|---|
| 2026 | 4 | =DATE(A2,B2,1) | 2026/04/01 |
| 2026 | 5 | =DATE(A3,B3,1) | 2026/05/01 |
文字列の日付を変換する
「20260401」のような8桁の文字列を日付に変換する場合です。
=DATE(LEFT(A2,4)*1, MID(A2,5,2)*1, RIGHT(A2,2)*1)
LEFT関数で年(先頭4桁)、MID関数で月(5~6桁目)、RIGHT関数で日(末尾2桁)を取り出し、DATE関数で日付を組み立てます。
「YYYY/MM」形式から月初日を作成
年月のみの文字列から日付を作る場合です。
=DATE(LEFT(A2,4)*1, RIGHT(A2,2)*1, 1)
A2が「2026/04」なら、2026/04/01が返ります。
実践例5:nヶ月後・nヶ月前の同日を求める
DATE関数の月の繰り上がりを利用して、指定月数後の日付を計算します。
=DATE(YEAR(A2), MONTH(A2)+3, DAY(A2))
A2の3ヶ月後の同日が返ります。ただし、元の日付が31日で3ヶ月後の月に31日が存在しない場合は翌月に繰り上がります(例:1/31の3ヶ月後は5/1になる)。
繰り上がりを防ぐ(月末日に揃える)
繰り上がりを防いで月末日に合わせたい場合は、EOMONTH関数の利用も検討してください。または次のようにMIN関数で制御します。
=DATE(YEAR(A2), MONTH(A2)+3, MIN(DAY(A2), DAY(DATE(YEAR(A2), MONTH(A2)+4, 0))))
この数式は、3ヶ月後の月の末日とDAY(A2)のうち小さい方を日に指定することで、存在しない日付への繰り上がりを防ぎます。
よくあるエラーと対処法
#VALUE!エラー
引数に数値として解釈できない値を指定した場合に発生します。
' エラーになる例
=DATE("二千二十六", 4, 1)
引数は必ず数値で指定してください。
日付が数値で表示される
DATE関数の結果はシリアル値です。セルの書式が「標準」や「数値」の場合は5桁の数字で表示されます。セルの書式設定で表示形式を「日付」に変更してください。
年に2桁の値を指定した場合
年に0~29を指定すると2000年代、30~99を指定すると1900年代として解釈されます。
=DATE(26, 4, 1) ' 結果:2026/04/01
=DATE(99, 4, 1) ' 結果:1999/04/01
混乱を防ぐために、年は4桁で指定することをおすすめします。
EOMONTH関数との使い分け
月末日を求める方法として、DATE関数以外にEOMONTH関数もあります。
| 方法 | 数式 | 特徴 |
|---|---|---|
| DATE関数 | =DATE(YEAR(A2),MONTH(A2)+1,0) | 月初日の計算にも応用できる |
| EOMONTH関数 | =EOMONTH(A2,0) | 月末日の計算に特化、簡潔 |
月末日だけならEOMONTH関数のほうが簡潔です。月初日と月末日の両方を求める場合や、日付の組み立て全般にはDATE関数が適しています。
Google スプレッドシートでの互換性
DATE関数はGoogle スプレッドシートでも同じ構文・同じ動作で利用可能です。月や日の繰り上がり・繰り下がりの挙動も同一です。
まとめ
DATE関数は年・月・日の数値から日付を作成する基本関数です。
- 年・月・日を数値で指定して日付のシリアル値を返す
- 月や日に範囲外の数値を指定すると自動的に繰り上がり・繰り下がりが行われる
- 日に0を指定すると前月の末日が求められる
- 支払期日や締め日の計算に活用できる
- 文字列の日付データを変換する際にも便利
月末日の算出、期日の計算、外部データからの日付変換など、DATE関数は日付処理の幅広い場面で活躍します。繰り上がり・繰り下がりの仕組みを理解して、実務の日付計算に活かしましょう。