Google SheetsでEOMONTH関数を使いこなす方法
EOMONTHとは何か、いつ使うべきか
EOMONTHはGoogle Sheetsの組み込みの日時関数群に属する関数で、ある開始日から指定した数の月だけ進めた(あるいは戻した)先の月の最終日を返します。会計や請求処理、サブスクリプションの有効期限、契約終了日など、月末基準の日付が必要な場面で頻繁に使われます。
1行定義: EOMONTHは「開始日からnか月移動した月の最後の日」を返す関数です。
重要ポイント:
- months に正の整数を渡すと、開始日から将来の月末を返します。負の整数を渡すと過去の月末を返します。
- months に小数を渡すと小数部分は切り捨てられます(例: 5.7 → 5)。
- 日付の入力はセル参照、DATE関数、または日付文字列(シートの地域設定に依存)で指定できます。
- EOMONTHはうるう年も正しく考慮します。
重要: 日付がテキストとして格納されている場合は DATEVALUE() や DATE() を使って正しい日付シリアルに変換してください。
構文
=EOMONTH(start_date, months)- start_date: 必須。基準となる日付。セル参照(例: A2)、DATE() や TODAY() で渡せます。
- months: 必須。開始日から何か月移動するかを表す整数。正は未来、負は過去。
基本的な使い方(ステップバイステップ)
以下はシートに開始日(A列)と移動月数(B列)がある例です。日付表示は dd/mm/yyyy 形式を例として示します。
- 結果表示用のセル(例: C2)を選択します。
- 次の式を入力します:
=EOMONTH(A2, B2)- Enterを押すと、C2にA2の開始日からB2か月移動した先の月末日が表示されます。
例:
| A(開始日) | B(移動月数) | C(結果) |
|---|---|---|
| 12/03/2022 | 0 | 31/03/2022 |
| 12/03/2022 | 1 | 30/04/2022 |
| 25/02/2020 | 0 | 29/02/2020 |
| 15/07/2023 | -1 | 30/06/2023 |
上の表では、うるう年(2020年2月)に対して正しく29日が返っていることに注目してください。

実践的な例とテンプレート
- 請求書の支払期限を「月末」に設定する(当月末):
=EOMONTH(TODAY(), 0)- 発行日から3か月後の月末を自動計算する:
=EOMONTH(IssueDateCell, 3)- サブスクリプションの次回請求日(毎月末)を作る(前回請求日が A2 にある場合):
=EOMONTH(A2, 1)- 月末から逆算して「締め日が営業日である」ように調整する(NETWORKDAYS や WORKDAY を併用):
=WORKDAY(EOMONTH(A2,0), -1, HolidaysRange)この例は、月末から逆算して最も近い前の営業日を求めるパターンです。
.jpg?q=50&fit=crop&w=825&dpr=1.5)
EOMONTHの代替手段と比較
- DATE関数トリック(互換性と理解のため):
=DATE(YEAR(A2), MONTH(A2)+1, 0)この式は『次月の1日の0日目』つまり『当月の最終日』を返す古典的な方法です。EOMONTHと同じ結果を得られますが、可読性はEOMONTHの方が高いです。
- EDATE関数との違い:
EDATE(start_date, months) は指定月の「同日」を返します(例: 2022-01-31 +1か月 → 2022-02-28/29 の挙動はシート実装による)。EOMONTHは常に月末を返す点で用途が異なります。
使い分けのヒント: 月末が必要ならEOMONTH、単に月をまたいだ「同日」が必要ならEDATE。
よくある誤りと落とし穴(エッジケース)
- 日付が文字列になっている: “2022/03/12” がテキストだと意図した結果にならないことがあります。DATEVALUE()で変換してください。
=EOMONTH(DATEVALUE("12/03/2022"), 0)- monthsに小数を渡すと切り捨てられる: 2.9 → 2 になります。
- ロケール依存の日付形式: シートの地域設定によって day/month と month/day の解釈が変わります。確実にするには DATE(year, month, day) を使いましょう。
=EOMONTH(DATE(2022,3,12), 0)- タイムゾーンの表示差: Google Sheets上のシリアル日付はローカルタイムに影響することは少ないですが、Apps Scriptや外部APIと連携する場合はタイムゾーンに注意してください。
受け入れ基準
- 入力が有効な日付(シリアル)として解釈されること。
- months に整数が入力された場合、期待どおり月末が返ること。
- うるう年(2月29日)や月ごとの日数差が正しく処理されること。
- テンプレート利用時、結果セルが日付形式で表示されること。
テストケース(簡単な受け入れテスト)
- start_date: 2022-01-15, months: 0 → 結果: 2022-01-31
- start_date: 2020-02-01, months: 0 → 結果: 2020-02-29
- start_date: 2021-12-31, months: 1 → 結果: 2022-01-31
- start_date: “15/07/2023”(文字列), months: 0 → DATEVALUEで変換してから使用し結果が正しいことを確認
実務での活用アイデア(役割別チェックリスト)
経理担当
- 毎月の支払期日をEOMONTHで自動計算して請求書テンプレートに挿入
- 四半期決算の締め日(例: =EOMONTH(A1, 0) で月末のマーク)
プロダクトマネージャー
- サブスク契約の次回請求日をEOMONTHで一括更新
データアナリスト
- 月次区切りの売上データ抽出時に月末日をキーとして結合
小さな実務的なSOP(標準作業手順)
- 日付列は常に DATE() か シートの日付形式で保存する。
- EOMONTHを使うセルは日付フォーマット(例: yyyy/mm/dd)に整える。
- 外部入力(CSV等)はインポート後に DATEVALUE を使って検証。
- テンプレートではエラーチェック(ISDATE相当)を入れる:
=IF(ISDATE(A2), EOMONTH(A2,B2), "入力が不正な日付です")(注: Google SheetsにはISDATE関数がないため、代替として VALUE でエラー判定を行うパターンも使います)
決定ツリー(いつEOMONTHを使うか)
flowchart TD
A[開始日と期間があるか?] -->|はい| B{月末が必要か?}
A -->|いいえ| Z[日付を用意する]
B -->|はい| C[EOMONTHを使う]
B -->|いいえ| D[EDATEまたはDATE関数]
C --> E[結果を日付形式で整形]
D --> E用語集(1行定義)
- 日付シリアル: スプレッドシート内部で日付を表す数値。
- months: EOMONTHが受け取る「月数」引数(正で未来、負で過去)。
- うるう年: 4年ごとに2月が29日になる年。EOMONTHは自動で対応。
セキュリティとプライバシーの注意点
EOMONTHは表示上の日付計算のみ行います。個人データや機密データを扱う際は、シートの共有設定とアクセス権限を適切に管理してください。
次に学ぶと良い関数
- EDATE: 同日に基づく月移動
- WORKDAY / NETWORKDAYS: 営業日ベースの計算
- DATEVALUE / DATE: テキスト日付の変換と固定化
まとめ
EOMONTHは、月末基準の日付処理を簡潔に行える強力な関数です。請求期限や有効期限、月次レポートの境界日算出など、月末日が必要な業務で特に有用です。誤入力やロケール依存にだけ注意すれば、シンプルで信頼性の高い日付計算ができます。
FAQ
Q1: EOMONTHはExcelと互換性がありますか?
A1: はい。ExcelにもEOMONTH関数があり、基本的な挙動は同じです。ただし、表示形式やロケール設定には差が出ることがあります。
Q2: 日付がテキスト形式の場合はどうすればいいですか?
A2: DATEVALUE または DATE を使って日付シリアルに変換するか、インポート時に日付として認識させてください。
Q3: 月の最終営業日を求めたいです。EOMONTHだけでできますか?
A3: EOMONTHで月末を求めたあと、WORKDAYやNETWORKDAYSを組み合わせて最終営業日を求めるのが一般的です。