カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

VBで指定した日の曜日が月のうち何回目かを調べる

この記事は最終更新日から1年以上経過しています。

今回は、「今日は第何○曜日か知りたい」という時に使えるプログラムを紹介します。
今日が金曜日だと仮定して、今月のうち何回目の金曜日かを知りたい時に使います。

2つの日時の間隔を返すDateDiff関数を使って結果を求めます。

まずDateDiffの第1引数には「ww」を指定し、週の開始曜日をカウントの基準に設定します。
そして第3引数である“週の開始曜日”に調べたい日の曜日を入力することによってその曜日が月のうち何回目なのかを取得することができます。

ソースは次のようになります。

Dim year As Integer
Dim mon  As Integer
Dim day  As Integer
Dim ww   As Integer

year = 2020
mon = 7
day = 10

ww = DateDiff("ww", DateSerial(year, mon, 0), _
    DateSerial(year, mon, day), _
    Weekday(DateSerial(year, mon, day)))

Debug.Print ww & "回目"

出力結果は

2回目

となります。

ここでのポイントはDateDiffの第2引数には前月の末日を入れています。
ここを1日にしてしまうと本来1週目のところがカウントされないので、結果が1少なくなってしまいます。
第2引数を前月の末日とすることで1週目の該当曜日を1とカウントしてくれます。

末日を取得することについては[3ヶ月前の末日を取得する]をご覧ください。


このプログラムを検証するために1日から末日まで全部チェックしていたのですが、そのソースは次にようになります。
参考として使ってください。

Dim year As Integer
Dim mon  As Integer
Dim days As Integer
Dim ww   As Integer
Dim dict As Object

'曜日の辞書を作成
Set dict = CreateObject("Scripting.Dictionary")

dict.Add 1, "日曜日"
dict.Add 2, "月曜日"
dict.Add 3, "火曜日"
dict.Add 4, "水曜日"
dict.Add 5, "木曜日"
dict.Add 6, "金曜日"
dict.Add 7, "土曜日"

year = 2020 ' 調べる年
mon = 7     '調べる月

'月の最終日を取得
days = Format(DateSerial(year, mon + 1, 0), "d")

'1日から最終日まで第何曜日か調べる
For d = 1 To days

    Debug.Print Format(DateSerial(year, mon, d), "yyyy/mm/dd")

    ww = DateDiff("ww", DateSerial(year, mon, 0), _
        DateSerial(year, mon, d), _
        Weekday(DateSerial(year, mon, d)))

    Debug.Print "第" & ww & dict.Item(Weekday(DateSerial(year, mon, d)))

    Debug.Print ""

Next d
この記事がお役に立ちましたらシェアお願いします
2,551 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です