t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA 過去直近のX曜日を求めるワンライナーコード

今回はさくっと短めの記事。

まず過去直近の日曜(当日含む)の日付を求めるコードがこちら。

?date-weekday(date,vbSunday)+1

クエスチョンマークは、イミディエイトウインドウで実行することを想定して書いている。
そして当日を含まない過去直近の日曜の日付を求めるコードはこちら。

?date - weekday(date-1,vbSunday)

どちらも曜日定数を代えると直近のその曜日が取れる。

結論は以上。

ここからは余談

当日を含まない方で、まず私が考えたのがIf文で当日の場合だけ分岐させる方法。

?iif(date = date-weekday(date,vbSunday)+1, date -7, date-weekday(date,vbSunday)+1)

もうちょっと楽にならんかなとTwitterでぼやいたところ、はけた氏より以下のアドバイスをいただいた。

weekdayの中で「date+1」とか「date-1」とか入れたら、簡単になりませんか?

なるほど、賢い。

当日を含めたくないなら、単純に前日起算してやれば良いのだ。
ということで両方のdateから1を引く。

?date-1-weekday(date-1,vbSunday)+1

 -1と+1を相殺して、こう。

?date - weekday(date-1,vbSunday)

完成。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。