EOMONTH関数の使い方|月末日と月初日を求める

EOMONTH関数の使い方|月末日と月初日を求める

執筆者:

カテゴリ:

EOMONTHは、指定した月の末日を返す関数です。

End Of MONTH の略で、月末が28日か30日か31日かを自動で判定します。うるう年も正しく処理されます。

月次集計や締め日の計算で頻繁に使う、実務価値の高い関数です。ExcelとGoogleスプレッドシートで共通です。

書式

=EOMONTH(基準日, 月数)
引数 内容
基準日 起点となる日付
月数 何ヶ月後(先)か。0が当月、-1が前月、1が翌月

月数の0が「当月」である点が最も重要です。

基本の使い方

A1に 2026/4/15 が入っているとします。

=EOMONTH(A1, 0)    → 2026/4/30   (当月末)
=EOMONTH(A1, 1)    → 2026/5/31   (翌月末)
=EOMONTH(A1, -1)   → 2026/3/31   (前月末)

結果が数値で表示されたら、セルの表示形式を「日付」に変更してください。

月初日を求める

EOMONTHには「月初」を返す機能がありません。前月末に1を足すという書き方をします。

=EOMONTH(A1, -1) + 1    → 2026/4/1   (当月1日)

これが定番のイディオムです。翌月1日なら次のようになります。

=EOMONTH(A1, 0) + 1     → 2026/5/1

DATE(YEAR(A1), MONTH(A1), 1) でも同じことができますが、EOMONTHのほうが短く、月をまたぐ計算に強い書き方です。

月次集計での使い方

EOMONTHが最も活きるのがここです。

今月のデータだけ集計する

=SUMIFS(C:C, A:A, ">="&EOMONTH(TODAY(),-1)+1, A:A, "<="&EOMONTH(TODAY(),0))

「当月1日以上、当月末日以下」という条件です。月が変わっても数式を直す必要がありません。

ただし、日付に時刻が含まれている場合、<= で月末を指定すると 4/30 15:00 のデータが漏れます。安全なのは翌月1日未満で指定する形です。

=SUMIFS(C:C, A:A, ">="&EOMONTH(TODAY(),-1)+1, A:A, "<"&EOMONTH(TODAY(),0)+1)

< で翌月1日——これを習慣にしておくと事故が防げます。

月次の集計表を作る

A列に月初日を並べ、その横に集計を置きます。

A2:  =DATE(2026, 4, 1)
A3:  =EOMONTH(A2, 0) + 1        (翌月1日)
A4:  =EOMONTH(A3, 0) + 1

A3を下にコピーすれば、月初日が並びます。

集計側は次の形です。

B2:  =SUMIFS($C:$C, $A:$A, ">="&A2, $A:$A, "<"&EOMONTH(A2,0)+1)

月初日を起点に、その月末までを集計しています。この形なら何ヶ月分でもコピーで作れます。

締め日・支払日の計算

月末締め・翌月末払い

=EOMONTH(A1, 1)

月末締め・翌々月10日払い

=EOMONTH(A1, 1) + 10

翌月末に10日を足すと翌々月10日になります。

20日締め・翌月末払い

20日締めは、20日を境に締め月が変わります。

=IF(DAY(A1) <= 20, EOMONTH(A1, 1), EOMONTH(A1, 2))

20日以前なら翌月末、21日以降なら翌々月末です。

支払日が土日なら前倒し

WORKDAY と組み合わせます。

=WORKDAY(EOMONTH(A1,1)+1, -1)

「翌月末の翌日から、営業日を1つ戻る」=翌月末以前の直近営業日です。祝日リストを第3引数に渡せば、祝日も避けられます。

=WORKDAY(EOMONTH(A1,1)+1, -1, 祝日!A:A)

月をまたぐ計算に強い理由

「3ヶ月後の月末」を求める場面を考えてください。

DATE(YEAR(A1), MONTH(A1)+3, 0) でも計算できますが、月が12を超えると年をまたぐ処理が必要になります。

EOMONTHなら気にする必要がありません。

=EOMONTH(A1, 3)

年またぎもうるう年も自動で処理されます。 2026/12/15 から3ヶ月後は 2027/3/31 と正しく返ります。

エラーの対処

結果が数字で表示される

セルの表示形式が「数値」になっています。「日付」に変更してください。日付は内部的に数値(シリアル値)で保持されているためです。

#VALUE! が出る

  • 基準日が日付ではなく文字列になっている
  • 月数が数値でない

文字列の日付は DATEVALUE で変換してください。

#NUM! が出る

計算結果がスプレッドシートの扱える日付の範囲を超えています。月数に極端な値を入れていないか確認してください。

集計が合わない

日付に時刻が含まれている可能性が高いです。<= で月末を指定するのをやめ、< で翌月1日を指定してください。

Excelとの違い

書式・挙動ともに共通です。WORKDAY DATE DAY との組み合わせも同じように使えます。

古いExcel(2003以前)ではアドインが必要でしたが、現在のバージョンでは標準機能です。


月末を手で計算してはいけない理由

月末の日付は、月によって二十八日、二十九日、三十日、三十一日と変わります。うるう年もあります。この判定を数式で書こうとすると、条件分岐が増えて必ずどこかで間違えます。

専用の関数を使えば、基準の日付から何か月後の月末か、を指定するだけで済みます。うるう年も自動的に処理されます。当月の月末なら零、翌月なら一、前月なら負の一を指定します。

この関数を知らずに、月の日数を条件分岐で書いている数式を実務でよく見かけます。動いてはいますが、うるう年の判定が抜けていることが多く、四年に一度だけ誤る、という発見しにくい不具合になります。

月初の日付が欲しい場合は、前月末に一を足します。日付は連続した数値なので、一を足せば翌日です。この組み合わせで、当月の初日と末日が両方求まります。


期間の集計に使う

月次の集計表を作る場合、各月の開始日と終了日が必要になります。これを手で入力すると、月が変わるたびに更新が必要になり、入力ミスも起こります。

月初の日付だけを列に入力し、月末は関数で求める形にすると、更新の手間がなくなります。さらに、月初の日付そのものを、前の行に一か月を足す形で求めれば、最初の一行だけ入力すれば済みます。

こうして作った開始日と終了日を、条件付きの集計関数の条件として使います。期間を指定する条件は、開始日以上と終了日以下の二つです。同じ日付の列を二回条件範囲として指定する形になります。

この構成にしておくと、行を追加するだけで翌月の集計が加わります。数式を書き換える必要はありません。

注意点として、データに時刻が含まれる場合、終了日を以下という条件では、その日の零時までしか含まれません。時刻を切り落とした作業列を用意するか、翌月の月初未満という条件にしてください。


締め日が月末でない場合

実務では、締め日が月末とは限りません。二十日締め、二十五日締めといった運用があります。この場合、月末を求める関数だけでは足りません。

考え方としては、締め日を基準に期間を区切ります。二十日締めなら、前月二十一日から当月二十日まで、が一つの期間になります。

これを求めるには、月初の日付に締め日の数値を足す形で締め日を作り、その前月分と組み合わせます。年月日から日付を作る関数を使って、年と月と締め日を指定する方法もあります。こちらのほうが意図が明確になります。

締め日が土日にあたる場合の扱いも決めておく必要があります。前倒しか後ろ倒しか、業務のルールに従ってください。営業日を扱う関数と組み合わせれば、自動化できます。

締め日の運用は業務ごとに違うため、数式に埋め込まず、締め日をセルに置いて参照する形にしてください。運用が変わったときに、セルを直すだけで済みます。


経過月数や更新日の計算

契約の更新日や、支払期日の計算にも使えます。

契約開始日から一年後の更新日を求めるなら、十二か月後の月末を求めるか、年月日から日付を作る関数で年に一を足します。どちらを使うかは、更新日が月末なのか同日なのかで決まります。

支払期日が「翌月末」であれば、請求日の翌月末を求めるだけです。「翌々月十日」であれば、二か月後の月初に九を足します。

こうした計算を数式にしておくと、日付の入力ミスがなくなり、期日の一覧も自動で作れます。期日から今日を引けば残り日数が出るので、督促の管理にもつながります。

なお、月末の同日という概念には注意が必要です。一月三十一日の一か月後を二月三十一日にはできません。月末を求める関数を使えば二月二十八日になりますが、年月日から日付を作る関数では三月三日になることがあります。どちらの挙動が業務に合っているかを確認してください。


月次の集計表を自動化する

月末を求める関数を使うと、月次の集計表を一度作るだけで、以降ずっと使える形にできます。

まず、月初の日付を並べた列を作ります。最初の一行だけを手で入力し、以降は前の行に一か月を足す形にします。年月日から日付を作る関数を使えば、月をまたぐ計算も正しく処理されます。

次に、その横に月末の日付を出します。月初の日付を基準に、当月の月末を求めるだけです。うるう年も自動的に処理されます。

この二列があれば、条件付きの集計関数で期間を絞れます。開始日以上と終了日以下の二つの条件を指定します。

さらに横に、集計したい項目を並べます。件数、合計、平均。条件付きの集計関数を、月初と月末のセルを条件にして書きます。

一行分の数式が完成したら、下にコピーします。行を足すだけで翌月の集計が加わります。数式を書き換える必要はありません。

年をまたぐ場合も、月初の計算が正しければ自動的に処理されます。十二月の次は翌年一月になります。

この構成を一度作っておけば、毎月の集計作業がデータの追加だけになります。


締め日と支払日の管理

請求や支払の管理では、日付の計算が繰り返し必要になります。関数で自動化しておくと、確認の手間が減ります。

締め日が月末なら、取引日から当月の月末を求めるだけです。締め日が二十日なら、年月日から日付を作る関数で、当月の二十日を求めます。取引日が二十日を過ぎていれば翌月の締め日になるので、条件で分岐します。

支払日は、締め日を基準に計算します。翌月末払いなら、締め日の翌月末。翌々月十日払いなら、二か月後の月初に九を足します。

これらを列として持てば、取引を入力するだけで締め日と支払日が自動で出ます。支払日から今日を引けば、残り日数も分かります。

支払日が土日にあたる場合の扱いも決めておいてください。前倒しか後ろ倒しか。営業日を扱う関数と組み合わせれば、自動化できます。

締め日や支払サイトは取引先ごとに違うことが多いので、取引先マスタに持たせて検索で引く形にしてください。数式に埋め込むと、取引先が増えるたびに数式を直すことになります。

よくある質問

Q. 数値が表示されます

セルの表示形式が標準になっています。日付形式に変えてください。

Q. 当月の月末を出したいのですが

月数に零を指定してください。

Q. 月初を出したいのですが

前月末に一を足します。月数に負の一を指定して、結果に一を加える形です。

Q. うるう年は考慮されますか

されます。自動的に正しい日数になります。

Q. 締め日が月末ではないのですが

年月日から日付を作る関数で、締め日を指定してください。締め日はセルに置いて参照する形が保守しやすくなります。

Q. 営業日で調整したいのですが

営業日を扱う関数と組み合わせてください。祝日の一覧を用意すれば除外できます。

Q. 月数に小数を指定できますか

整数として扱われます。小数を指定しても切り捨てられます。

Q. 期間の日数を出したいのですが

終了日から開始日を引いてください。日付は連続した数値なので、差が日数になります。


まとめ

  • 書式は =EOMONTH(基準日, 月数)0が当月
  • 月初は =EOMONTH(A1, -1) + 1
  • 月次集計は >=月初<翌月1日 で書く(時刻対策)
  • 締め日・支払日の計算に強い
  • 年またぎ・うるう年を自動で処理する
  • 結果が数字なら表示形式を「日付」に

関連する関数