Excelで月間カレンダーを作る際、30日までの月と31日までの月で日付表示を切り替える作業は意外に手間がかかります。
手入力では月が変わるたびに修正が必要になり、2月の28日やうるう年の29日も含めると、予定表や勤怠表のずれにつながるかもしれません。
そこで便利なのが、開始日と月末日を数式で判定し、月末を過ぎたセルを空白にする方法です。
EOMONTH関数とIF関数を組み合わせれば、対象月に合わせて30日、31日、2月の日付を自動で切り替えられます。
この記事では、1行目を見出し、2行目以降を日付表示にしたサンプルを使い、月末まで日付を自動表示するカレンダーの作り方を解説します。
月末まで日付を表示する基本ポイント
・基準となる月を1つのセルに入力する
・EOMONTH関数でその月の最終日を取得する
・月末を超えた日付はIF関数で空白にする
エクセルのカレンダーで月末まで日付を表示する方法【数式入力】

| 基準月 | 開始日 | 月末日 |
|---|---|---|
| 2026/9/1 | 2026/9/1 | 2026/9/30 |
それではまず、月末を超えた日付を表示しないカレンダー数式について解説していきます。
結論からいうと、日付を連続で加算する式に月末判定を加えると、月ごとの日数を意識せずにカレンダーを作成できます。
日付を文字として入力するのではなく、Excelが扱えるシリアル値として計算させることが重要です。
基準月をB2セルに入力し、カレンダーの日付をB5セルから表示する場合を想定します。
B2には2026/9/1のように、その月の1日を入力してください。
表示形式をyyyy年m月に設定しておけば、セルの値は1日のまま、画面上では年月だけを見せられます。
基準月と月初日の設定【入力セルの固定】
最初に、カレンダーの対象月を入力する基準セルを用意しましょう。
B2セルに対象月の1日を入力すると、以後の数式はB2を参照して日付を作成できます。
たとえば2026年9月のカレンダーなら、B2には2026/9/1と入力します。
月だけを切り替えたい場合は、B2の値を翌月の2026/10/1に変更するだけです。
月の途中の日付を入力しても計算できますが、月初日を入れる運用にすると確認しやすくなります。
日付を入力したら、セルの表示形式をユーザー定義でyyyy年m月にすると、カレンダーの見出しとしても利用できます。
【操作のポイント】基準セルには年月ではなく、必ず実際の日付として認識される値を入力します。
月末判定を含む基本数式【IF関数とEOMONTH関数】
続いては、最初の日付を表示するB5セルの数式を確認していきます。
=IF($B$2>EOMONTH($B$2,0),””,$B$2)
この式では、B2セルの日付が同じ月の月末日を超えていないかを確認し、問題なければB2の日付を表示します。
EOMONTH関数のEOMONTH($B$2,0)は、B2に入力した月の最終日を返します。
第2引数の0は同じ月を意味し、1なら翌月、-1なら前月の月末を取得します。
IF関数の前半条件が成立した場合は空白を返し、成立しない場合は日付を返す仕組みです。
基準月が9月なら9月30日が月末として判定されるため、30日を超える日付は表示対象になりません。
【操作のポイント】数式中の$B$2は絶対参照です。コピーしても基準月セルがずれません。
連続日付への展開【オートフィル】
続いては、2日以降を自動表示する数式を確認していきます。
C5セルには、左のセルの日付に1日を加えながら月末を判定する数式を入力します。
=IF(B5=””,””,IF(B5+1>EOMONTH($B$2,0),””,B5+1))
最初のIF関数は、左隣のB5セルがすでに空白なら、こちらも空白にするための判定です。
次のIF関数では、B5+1が月末日より後かどうかを調べます。
9月30日の次に計算される10月1日は9月30日を超えるため、セルには空白が表示されます。
この数式を右方向へコピーすれば、30日までの月でも31日までの月でも同じカレンダー枠を使えます。
横並びのカレンダーであれば、C5からAF5程度までオートフィルしておくと、最大31日分を準備できます。
【操作のポイント】日付が連続しないように、左セルが空白の場合も空白を返す判定を残します。
横並びカレンダーの日付自動入力【30日と31日の切り替え】
| 月 | 29日 | 30日 | 31日 |
|---|---|---|---|
| 4月 | 4/29 | 4/30 | |
| 5月 | 5/29 | 5/30 | 5/31 |
続いては、横方向に日付を並べるカレンダーで、30日と31日を自動的に切り替える方法を確認していきます。
月間の勤務表、売上管理表、予約一覧では、1日から31日までを列として並べる形がよく使われます。
この場合、31日分の列をあらかじめ確保し、存在しない日付だけを空白にする設計が実用的です。
4月、6月、9月、11月では31日列を空白にし、31日まである月では日付を表示する仕組みにします。
日付見出しの作成【月初日からの加算】
続いては、1日から31日までを横方向に作る考え方を確認していきます。
B5セルに基準月の日付を表示し、C5セル以降では左隣の値に1を加えると、日付の連番を作れます。
日付は数値として連続しているため、1日を加算するだけで翌日になります。
ただし、そのまま31列までコピーすると、4月30日の次に5月1日が表示されてしまいます。
そこで、月末を超えたかどうかをEOMONTH関数で比較します。
セルの表示形式をdにすれば1から31だけを表示でき、m/dにすれば4/1や4/30のように月日を表示できます。
日付の見出しだけを表示したい場合は、セルの表示形式をdに設定します。
曜日も併記したい場合は、別の行にTEXT関数で曜日を表示すると見やすくなります。
【操作のポイント】日付の値は変えず、表示形式だけで見た目を整えると計算式を保ちやすくなります。
31日列を空白にする数式【月末比較】
続いては、月末を過ぎた列を空白にする式を確認していきます。
B5に最初の日付を表示済みであれば、C5に次の数式を入力して右方向へコピーします。
=IF(B5+1>EOMONTH($B$2,0),””,B5+1)
この式のB5+1は、左隣の日付の翌日です。
4月30日の右隣では、翌日が5月1日となります。
5月1日は4月の月末日である4月30日を超えるため、IF関数の結果は空白になります。
空白文字を返すダブルクォーテーションは、存在しない日付を見せないための重要な指定です。
31日列に予定入力欄を設ける場合でも、日付見出しが空白なら入力不要な列だと判断しやすくなります。
【操作のポイント】数式をコピーする範囲は最大31日分までにし、余分な翌月日付を表示させません。
曜日表示との連動【TEXT関数】
続いては、日付と曜日を連動させる方法を確認していきます。
B6セルに曜日を表示する場合は、B5の日付を参照するTEXT関数を使います。
=IF(B5=””,””,TEXT(B5,”aaa”))
TEXT関数のaaaは月、火、水のような短い曜日表示です。
aaaaに変更すると月曜日、火曜日のような表示になります。
日付セルが空白の場合も曜日セルを空白にするため、先頭にIF(B5=””,””,を付けています。
日付行と曜日行を別にすると、土日だけ色を変える条件付き書式も設定しやすくなります。
週末を目立たせる場合は、土曜日を青、日曜日を赤にする運用が一般的です。
【操作のポイント】曜日は手入力せず日付セルを参照します。月を切り替えても曜日が自動で更新されます。

縦型カレンダーの日付自動表示【連番と空白処理】
| 日付 | 曜日 | 予定 |
|---|---|---|
| 9/29 | 火 | |
| 9/30 | 水 | |
続いては、日付を縦方向に並べる予定表で月末までを自動表示する方法を確認していきます。
縦型のカレンダーは、日付の横に予定、担当者、作業内容などを入力できるため、業務用の一覧表に向いています。
1日から31日までの行を準備しておけば、日付が少ない月でも表のレイアウトを維持できます。
月末を過ぎた行を空白にすれば、2月や30日までの月でも翌月の日付が混ざりません。
縦方向へコピーする数式【ROW関数】
続いては、ROW関数を使って縦に日付を増やす方法を確認していきます。
B5セルを1日目の開始位置とし、B5に次の数式を入力します。
=IF($B$2+ROW(A1)-1>EOMONTH($B$2,0),””,$B$2+ROW(A1)-1)
ROW(A1)は1を返すため、最初の行では基準月の1日が表示されます。
数式を1行下へコピーするとROW(A2)となり、2が返されます。
その結果、基準日から1日加算された2日が表示される仕組みです。
31行目までオートフィルすると、月末を超えた位置はIF関数により空白になります。
ROW関数は縦方向の連番作成に適しており、コピー先の行に応じて日数が自動計算されます。
【操作のポイント】ROW(A1)のA1は参照先として使うのではなく、1から始まる連番を得る目的で記述します。

曜日と予定欄の連携【空白行の維持】
続いては、日付が空白になった行で曜日や予定欄を整える方法を確認していきます。
C5セルに曜日を表示するなら、次の数式を入力して下へコピーします。
=IF(B5=””,””,TEXT(B5,”aaa”))
日付が入っている行だけ曜日を返すため、月末より後の行に曜日が残りません。
予定欄は手入力用として空欄のままにしても問題ありません。
不要な行を目立たなくしたい場合は、日付列が空白の行に薄い灰色を付ける条件付き書式も役立ちます。
ただし印刷する帳票では、空白行の罫線を残しておくと記入欄として使える場合もあります。
【操作のポイント】曜日の数式は日付セルだけを参照し、予定入力欄には数式を入れない運用が扱いやすいです。
月変更時の確認項目【表示形式と印刷範囲】
続いては、基準月を変更したときに確認したい項目を解説していきます。
まずB2の基準月を変更し、1日と月末日の表示が正しく切り替わるかを確認します。
次に、30日までの月では31日行が空白になること、31日までの月では31日が表示されることを確認しましょう。
2月についても、通常年なら28日、うるう年なら29日で止まるかを確認すると安心です。
EOMONTH関数はうるう年を自動判定するため、2月の日数を別途入力する必要はありません。
印刷範囲が固定されている場合は、空白行まで含めて見た目が崩れないかをプレビューで確認してください。
【操作のポイント】4月、5月、2月の3パターンで確認すると、月末判定の設定ミスを見つけやすくなります。
月末日を求める関数の活用【EOMONTHとDATE】
| 基準日 | 数式 | 結果 |
|---|---|---|
| 2026/2/1 | =EOMONTH(A2,0) | 2026/2/28 |
| 2028/2/1 | =EOMONTH(A3,0) | 2028/2/29 |
続いては、カレンダーの中心となる月末日の求め方を確認していきます。
EOMONTH関数は、指定した日付を基準に、指定月数前後の月末日を返す関数です。
月の日数を直接数える必要がないため、カレンダー、締切日、請求期間、勤務表など幅広い場面で利用できます。
B
罫線
中央揃え
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 項目 | 基準月 | 月末日 | |
| 2 | 日付 | 2026/9/1 | 2026/9/30 | |
| 3 |
EOMONTH関数の構文【月末日の取得】
続いては、EOMONTH関数の構文を確認していきます。
=EOMONTH(開始日,月)
開始日には基準となる日付を指定します。
月には、開始日から何か月後または何か月前の月末を求めるかを指定します。
0を指定すると開始日と同じ月の月末日、1を指定すると翌月末日、-1を指定すると前月末日です。
カレンダーで必要なのは通常EOMONTH(基準月,0)であり、現在表示している月の最終日を得られます。
基準日が9月1日でも9月25日でも、結果は同じ9月30日になります。
【操作のポイント】月末日をセルに一度表示しておくと、数式の確認やトラブルの切り分けが容易になります。
DATE関数による月初日の作成【年月入力との連携】
続いては、年と月を別々に入力する場合の月初日作成を確認していきます。
たとえばB2に年、C2に月を入力する管理表では、DATE関数で対象月の1日を作れます。
=DATE(B2,C2,1)
この数式は、B2の年、C2の月、日付の1を組み合わせて日付を返します。
作成した月初日セルをEOMONTH関数の開始日に指定すれば、月末日も正しく計算されます。
年と月をプルダウンで選択するカレンダーにも応用できます。
DATE関数を使うと、月を1から12の数値で管理でき、翌年への切り替えも安定します。
【操作のポイント】年と月を別セルにする場合も、最終的にはDATE関数で日付値を作ってから計算します。
月末判定で起こりやすいエラー【日付形式の確認】
続いては、月末まで日付が表示されない場合の確認点を解説していきます。
最も多い原因は、基準月セルが日付ではなく文字列として入力されていることです。
セルを左寄せで表示している場合や、数式バーに先頭のアポストロフィがある場合は文字列の可能性があります。
また、EOMONTH関数の結果がシリアル値として表示される場合は、セルの表示形式を日付に変更してください。
数式そのものが正しくても、参照セルが文字列なら日付計算は期待どおりに進みません。
数式をコピーした際に基準月セルがずれる場合は、$記号による絶対参照が不足しています。
【操作のポイント】基準月セル、月末日セル、日付表示セルの3か所を日付形式にして計算結果を確認します。
実務用カレンダーの見やすい整え方【表示形式と条件付き書式】
| 設定項目 | 設定例 | 効果 |
|---|---|---|
| 日付表示 | d | 日だけを表示 |
| 曜日表示 | aaa | 月、火、水を表示 |
| 土日色分け | 条件付き書式 | 休日を判別しやすい |
続いては、自動計算した日付を業務で見やすく使うための整え方を確認していきます。
数式で日付が正しく表示されても、曜日や休日が分かりにくいとカレンダーとしての使い勝手が下がります。
表示形式と条件付き書式を組み合わせると、毎月更新しやすい実用的なテンプレートになります。
日付表示形式の設定【dとm/d】
続いては、日付セルの表示形式を整える方法を確認していきます。
カレンダーの列見出しに日だけを表示したい場合は、セルの書式設定でユーザー定義を選び、種類にdを指定します。
月日を省略せず表示する場合は、m/dを指定してください。
縦型の予定表では、m/d(aaa)とすると9/1(火)のように日付と曜日を一緒に表示できます。
表示形式は見た目だけを変える設定なので、日付の計算値や月末判定には影響しません。
【操作のポイント】計算用の日付はそのままにして、用途に応じて表示形式だけを変更します。
土日を色分けする条件付き書式【WEEKDAY関数】
続いては、土曜日と日曜日を色分けする方法を確認していきます。
日付がB5から右に並ぶ場合は、条件付き書式の数式ルールでWEEKDAY関数を利用できます。
=WEEKDAY(B5,2)=6
=WEEKDAY(B5,2)=7
第2引数を2にすると、月曜日が1、土曜日が6、日曜日が7になります。
土曜日用のルールには青系、日曜日用のルールには赤系の文字色または塗りつぶしを指定するとよいでしょう。
空白セルには色を付けたくない場合、条件の先頭にB5<>””を加えます。
【操作のポイント】条件付き書式の適用先は、日付セルと曜日セルを含めて指定すると視認性が上がります。
入力欄を残す印刷レイアウト【空白日の扱い】
続いては、月末後の空白セルを含む印刷レイアウトを確認していきます。
31日までの枠を常に残す設計では、30日までの月の最終列や2月後半の行が空白になります。
空白セルの罫線を消すと表が不規則に見えるため、帳票では罫線を残す方法がよく使われます。
一方で、月末以降の不要部分を明確にしたい場合は、条件付き書式で薄いグレーにする方法もあります。
月ごとに列幅や印刷範囲を変更しないことが、テンプレートを長く使い続けるコツです。
【操作のポイント】印刷プレビューを確認し、空白日付の枠が予定欄として誤解されないデザインに整えます。
まとめ エクセルのカレンダーで月末まで日付を自動表示する方法(31日・30日)
| 目的 | 使う関数 |
|---|---|
| 当月の月末日を取得 | EOMONTH |
| 月末後を空白にする | IF |
| 曜日を表示 | TEXT |
Excelのカレンダーで月末まで日付を自動表示するには、基準月を1つのセルに用意し、EOMONTH関数で月末日を取得する方法が基本です。
横型カレンダーでは、左のセルに1日を加えながら月末日と比較し、月末を超えた場合に空白を返します。
縦型カレンダーでは、ROW関数を利用すると、コピー先の行に応じて日付を連続表示できます。
30日までの月、31日までの月、2月、うるう年をすべて同じ数式で扱える点が大きなメリットです。
曜日はTEXT関数、土日表示はWEEKDAY関数を組み合わせると、予定表や勤務表としてさらに使いやすくなります。
月ごとに日付を手で直す作業をなくしたい場合は、今回の数式をテンプレートに組み込み、基準月だけを変更する運用にしてみましょう。