29日以降を自動で非表示にする

カレンダーでは月によって小の月、大の月など月末が28日や31日に変化します。
Excelで日程表などを作る際に、手作業で打ち込んだり、削除したりするのは面倒なので自動で表示・非表示出来るようにします。
今回はVBAを使わずに数式マクロだけで行います。日程表や月報などでよく使うテクニックです。
作り方

この日程表では、表題が「令和3年2月度」となっていますが、数式バーには、「2021/2/1」となっています。
これはセルの書式設定のユーザ定義で「[$-ja-JP]gge”年”m”月度”;@」としているためです。

今回は、日程表の基準をA1セルにして、日付と曜日を割り振っていきます。
日付(A列)の設定
A3は、A1を参照し、セルの書式設定はユーザ定義で「d」として日付のみ表示するようにしています。
セルの書式設定は、A3~A33までユーザ定義で「d」として日付のみ表示させます。

次のA4(2日目)~A30(28日目)までは、一つ上の行のセルに1を加えます。
A4を設定したら、A30までドラッグすれば良いでしょう。
A3 =A1
A4 =A3+1
A5 =A4+1
続いて小の月となる部分は以下の様にします。
A31 =IF(DAY($A$30+1)<28,””,$A$30+1)
A32 =IF(DAY($A$30+2)<28,””,$A$30+2)
A33 =IF(DAY($A$30+3)<28,””,$A$30+3)
この数式は28日の日付(A30セル)に1,2,3 をそれぞれ加えて、日付のみを取得し、28より小さい場合は空白。大きければ日付を表示しています。
曜日(B列)の設定
曜日は、左の日付を参照するだけです。あとはユーザーの書式設定からユーザ定義で「aaa」とすればその日の曜日を表示してくれます。
B1 =A1
B2 =A2
B3 =A3

使い方
A1のセルの日付を赤枠の数式バーで変更すれば、日付と曜日が変更されます。日付は1でないとダメです。

おまけ:「20日締め」の設定
上記のサンプルを応用して「20日締め」にしてみましょう。少ない変更で実現できます。
変更するのは、第1日目(21日)と、最後の3日間です。
第1日目は前の月の21日となりますので、数式マクロは以下の様になります。
A3 =DATE(YEAR(A1),MONTH(A1)-1,21)
セルの書式設定では、「月/日」という書式の方が分かりやすいのでユーザ定義は、「m/d」とします。

続いて最後の3日間は以下の様にします。
A31 =IF(DAY($A$30+1)>20,””,$A$30+1)
A32 =IF(DAY($A$30+2)>20,””,$A$30+2)
A33 =IF(DAY($A$30+3)>20,””,$A$30+3)
他の締日にしたい場合は、21と20の所を変更すれば良いでしょう。
まとめ
今回はVBAを使わずに数式マクロだけで月末の空白処理を実現してみました。
日付処理はExeclではよく使われますので参考にしてみてください。