簡易カレンダーの作成
昨日、一昨日と、日付に関するユーザー定義関数を紹介してきました。
- 指定月の最終金曜日を求める
- 毎月20日が土日だった場合、翌月曜日の日付を求める
これを応用すれば、以下の日付を求めることも容易です。
- 指定月の第一土曜日を求める
これは例えば、一列目が日曜日のカレンダーの作成などに使用できます。
Function GetFirstSaturday(target_date As Date) As Date Dim ThisMonthFirstDay As Date ThisMonthFirstDay = DateSerial(Year(target_date), _ Month(target_date), 1) GetFirstSaturday = ThisMonthFirstDay + 7 - _ Weekday(ThisMonthFirstDay) End Function
まず、一行目の七列目に、その月の第一土曜日を表示します。なお「その月」は今回、二行上の「年月を表すセル」を参照して取得します。
ここまでできれば、完成したも同然です。
- 左隣は1日前
- 右隣は1日後
- 一列目は、一行上の七列目の1日後
などのように、カレンダーお決まりの法則で日付を当てはめていきます。
前後月の日付が紛らわしいので、条件付き書式で表示を変えてみます。ついでに日曜日は赤、土曜日は青にしてみましょう。
丸々コピーして、翌月のカレンダーも作成できます。
「翌月」の指定には、EDATE関数が便利です。指定日の指定カ月後の日付を求めることが出来ます。
さらに展開すれば、1年分のカレンダーも作成可能です。しかも、A1セルの日付のみ変更することで、対応するカレンダー全てが自動更新されて便利です。
ただし相変わらず、祝祭日や企業独自の出勤日 および 定休日などには対応できていません。対応させるためには、さらに工夫が必要です。
参考まで。