【Excel】月を足すと日付がずれる理由:EDATEとEOMONTHの使い分け

【Excel】月を足すと日付がずれる理由:EDATEとEOMONTHの使い分け
🛡️ 超解決

1月31日に1か月を足したつもりが、3月になったり、翌々月が28日になったりする。Excelで月を加算するときは、「30日後」「翌月の同じ日」「翌月末」を区別する必要があります。この三つは、月末や2月をまたぐと違う日付になります。

毎月の予定表を作るなら、最初に日付の決め方を確認しましょう。同じ日を基本に、存在しない日は月末へ収めるならEDATE、必ず月末にするならEOMONTHを使います。どちらが正しいかは業務のルール次第です。関数を変える前に、期待する日付を数件書き出しておくと、計算結果を判断できます。

ADVERTISEMENT

1. 30日を足す計算は1か月の加算とは違う

A2に2026年1月31日を入れる例で考えます。入力形式の違いを避けて試すなら、A2に=DATE(2026,1,31)を入力し、日付形式で表示します。別セルの=A2+30は2026年3月2日になります。これは1月31日から30日を数えた結果です。

月の日数は28日、29日、30日、31日と変わります。「翌月」を30日で代用すると、日付がずれる月が生じます。一方、発送から30日後の確認日など、固定の日数が目的なら単純な加算で構いません。月単位の予定と日数単位の予定を同じ式にしないことが重要です。

また、=DATE(YEAR(A2),MONTH(A2)+1,DAY(A2))はこの例で3月3日になります。DATEは存在しない2月31日をエラーとして止めるのではなく、2月の日数を超えた分を翌月へ繰り越します。関数の故障ではなく、その仕様と予定表のルールが合っていない状態です。

※ お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

2. 翌月の同じ日を基本にするならEDATE

EDATEは開始日から指定した月数だけ前後の日付を返します。A2が2026年1月31日の場合、次の式は2月28日です。移動先の月に31日がないため、その月の末日へ収まります。A2が1月15日なら2月15日になります。

=EDATE(A2,1)

2か月後は第2引数を2、1か月前は-1にします。開始日を元の1月31日のままにして=EDATE(A2,2)とすれば3月31日です。EDATEは常に月末を返す関数ではありません。2月28日を開始日にして1か月足せば、通常は3月28日です。

結果が大きな整数で表示されたら、結果セルの表示形式を日付に変更します。ただし、日付らしく表示できることだけでは入力の正しさまでは分かりません。元のA2を選び、数式バーと=ISNUMBER(A2)で数値としての日付かを確認し、実際の年月日も照合してください。

3. 毎回の基準日を固定して予定を作る

毎月の予定を作る際は、前月の結果へさらに1か月を足す方式に注意します。1月31日→2月28日→3月28日と連鎖させると、いったん28日になった後は、その28日が次の基準になります。「毎月31日、なければ月末」という意図なら、元の開始日から各月を計算します。

2026年1月31日を基準に1か月ずつ足す経路は2月28日から3月28日。最初の1月31日へ2か月を足す経路は3月31日へ進む。
毎月の予定を元の日でそろえるなら、前月の結果ではなく開始日を固定して計算します。

A2を開始日、B2:B4を1、2、3という月数にし、C2へ次の式を入力して下へコピーします。開始日は絶対参照で固定し、月数は行ごとに変えます。結果は2月28日、3月31日、4月30日になります。

=EDATE($A$2,B2)

コピー後はC3が=EDATE($A$2,B3)になっているか確認します。開始日までA3へずれると、別の値や空白を参照してしまいます。前月の結果を基準にするルールが必要な業務では連鎖方式を使えますが、基準日固定方式とは結果が違うことを把握して選びます。

既存の予定表を変更する場合は、元の列を残して隣の列で試します。2月だけでなく、その翌月まで比較してください。2月の結果が同じでも、3月から差が出るためです。確認前に元の予定日を値で上書きすると、どのルールで作られていたか追いにくくなります。

4. 必ず月末にしたい場合はEOMONTH

月末締めの一覧など、開始日の日に関係なく月末を求めたい場合はEOMONTHを使います。A2から1か月先の月末は次の式です。A2が1月15日でも1月31日でも、2026年なら結果は2月28日になります。

=EOMONTH(A2,1)

第2引数が0なら当月末、-1なら前月末です。翌月1日は=EOMONTH(A2,0)+1で求められます。例えば1月中の日付からは2月1日が得られます。「開始日から1か月後」と「次の月の初日」も異なるため、列の見出しで区別します。

EDATEとEOMONTHの差を確かめるには、開始日を月の途中に変えます。2026年1月15日なら、EDATEの1か月後は2月15日、EOMONTHの1か月後は2月28日です。1月31日だけで試すと、どちらも2月28日なので、関数の使い分けを見落としやすくなります。

毎月末を並べる場合も、開始日を固定し、月数を1、2、3と増やすと管理しやすくなります。式の意図が明確になり、開始日を変更したときも全行を同じ基準で更新できます。

5. うるう年と年をまたぐ場合を確認する

月末を含む日付の計算では、2月29日も確認します。A2を=DATE(2024,2,29)とすると、=EDATE(A2,12)は2025年2月28日、=EDATE(A2,48)は2028年2月29日です。元の開始日を保持したまま月数を変えると、この違いを確認できます。

年をまたぐ月加算も、月数の引数で指定できます。例えば2026年11月15日の3か月後は2027年2月15日です。年の部分だけを文字列で書き換えたり、月が12を超えたときだけ別の式を作ったりする必要はありません。

引数の月数に小数を渡すと、小数部分は切り捨てられます。1.5を入れて「1か月半後」を求める用途には使えません。半月を何日として扱うかを別途決め、必要なら月の加算と日数の加算を分けてください。日付の規則は、見た目の短い式より優先して明確にします。

6. エラーや想定外の日付は入力と参照から調べる

エラーが出たら、開始日が文字列になっていないか、月数に「1か月」のような文字を混ぜていないかを見ます。日付を式に直接書くなら、地域設定に左右されやすい文字列よりDATE(2026,1,31)のように年月日を分けると確認しやすくなります。

日付が1900年付近になる場合は、開始日として空白や0を参照していないかを確認します。開始日が未入力の間は結果を空欄にしたいなら、次のように条件を追加できます。空欄を隠すだけで入力チェックが完了するわけではないので、開始日と月数の入力欄は分かるように残します。

=IF(A2="","",EDATE(A2,1))

表示が####になる場合は列幅を広げて確認します。年月日ではなく年と月だけの表示形式だと、28日と31日の違いが隠れます。検算する間は日まで表示してください。結果がExcelで扱える日付の範囲を外れるほど大きな月数になっていないかも見ます。

7. 業務の締日と計算結果を照合して保存する

EDATEやEOMONTHは、土日や祝日を避ける処理を自動では行いません。「末日が休日なら前営業日」「締日の翌営業日」などの条件がある場合は、先に月の基準日を求め、その後に営業日ルールを適用します。休日一覧や会社独自の休業日も必要になるため、暦上の月末だけで確定しないでください。

変更した式は、月の途中、1月31日、2月29日、年越しの四つの例で確認します。元の列と比較し、予定が変わる行を洗い出したうえで採用します。意図に合わなければ元の式へ戻せるよう、変更前のブックを残してください。

月加算で重要なのは、関数名を覚えることより、何を固定するかです。日数を固定するなら加算、元の日を基本にするならEDATE、月末を固定するならEOMONTH。この違いを見出しや入力欄に反映しておくと、後で引き継ぐ人も計算の意味を追いやすくなります。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。
この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】