【Excel】エクセルで31日がない月の日付を非表示にする方法
Excelで月間予定表や勤務表、日報のひな形を作成すると、31日まで固定で日付を表示しておきたい場面があります。
ただし、4月や6月、9月、11月では31日が存在せず、2月では29日や30日も不要になるため、存在しない日付を空白にしたいと考える方は多いでしょう。
手入力で毎月消す方法もありますが、月を変更するたびに作業が発生し、削除漏れや数式の崩れにつながるかもしれません。
そこで便利なのが、対象月の末日を判定するEOMONTH関数と、条件によって表示内容を切り替えるIF関数の組み合わせです。
存在しない日付を非表示にする基本の考え方は、作成した日付が対象月の末日以前かを確認し、末日を超えた場合だけ空白文字を返すことです。
この記事では、月を入力するだけで30日までの月、31日までの月、うるう年の2月にも対応できる日付表の作り方を解説します。
サンプルデータは、1行目に見出しがあり、A列に日付、B列に曜日、C列に予定を表示する形式として進めます。
エクセルで存在しない日付を非表示にする数式
それではまず、31日がない月でも不要な日付を自動で空白にする基本の数式について解説していきます。
| 対象月 | 日付 | 曜日 | 予定 |
|---|---|---|---|
| 2026/4/1 | 2026/4/29 | 水 | 月末処理 |
| 2026/4/1 | 2026/4/30 | 木 | 締め作業 |
| 2026/4/1 | 空白 | 空白 | 空白 |
対象月と連番を用意する手順
まずは、日付を作る基準になる対象月を準備しましょう。
たとえばF1セルに対象月として2026年4月1日を入力し、表示形式をyyyy年m月に設定します。
A1セルには日付、B1セルには曜日、C1セルには予定という見出しを入力してください。
A2セルから下方向に、1日から31日までに対応する日付を表示する構成です。
日付を直接31個入力するよりも、基準日と行番号から日付を生成する設計にすると、翌月以降も使い回しやすくなります。
F1セルには対象月の1日を入力します。
例として2026/4/1を入力し、日付として認識されていることを確認してください。
対象月を文字列で入力すると、日付計算でエラーになる場合があります。
入力後にセルを選択し、数式バーに2026/4/1のような日付値が表示される状態にしておくと安心です。
月末日を判定するEOMONTH関数
次に、対象月の最終日を取得するEOMONTH関数を使います。
EOMONTH関数は指定した日付を基準にして、指定した月数だけ前後した月の月末日を返す関数です。
対象月自身の末日を求める場合は、月数に0を指定します。
対象月の最終日を求める数式です。
=EOMONTH($F$1,0)
F1セルが2026/4/1なら、この数式の結果は2026/4/30になります。
F1セルを2026/2/1に変更した場合は、年によって2月28日または2月29日が返されます。
つまり、月ごとに末日の日数を手入力する必要がありません。

月末の判定を数式に組み込めば、4月だけ30日までにする、といった個別の分岐設定も不要です。
IF関数で空白を返す数式
続いては、実際にA2セルへ入力する数式を確認していきます。
A2セルに次の数式を入力してください。
=IF($F$1+ROW(A1)-1<=EOMONTH($F$1,0),$F$1+ROW(A1)-1,””)
この数式では、F1セルの対象月にROW関数で得た連番を加え、作成した日付が月末日以前かどうかを判定しています。
ROW(A1)は1を返すため、A2セルでは対象月の1日が表示されます。
数式をA32セルまでコピーすると、30日までの月では31日部分が空白になり、2月では月末以降がすべて非表示になります。
空白を返す部分は半角の二重引用符2つであり、スペースを入力するわけではありません。

【操作のポイント】数式内のF1は絶対参照にしておくと、下方向へコピーしても対象月のセルがずれません。
日付数式を下へコピーするオートフィル操作
続いては、作成した数式を31日分まで効率よく複製するオートフィルの操作を確認していきます。
| セル | 入力内容 | 4月の表示結果 |
|---|---|---|
| A2 | 数式を入力 | 4月1日 |
| A31 | オートフィル | 4月30日 |
| A32 | オートフィル | 空白 |
フィルハンドルをドラッグする操作
A2セルに基本の数式を入力したら、そのセルをクリックして選択します。
選択枠の右下にある小さな四角がフィルハンドルです。
フィルハンドルをA32セルまでドラッグすると、相対参照部分だけが自動調整されながら数式がコピーされます。
日付表が31日まで必要な場合は、見出し行を除いて31行分の範囲を確保しておきましょう。
31日がない月でもセルそのものは残りますが、表示内容だけが空白になります。
ドラッグ中に行を数えにくい場合は、名前ボックスへA2:A32と入力して範囲を確認する方法も便利です。

コピー後にA32セルを選択し、数式バーにIF関数が入っていることを確認してください。
ダブルクリックでコピーする条件
表の隣に連続したデータがある場合は、フィルハンドルをダブルクリックする方法も使えます。
ただし、ダブルクリックによるオートフィルは、隣接列の連続データを目安にコピー範囲を決めます。
予定表の作成途中で隣の列が空白なら、必要な行までコピーされないことがあります。
このため、31行の決まった範囲へ日付を展開する今回の用途では、ドラッグまたはコピーと貼り付けの方が確実です。
表示が空白でも数式はセルに残るため、翌月へ変更したときは必要な日付が再び表示されます。
この仕組みを理解しておけば、空白セルを削除して表の形を変える必要はありません。

日付表示形式を整える設定
日付の値が正しく表示されても、2026/4/1のような長い表記では予定表が見づらいことがあります。
A2:A32を選択して、セルの書式設定から表示形式をd日またはm/dに変更しましょう。
月間カレンダーではd日、複数月を並べる管理表ではm/dが使いやすい表示です。
数式の結果が空白なら、表示形式を変更しても不要な31日は表示されません。
日付が連番の数値になってしまう場合は、セルの表示形式が標準になっている可能性があります。
日付の見た目だけを変更する表示形式の例です。
d日
m/d
yyyy/m/d
【操作のポイント】日付を消すためにセルを削除すると行番号や予定欄がずれるため、数式で空白表示にする方法を維持しましょう。
曜日と予定欄を連動させる表示設定
続いては、日付が空白になったときに曜日欄や予定欄まで整えて見せる設定を確認していきます。
| 日付 | 曜日数式 | 表示 |
|---|---|---|
| 2026/4/30 | =TEXT(A31,”aaa”) | 木 |
| 空白 | IFで判定 | 空白 |
曜日を空白連動にするTEXT関数
曜日をB列に表示する場合、B2セルには日付セルが空白かどうかを先に判定する数式を入力します。
=IF(A2=””,””,TEXT(A2,”aaa”))
A2セルに日付があればTEXT関数で月、火、水のような曜日を返し、A2セルが空白ならB2セルも空白になります。
日曜日から土曜日までを日本語で表示したい場合、表示形式のaaaは扱いやすい指定です。
曜日を曜日名で長く表示したいときは、aaaaへ変更すると日曜日や月曜日の形式になります。
空白の日付に対してTEXT関数だけを使うと意図しない表示になることがあるため、IF関数で先に判定する構成が安全です。
予定欄を見やすくする罫線と条件付き書式
存在しない日付の行では、予定欄の罫線や背景色も目立たなくしたい場合があります。
この場合は、A2セルが空白であることを条件にした条件付き書式を設定します。
A2:C32を選択し、ホームタブの条件付き書式から新しいルールを選択してください。
数式を使用して書式設定するセルを決定を選び、数式欄に=$A2=””と入力します。
書式ではフォント色を白または背景と同じ色にし、必要に応じて罫線をなしに設定すると、月末以降の行が自然に目立たなくなります。
実際の予定入力欄を残す必要があるなら、罫線を消さずに文字だけを非表示にする方法もあります。
この画面イメージのように、操作対象となる条件付き書式を確認しながら設定すると、範囲の選択漏れを防げます。
入力済みの予定を保護する考え方
31日がない月の予定欄へ以前の入力内容が残っていると、空白の日付に予定だけが表示されることがあります。
日付欄だけでなく、予定欄の表示にもA列を基準にした条件を設けると管理しやすくなります。
予定を別表から参照する場合も、A列が空白なら空白を返すIF関数を外側に付ける方法が有効です。
=IF($A2=””,””,XLOOKUP($A2,予定一覧!$A$2:$A$100,予定一覧!$B$2:$B$100,””))
この数式では、まず日付があるかを確認し、日付があるときだけXLOOKUP関数で予定一覧を検索します。
存在しない日付の行に検索式を実行しないため、見た目と計算の両方を整えやすくなります。
【操作のポイント】曜日、予定、備考などの日付に連動する列は、A列が空白なら空白を返す条件を共通で付けましょう。
月を変更して自動更新する予定表の作成
続いては、対象月を変更するだけで日付と非表示部分が切り替わる予定表の作り方を確認していきます。
| F1の対象月 | 最終表示日 | 空白になる日 |
|---|---|---|
| 2026/2/1 | 2月28日 | 29日から31日 |
| 2028/2/1 | 2月29日 | 30日と31日 |
| 2026/7/1 | 7月31日 | なし |
対象月セルを入力規則で選択する設定
F1セルへ毎回日付を入力する運用では、誤った形式で入力してしまうことがあります。
入力規則を使って月初の日付だけを受け付けるようにすると、予定表の安定性が高まります。
簡単な方法としては、別シートに各月の1日を一覧で作り、F1セルにリストの入力規則を設定します。
たとえば管理用シートのA2からA25に月初日を入力し、その範囲をリストの元の値に指定してください。
利用者はプルダウンから対象月を選ぶだけでよくなります。
月初日ではなく月の途中の日付を入力しても基本数式は動作しますが、管理上は毎月1日に統一する方が分かりやすいでしょう。
翌月へ切り替えるEDATE関数
翌月の予定表を自動作成したい場合は、EDATE関数を使って対象月を1か月進められます。
=EDATE(F1,1)
この数式はF1セルの日付から1か月後の同じ日付を返します。
F1が月初日なら、結果も翌月の月初日になるため、月別シートや横並びの予定表に適しています。
前月へ戻す場合は、月数の引数を-1に変更してください。
EOMONTHは月末日を求める関数、EDATEは月を前後へ移動する関数と覚えると使い分けやすくなります。
月名を見出しへ表示するTEXT関数
予定表の上部に対象月を表示する場合、見出しセルにはTEXT関数を使うと読みやすい表記にできます。
=TEXT($F$1,”yyyy年m月”)&” 月間予定表”
F1セルが2026年4月なら、2026年4月 月間予定表と表示されます。
対象月を変更すると見出しも日付欄も同時に更新されるため、月別ファイルを複製して修正する手間を減らせます。
勤務表、予約一覧、経費管理表など、月ごとに同じレイアウトを使う書類にも応用可能です。
【操作のポイント】対象月を手入力するセルは表の外側に置き、色を付けて入力場所を明確にすると誤操作を防げます。
2月とうるう年に対応する日付判定
続いては、日数が毎年変わる2月でも正しく非表示にする仕組みを確認していきます。
| 対象年 | 2月の末日 | 29日表示 |
|---|---|---|
| 2026年 | 2月28日 | 空白 |
| 2028年 | 2月29日 | 表示 |
うるう年を手動判定しない理由
うるう年には4年ごとというイメージがありますが、100年ごとや400年ごとの例外もあります。
そのため、年を4で割るだけの簡易判定を予定表へ組み込むと、長期的には誤判定の原因になり得ます。
EOMONTH関数ならExcelの日付計算に基づき、その年の2月末日を自動で返します。
使用者がうるう年かどうかを意識しなくても、2028年2月では29日を表示し、2026年2月では空白にする処理が実現します。
この点が、月ごとに31日までの値を比較する単純な数式よりも優れているところです。
DATE関数を使う別の月末計算
EOMONTH関数が使えない古い環境や、月末日を求める仕組みを理解したい場合はDATE関数でも計算できます。
=DATE(YEAR($F$1),MONTH($F$1)+1,0)
DATE関数で翌月の0日を指定すると、結果として今月の最終日が返されます。
F1が2026/4/1なら、DATE関数は2026/5/0を内部計算し、4月30日を返す仕組みです。
この書き方も2月とうるう年に対応しますが、読みやすさの面ではEOMONTH関数を選ぶ方が無難です。
社内で使うテンプレートでは、後から見直す人が理解しやすい関数を使うことも大切でしょう。
空白とゼロ表示を区別する確認
月末以降のセルに0や1900年1月0日のような値が表示される場合、空白を扱う数式が不足している可能性があります。
日付の基になるセルが空白であることを確認し、参照先の数式にもIF関数を入れてください。
数式の返り値を0にすると、セルの書式によっては日付として表示されてしまいます。
今回のように視覚上非表示にしたい場合は、0ではなく””を返すことが重要です。
空白文字と数値のゼロはExcelでは別の値であり、集計関数やグラフにも異なる影響を与えます。
【操作のポイント】2月のテストでは平年と、うるう年の両方へ対象月を変更し、29日の表示が正しく切り替わるか確認しましょう。
数式エラーと非表示にならない場合の確認
続いては、31日が消えない、日付が連続しない、エラーが表示される場合の確認ポイントを解説していきます。
| 症状 | 主な原因 | 確認内容 |
|---|---|---|
| 31日が表示される | 末日判定がない | EOMONTH関数 |
| 日付がずれる | 絶対参照漏れ | $F$1の指定 |
| #VALUE!エラー | 対象月が文字列 | 日付形式の入力 |
絶対参照が外れている場合
数式を下へコピーしたとき、F1がF2、F3へ変化しているなら絶対参照が設定されていません。
対象月のセルは$F$1と入力し、列記号と行番号の両方に$を付けてください。
数式編集時にF1セルをクリックしてからF4キーを押すと、参照形式を切り替えられます。
正しい参照が保たれていれば、どの行でも同じ対象月を基準に日付が計算されます。
正しい例です。
$F$1+ROW(A1)-1
コピーでずれやすい例です。
F1+ROW(A1)-1
対象月が文字列になっている場合
F1セルに2026年4月と入力しても、環境や入力方法によっては文字列として扱われることがあります。
文字列ではEOMONTH関数が正しく計算できず、#VALUE!エラーが表示される場合があります。
セルを選択して数式バーを確認し、先頭にアポストロフィが付いていないかを確認しましょう。
入力し直すときは2026/4/1のように日付として認識しやすい形式を使うと安心です。
表示形式だけを変更しても、文字列そのものが日付値へ変換されるわけではありません。
数式のコピー範囲が不足している場合
30日までしか表示されない月がある場合、数式を31日分までコピーできていない可能性があります。
日付表ではA2からA32までを対象にすると、1日から31日までの31行を確保できます。
行番号を基準に数えるのではなく、実際の開始セルと終了セルを確認してください。
たとえばA2が1日なら、A32が31日です。
予定欄や曜日欄の数式も同じ最終行までコピーされているかを確認しましょう。
【操作のポイント】エラーを直すときは、最初に対象月セル、次に絶対参照、最後にコピー範囲の順で確認すると原因を絞り込みやすくなります。
まとめ エクセルで31日がない月の日付を非表示にする方法
Excelで31日がない月の日付を非表示にするには、対象月の末日をEOMONTH関数で求め、作成した日付が月末日以前かをIF関数で判定します。
基本となる数式は、=IF($F$1+ROW(A1)-1<=EOMONTH($F$1,0),$F$1+ROW(A1)-1,””)です。
この数式を31日分までオートフィルすれば、30日までの月では31日が空白になり、2月では29日以降も自動で非表示になります。
曜日や予定欄も、A列が空白なら空白を返すIF関数を付けると、表全体が自然な見た目になります。
うるう年を個別に判定する必要がないことも、EOMONTH関数を使う大きな利点です。
毎月の予定表や勤務表を作成するなら、対象月のセルを変更するだけで更新できるテンプレートとして保存しておくと便利でしょう。