エクセルのカレンダーや予定表で、2月の29〜31日や、4月の31日のように「ない日」を表示しないようにするには、日付の式を =IF(MONTH(DATE($B$1,$D$1,ROW()-3))=$D$1,DATE($B$1,$D$1,ROW()-3),””) のように IF関数で囲みます。作った日付の「月」が、表の月と同じときだけ日付を出し、違えば空欄にします。
DATE関数は 2月31日 のような日を「3月3日」に読みかえるので、そのままだと月末に翌月の日付が出てしまいます。この記事では、その原因と直し方を、実際の Excel の画面で説明します。
31日がない月で翌月の日付が出る原因
この予定表は、B4 から下に =DATE($B$1,$D$1,1)、=DATE($B$1,$D$1,2)…と、1日〜31日の日付を作っています(7〜28行目は非表示)。2027年2月にすると、29〜31日のところに 3/1・3/2・3/3 が出てしまいました❶。DATE関数は「2月29日(2027年はない日)」を「3月1日」に読みかえるからです。

IF関数で同じ月の日付だけ表示する
B4 をダブルクリックして、=IF(MONTH(DATE($B$1,$D$1,ROW()-3))=$D$1,DATE($B$1,$D$1,ROW()-3),””) と入れます❷。ROW()-3 は、4行目なら 1、5行目なら 2 …と日にちを作る部分です。

Enter を押して B34 までコピーすると、2027年2月の 29〜31日は空欄になりました❸。曜日の列も、日付が空なら空欄になる式(=IF(B4="","",TEXT(B4,"aaa")))にしてあります。

月を 4 に変えると❹、30日までが表示され、31日だけ空欄になりました❺。2028年2月(うるう年)にすると、29日まで表示されることも確かめました。

式の読み方
| 部分 | 意味 |
|---|---|
DATE($B$1,$D$1,ROW()-3) | B1 の年・D1 の月・その行の日にちで日付を作る |
MONTH(…)=$D$1 | 作った日付の月が、表の月(D1)と同じか |
IF(…, DATE(…), "") | 同じなら日付、違えば空欄 |
【実機で検証】月ごとの月末の表示
| 年・月 | 28日 | 29日 | 30日 | 31日 |
|---|---|---|---|---|
| 2027年2月 | 28 | 空欄 | 空欄 | 空欄 |
| 2027年4月 | 28 | 29 | 30 | 空欄 |
| 2028年2月(うるう年) | 28 | 29 | 空欄 | 空欄 |
条件付き書式で見えなくする方法
日付の式を変えたくないときは、条件付き書式で =MONTH(B4)<>$D$1 のときに文字の色を白にする方法もあります。ただし、値は残っているので、印刷では見えなくても、数えたり合計したりすると含まれます。空欄にしたいなら IF関数のほうが確実です。
うまくいかないときの確認表
| 症状 | 原因 | 対処 |
|---|---|---|
| 全部の日付が空欄になる | $D$1 の月が文字(「2月」など) | D1 は数字の 2 だけにする |
| 曜日の列に「土」などが残る | 曜日の式が空欄を見ていない | =IF(B4="","",TEXT(B4,"aaa")) にする |
| コピーすると日付がずれる | $ がなく年・月のセルが動いた | $B$1・$D$1 のように $ を付ける |
| #VALUE! になる | 空欄のセルで日付の計算をしている | IF で空欄のときは計算しないようにする |
よくある質問
横に並べたカレンダーでも同じですか?
同じ考え方で使えます。ROW()-3 の部分を COLUMN()-1 などに変えて、日にちを作ります。
月の最終日を出したいです。
=EOMONTH(DATE($B$1,$D$1,1),0) で、その月の最終日が出ます(EOMONTH関数)。

コメント