7月の最後の金曜日の求め方
職場の勉強会に、こんなテーマが寄せられました。
指定月の最終金曜日の日付を知りたい
最終金曜日に月次処理を行う業務があって、その日付を Excel で求められないか?というものでした。
早速二つのグループに分かれて、メンバーで討議しながらその場でマクロを作成します。オブザーバの私は基本的に発言しないルールなので、最初は黙って討論の様子を見ていました。
- Format(Date,aaa) で「金」かどうか調べたらどうか。
- 日付をループさせて、翌月になるまで調べたらどうか。
- 最終金曜日なので、後ろから調べたほうが楽ではないか?
- その月の最終日って、どうやって求めるの?
様々な意見があって、実に興味深い。自分たちで意見を出し合いながらマクロを作成するため、単なる座学より学習効果も高く、参加者からは好評です。
さて、最終的には幾つかアドバイスしてしまいましたが、二つのグループは同じような結論に達しました。清書すると、こんな感じです。
Function GetLastFriday(target_date As Date) As Date Dim NextMonthFirstDay As Date NextMonthFirstDay = DateSerial(Year(target_date), Month(target_date) + 1, 1) GetLastFriday = NextMonthFirstDay - Weekday(NextMonthFirstDay, vbSaturday) End Function
手法としては単純です。
- 翌月の1日を求める。
- 翌月の1日が、土曜始まりで1週間の何日目かを求め、それを翌月1日から引く。
8/1 ⇒ Weekday = 5 ⇒ 8月1日の5日前は7/27(金)
9/1 ⇒ Weekday = 1 ⇒ 9月1日の1日前は8/31(金)
10/1 ⇒ Weekday= 3 ⇒ 10月1日の3日前は9/30(金)
確かに手法としては単純ですが、独力で思いつくのは難しいかもしれません。
(私も教わった口です)。
参考まで。