簡易カレンダーの作成

昨日、一昨日と、日付に関するユーザー定義関数を紹介してきました。

  • 指定月の最終金曜日を求める
  • 毎月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

まず、一行目の七列目に、その月の第一土曜日を表示します。なお「その月」は今回、二行上の「年月を表すセル」を参照して取得します。

f:id:Infoment:20180801062844p:plain

ここまでできれば、完成したも同然です。

  • 左隣は1日前
  • 右隣は1日後
  • 一列目は、一行上の七列目の1日後

などのように、カレンダーお決まりの法則で日付を当てはめていきます。

f:id:Infoment:20180801063230p:plain

前後月の日付が紛らわしいので、条件付き書式で表示を変えてみます。ついでに日曜日は赤、土曜日は青にしてみましょう。

f:id:Infoment:20180801063700p:plain

f:id:Infoment:20180801065118p:plain

丸々コピーして、翌月のカレンダーも作成できます。

f:id:Infoment:20180801064317p:plain

「翌月」の指定には、EDATE関数が便利です。指定日の指定カ月後の日付を求めることが出来ます。

f:id:Infoment:20180801064403p:plain

さらに展開すれば、1年分のカレンダーも作成可能です。しかも、A1セルの日付のみ変更することで、対応するカレンダー全てが自動更新されて便利です。

f:id:Infoment:20180801064841p:plain

ただし相変わらず、祝祭日や企業独自の出勤日 および 定休日などには対応できていません。対応させるためには、さらに工夫が必要です。


参考まで。