指定した月の最後の日曜日(またはその他の曜日)の日付を求めます。「最初」の方を求める方法についてはこちらをご覧ください。
月をどう指定するかを決める必要がありますが、ここでは右のようなテーブルを用いて、それぞれの日付が属する月の最後の日曜日(またはその他の曜日)を求めるものとします。
最後の日曜日を求める場合
まず月の最後の日曜日を求めるケースです。
クエリで次のような列を設けます。
(画像にある「月最後日曜日の曜日」列は確認のためであり、必要はありません)
月最後日曜日: DateSerial(Year([日付]),Month([日付])+1,1-Weekday(DateSerial(Year([日付]),Month([日付])+1,0)))
何をやっているのかというと、右側(内側)のDateSerial関数により日付の属する月の末日を求め、その日が日曜だったら翌月1日の1日前(1-Weekday関数の結果が0となるため。つまり日付の属する月の末日そのもの)、月曜だったら翌月1日の2日前、…、土曜だったら翌月1日の7日前の日付を求めています。
データシートビューです。
求められた日付はいずれも日曜日であり、求める結果が得られていることが分かります。
その他の曜日を求める場合
例として月の最後の金曜日を求めます。
クエリで次のような列を設けます。
(画像にある「月最後金曜日の曜日」列は確認のためであり、必要はありません)
月最後金曜日: DateSerial(Year([日付]),Month([日付])+1,1-Weekday(DateSerial(Year([日付]),Month([日付])+1,0),6))
日曜日を求める例と何が違うかというと、Weekday関数の第2引数として「6」を指定しています。
全体としては、まず右側(内側)のDateSerial関数で日付の属する月の末日を求め、その日が金曜だったら翌月1日の1日前(1-Weekday関数の結果が0となるため。つまり日付の属する月の末日そのもの)、月曜だったら翌月1日の2日前、…、木曜だったら翌月1日の7日前の日付を求めています。
月の最後の何曜日を求めるかは、このWeekday関数の第2引数を変えることで決められます。日曜日を求めるなら1とするか省略し(省略すれば最初の例と同じになります)、月曜日を求めるなら2とし、…、土曜日を求めるなら7を指定すればOKです。
データシートビューです。
求められた日付はいずれも金曜日であり、求める結果が得られていることが分かります。