テクノロジーガイド

ExcelのEOMONTH関数を使った完全ガイド:月末日を正確に計算する

3 min read Excel 更新されました 16 Sep 2025
Excel EOMONTH関数ガイド:月末日を正確に計算
Excel EOMONTH関数ガイド:月末日を正確に計算

Excelのカレンダーがテーブル上に置かれており、横にExcelのロゴが表示されている画像。

クイックリンク

  • EOMONTHの構文
  • 未来の月末日を計算する
  • 過去の月末日を計算する
  • 長期(年単位)の過去/未来月末日
  • 今月の月末日を計算する
  • 月末日シーケンスを生成する
  • よくある落とし穴と対策
  • 役割別チェックリスト

EOMONTHの構文

EOMONTH関数は2つの引数を取ります。

=EOMONTH(a,b)
  • a: 開始日(任意の日付)。セル参照/DATE関数/TODAY関数などで指定できます。
  • b: 開始日からの月数の増減。正は未来へ、負は過去へ、0は同じ月の末日。

使用例(入力形式の例はExcelの標準的な日付シリアルを前提とします):

引数 a の例説明
=EOMONTH(A1,A1の値を開始日として使用。
=EOMONTH(DATE(2025,5,31),2025年5月31日を開始日として使用。
=EOMONTH(TODAY(),今日の日付を開始日として使用。

引数 b は直接数値を書いても良いし、別セルを参照して可変にしても良いです。

引数 b の例説明
=EOMONTH(A1, 5)開始日から5か月後の月の末日を返す。
=EOMONTH(A1, -5)開始日から5か月前の月の末日を返す。
=EOMONTH(A1, 0)開始日の属する月の末日を返す。
=EOMONTH(A1, A2)A2の数値に従って前後する月の末日を返す。

注意: EOMONTHは「月の最後の日」を返し、日付形式のシリアル値を返します。適切なセル書式(例:yyyy/m/d、または日本語ロケールの標準形式)を設定してください。Excelのリボンで「表示形式」を「標準(または標準的な数値形式)」に戻す必要がある場面もあります。

未来の月末日を計算する(実践例)

想定シナリオ:建設会社のプロジェクト管理。各プロジェクトには開始日と所要月数があり、締切は各月の末日です。E列に「End date(終了日)」を計算します。

列Aにプロジェクト番号、列Bに所要月数、列Cに担当者、列Dに開始日、列Eに見出し『End date』があり空白になっているExcelの表。

手順(テーブル形式のデータを想定):

  1. E2セルに以下を入力:
=EOMONTH([@[Start date]],[@Months])
  1. テーブル形式なら構造化参照が自動で使われ、最初のセルに入れるだけで列全体に自動適用されます。通常の範囲ならフィルハンドルでコピーします。

例(通常のセル参照の場合):

=EOMONTH(D2,B2)

例えば、開始日が2025/01/04で、移動月数が3なら、EOMONTHは2025/04/30を返します(2025-04-04の月末)。

利点:

  • 数式を変更せずに開始日や月数を変えられる。
  • 列全体で一貫したロジックを適用できる。

過去の月末日を計算する(実践例)

別シナリオ:プロジェクトの締切(Deadline)があり、そこから逆算して「遅くともいつ開始すべきか」を月末単位で算出したい場合。

列Aにプロジェクト番号、列Bに所要月数、列Cに担当者、列Eに締切日、列Dに見出し『Start date』が空白になっているExcelの表。

要件例: 所要月数が5か月のプロジェクトは、余裕のため期限から6か月前の月末を「開始日」としたい。

D2に入力する式:

=EOMONTH([@Deadline], -[@Months]-1)

式の読み方:

  • [@Deadline] は締切日(基準日)。
  • -[@Months] で所要月数分だけ過去へジャンプ。
  • さらに -1 して余裕を1か月確保。
  • 最終的にEOMONTHがその月の末日を返す。

事例: 締切が2026/01/27、所要月数が5なら、EOMONTHは2025/07/31を返します(5か月前は2025/08、さらに1か月戻って2025/07の末日)。

年単位での過去/未来(月数換算)

EOMONTHは月単位で移動するため、年数で表現したい場合は年数×12を引数bに使います。

例(開始日から年数で終期を求める):

=EOMONTH([@[Start date]],[@Years]*12)

逆方向(過去へ戻す):

=EOMONTH([@[Start date]], -[@Years]*12)

具体例: 開始日が2025/01/04でYearsが2なら、2年=24か月で2027/01/31が返ります。

今月の月末日/残り日数を計算する

月の残り日数を求める有用な式:

=EOMONTH(TODAY(),0)-TODAY()
  • EOMONTH(TODAY(),0) は今月の末日(シリアル)を返す。
  • TODAY() は今日の日付(シリアル)。
  • 引き算で残日数を算出する。

注意点: 結果が日付表示になってしまうことがあります。その場合はセルの表示形式を「標準」または数値に変更してください(日本語版Excelでは[ホーム]タブ→表示形式→「標準」や「数値」)。

日割り予算の計算例:

セルB1: 残り日数(上の式) セルB6: 利用可能総予算 セルB7: 1日あたりの支出可能額:

=B6/B1

(B1が0にならないように条件分岐やIFERRORで安全策を入れることを推奨)

SEQUENCEと組み合わせて月末日シーケンスを生成する

SEQUENCE関数をEOMONTHのb引数に渡すと、月末日の配列を一度に生成できます。これにより年次・四半期・隔月などの一覧を動的に作れます。

SEQUENCEの基本:

=SEQUENCE(rows, cols, start, step)
  • rows: 行数(返す要素数)
  • cols: 列数(通常は1)
  • start: シーケンスの開始値(省略可)
  • step: インクリメント(省略可、デフォルトは1)

例: 2025年の各月末日を配列で返す:

=EOMONTH(DATE(2024,12,31), SEQUENCE(12))
  • DATE(2024,12,31) を開始日として渡すことで、翌月(2025/01)の月末から始める。
  • SEQUENCE(12) は1から12までの配列を返すため、EOMONTHは1か月後〜12か月後の月末を返す。

隔月(2か月ごと):

=EOMONTH(DATE(2024,12,31), SEQUENCE(6,, ,2))

四半期(日付を指定して四半期末を一覧にする):

=EOMONTH(DATE(2025,2,28), SEQUENCE(4,, ,3))

注意: SEQUENCEは動的配列を返します。結果がスピル(spill)するセル範囲は通常の範囲である必要があり、Excelテーブルでは動的配列は直接使えません。

結果を固定化したい場合は、生成後にセルをコピー→値のみ貼り付け(Ctrl+C→Ctrl+Shift+V)で値に置き換えます。

EOMONTHとSEQUENCEを併用して2025年の月末一覧を生成しているスクリーンショット。

EOMONTHのよくある落とし穴と対策

  1. 日付が正しくない/シリアル値が日付表示される

    • 原因: 結果が日付シリアルなのに表示形式が日付になっている/逆に数値になっている。
    • 対策: 必要に応じて表示形式を「日付」または「標準」に切り替える。
  2. 31日が絡む月(31日→短い月)

    • EOMONTHは「月の末日」を返すので、開始日が31日の場合でも、短い月の末日に正しく切り替わります(例:1月31日の1か月後は2月28日または29日)。
    • 対策: 特別な処理不要。ただし業務ルールで「同日」を維持したいならEDATEを検討。
  3. 年をまたぐ計算の誤認識

    • EOMONTHは月数で計算するため、年をまたぐ場合でも問題なく動作します。ただし、人間側で「何年何月の末日か」を明示しておくと誤解を防げます。
  4. テーブル+動的配列の不整合

    • SEQUENCEなどを使って動的配列をスピルさせようとすると、Excelテーブル内ではエラーになることがあります。テーブル外の通常セルに置くか、値に変換してからテーブルに読み込んでください。
  5. ローカル日付形式の違い(日本ロケールと米国ロケールなど)

    • Excelの表示設定がロケール依存のため、日付文字列を直接入力する場合は注意。安全策としてDATE関数で年・月・日を指定することを推奨します。

EOMONTHとEDATEの違い(いつ使い分けるか)

  • EOMONTH: 指定した期間の「末日」を返す。締め日や請求日、月次レポートの期日算出に最適。
  • EDATE: 指定期間の「同日」を返す(例:1月15日の1か月後は2月15日)。業務で締め日ではなく同日を基準にする場合に使う。

簡易判断ルール:

  • 目的が「月末」「期末」「締切(末日固定)」 → EOMONTH
  • 目的が「同じ日・同じ日付番号を維持したい」 → EDATE

追加の実践例とテンプレート集

  1. プロジェクト管理テンプレート(サマリ):
  • 列A: Project ID
  • 列B: Duration (months)
  • 列C: Owner
  • 列D: Start Date
  • 列E: End Date → =EOMONTH(D2,B2)
  • 列F: Days remaining to end (if End Date in future) → =IF(E2>TODAY(),E2-TODAY(),0)
  1. 月次請求テンプレート(請求月の月末を基準):
  • InvoiceDate: =EOMONTH(TODAY(),0)
  • DueDate: =EOMONTH(TODAY(),1) (次月末)
  1. 四半期レポート生成(任意の年):
=EOMONTH(DATE(2024,12,31), SEQUENCE(4,, ,3))
  1. 年度開始からnヶ月ごとの期末をリスト化(例: 6か月ごと):
=EOMONTH(DATE(2024,3,31), SEQUENCE(6,, ,6))

トラブルシューティングQ&A(現場でよくある問題)

Q1: EOMONTHの結果が#VALUE!になる

  • 原因: a引数が日付として認識されていない(文字列など)。
  • 対策: DATE関数で明示するか、VALUE関数で変換、またはセルの書式を日付に直す。

Q2: SEQUENCEがテーブル内で機能しない

  • 原因: 動的配列関数はテーブル内部でスピルできない。
  • 対策: テーブルの外に置く、または結果を値として貼り付けてテーブル化する。

Q3: 計算が遅い(大量の行)

  • 原因: 複雑な構造化参照+動的配列+他関数の組合せで再計算が多い。
  • 対策: 必要な範囲のみ計算、値貼り付けで固定化、或いは計算モードを手動に切替えてから変更→再計算。

役割別チェックリスト(導入・運用時)

プロジェクトマネージャー:

  • 各タスクの「開始日」「所要月数」を正確に入力しているか
  • 余裕期間(バッファ)を設計し、EOMONTHの引数で調整しているか
  • テーブル構造を利用して一括更新ができるか

経理(請求・締め):

  • 締め日が月末で固定されているか(EOMONTHが最適)
  • 四半期末・年末処理のテンプレートを予め用意しているか
  • 日付のロケール(和暦/西暦)で表示ミスがないかを確認

データアナリスト:

  • 動的配列を利用する際、テーブルと併用していないか
  • 大量データでの再計算コストを評価しているか
  • 関数の互換性(Excelバージョン)をチェックしているか

セキュリティ・プライバシー注意点

  • EOMONTH自体は数式計算のための関数であり、個人情報や機密データを扱う場合はシートのアクセス制御を徹底してください。
  • クラウドで共有する場合、誰がセルの値や式を編集できるかを明確にしてください(編集権限の管理)。

ミニメソッド:月末日計算をプロジェクトに組み込む手順

  1. 要件定義:締切が月末に固定か、同日ベースかを決定。
  2. テンプレート作成:Start/Months/Endなど基本列を作る。
  3. 数式適用:EOMONTHを導入して列に展開。
  4. 検証:代表的なケース(2月・閏年・31日)で期待値と一致するかテスト。
  5. 文書化:所用時間、バッファ、例外ルールを注記。
  6. 運用:定期レビューでテンプレートを更新。

エッジケースギャラリー(具体例で理解する)

  • 開始日が1月31日、1か月後:EOMONTH(2025/01/31,1) → 2025/02/28(閏年でなければ)
  • 開始日が2024/01/31(閏年前)、1か月後:EOMONTH(2024/01/31,1) → 2024/02/29(2024年は閏年)
  • 負の引数で年をまたぐ:EOMONTH(2025/03/15,-15) は 2023/12/31 を返す(15か月前の末日)

テストケース(受け入れ基準)

  • 入力: 開始日=2025/01/04, Months=3 ⇒ 出力=2025/04/30
  • 入力: 締切=2026/01/27, Months=5 ⇒ Start計算式 =EOMONTH(Deadline,-Months-1) ⇒ 出力=2025/07/31
  • 閏年テスト: 入力: 2024/01/31,1 ⇒ 2024/02/29
  • SEQUENCEテスト: =EOMONTH(DATE(2024,12,31),SEQUENCE(12)) ⇒ 2025年各月の月末が12個返る

これらのテストが全て満たされれば、基本的な動作要件を満たしていると判断できます。

メンタルモデル(直感的に理解するための比喩)

  • EOMONTHは「与えた日付からカレンダーを◯か月めくって、その月の最後のページ(末日)を切り取る道具」です。
  • EDATEは「ページをめくって同じ行(同じ日)を探す道具」です。

この違いをイメージできれば、どちらを使うべきか即座に判断できます。

まとめ

  • EOMONTHは月末日を返す便利な関数で、締め処理・請求・四半期集計・逆算開始日の算出などに最適。
  • 年単位の移動は月数(年×12)で扱う。
  • SEQUENCEと組み合わせれば月次・隔月・四半期の一覧を一気に生成できる。
  • 主な落とし穴は日付の表示形式、テーブルと動的配列の不整合、31日絡みの期待差異。
  • 同じ日付番号を維持したいならEDATEを選ぶ。

重要: 実務で使う際は必ず代表的なテストケース(閏年、31日→短い月、年跨ぎ)を検証してから本番データへ適用してください。


この記事でカバーした主な式(参考まとめ):

=EOMONTH(A1,5)               // A1の5か月後の月末
=EOMONTH(A1,-5)              // A1の5か月前の月末
=EOMONTH(TODAY(),0)         // 今月の末日
=EOMONTH([@Deadline],-[@Months]-1) // 締切から逆算して余裕1か月を考慮した開始月末
=EOMONTH([@[Start date]],[@Years]*12) // 年数×12で年単位の終期を取得
=EOMONTH(DATE(2024,12,31),SEQUENCE(12)) // 2025年の各月末を配列で返す

役割別チェックリストとテストケースを使って、ワークブックに安全に導入してください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Androidでホーム画面ごとに別の壁紙を設定する方法
カスタマイズ

Androidでホーム画面ごとに別の壁紙を設定する方法

データブローカーから個人情報を削除する方法
プライバシー

データブローカーから個人情報を削除する方法

Androidでホーム画面ごとに壁紙を設定する方法
Android

Androidでホーム画面ごとに壁紙を設定する方法

Apache Tomcatの監視と管理ガイド
監視

Apache Tomcatの監視と管理ガイド

Disney Plusアプリが動かない時の修正ガイド
ストリーミング

Disney Plusアプリが動かない時の修正ガイド

WindowsでPythonスクリプトをタスクスケジューラで自動実行する方法
自動化

WindowsでPythonスクリプトをタスクスケジューラで自動実行する方法