- VB,VBA
- 2020-07-10 - 更新:2020-07-11
この記事は最終更新日から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,575 views