前回基本的な日付の処理について紹介しました。今回の Part2 では、月末処理の方法を紹介します。
月末の処理
今回作成する表では、日付のセル列数を31セルで固定しています。 したがって、30日までしかない月や2月末は、セルを空白にする表示法を採用しています。
30日までの月
31日までの月は、1月、3月、5月、7月、8月、10月、12月です。 入力フォームに入力された月がこれらの月のとき、前月の31日を空欄にします。
年月をOR関数を使って "D5" セルの値を参照し、判断させます。
=IF(OR(MONTH($D$5)=3,MONTH($D$5)=5,MONTH($D$5)=7,MONTH($D$5)=10,MONTH($D$5)=12),"",DATE(YEAR(D5),MONTH(D5)-1,31))
OR関数で、3月、5月、7月、10月、12月が入力されたとき空欄に、それ以外は "31" を表示します。 注意点は、1月と8月は31日までの月が連続していますので、OR関数には含めないことです。
2月末の処理
30日の処理は、簡単です。
30日が空欄になる月は、2月のみです。
=IF(MONTH($D$5)=3,"",DATE(YEAR(D5),MONTH(D5)-1,30))
"D5" セルの値を参照して、3月が入力されていれば空欄、それ以外は "30" を表示します。
2月29日の処理とうるう年の判定
29日は、通常年であれば空欄で良いのですが、うるう年には表示させておく必要があります。
ここでは、最も簡単なうるう年の判定法を使って、処理しています。
=IF(MONTH($D$5)=3,IF(TEXT(DATE(YEAR($D$5),3,1)-1,"d")="29",DATE(YEAR(D5),MONTH(D5)-1,29),""),DATE(YEAR(D5),MONTH(D5)-1,29))
IF関数が複数重なって少しわかりにくいですが、うるう年の判定法として、TEXT関数を使った判別法を用いています。
TEXT(DATE(YEAR($D$5),3,1)-1,"d")="29"
DATE関数で「"D5" セルに入力された年の3月1日」のシリアル値を求め、そこから1日引いた日付をTEXT関数で文字列化します。その値が29かどうかを判断する方法です。
通常年であれば28が、うるう年であれば29が返ってきます。
全体としては、 "D5" セルの値が3月ならば、うるう年判定をして "29" が返ってくれば "29" を表示、"29" でなければ空欄、3月以外は "29" を表示、という内容になっています。
これでシリアル値を利用した日付の表示が完成しました。シリアル値を利用することで、曜日を判別することができるようになります。 次回は、曜日の自動入力について紹介します。