はじめに
こんにちは。
今回はExcel VBAで明日以降の直近の土曜日の日付を取得する処理を書いてみました。
ちょっと別のプログラムを書いているときに上の処理が必要な場面に出くわしたので、備忘録的な意味でもあります。
今回の処理を実装すると、本日日付が「2021/9/26」で日曜日だった場合に、次の土曜日の日付である「2021/10/2」を取得することができる、というわけです。
イメージとしては、以下のような感じですね。
動作環境
以下です。普通のWindowsPCです。
・OS Windows10
・Excel 2019
VBAのコード
では直近の土曜日を取得するコードですが、以下です。
Functionとして定義して、他のmain処理などから呼び出す想定です。
動きとしては、
・Dateで本日の日付を取得
・Weekday(Date)で本日の曜日を取得
・本日の曜日によって7パターンに場合分け
・返却値が土曜日になるよう日付に日数を足す
という感じです。
ちなみにWeekday(Date)の返却値の整数は
1:日曜
2:月曜
3:火曜
4:水曜
5:木曜
6:金曜
7:土曜
となります。
Function getNextSaturday() As Date Select Case Weekday(Date) Case 1 getNextSaturday = DateAdd("d", 6, Date) Case 2 getNextSaturday = DateAdd("d", 5, Date) Case 3 getNextSaturday = DateAdd("d", 4, Date) Case 4 getNextSaturday = DateAdd("d", 3, Date) Case 5 getNextSaturday = DateAdd("d", 2, Date) Case 6 getNextSaturday = DateAdd("d", 1, Date) Case 7 getNextSaturday = DateAdd("d", 7, Date) End Select End Function
実際に呼び出して使用する際は、以下のように使用します。
Format(getNextSaturday(), "m/dd")の部分で直近の土曜日の日付を取得して、これを「m/dd」のかたちに整形しています。
このように日付型から文字列型にフォーマットして使用する方が何かと便利と思います。
Option Explicit Sub main() Dim strNextSaturday As String strNextSaturday = Format(getNextSaturday(), "m/dd") MsgBox("直近の土曜日は " + strNextSaturday + " です") End Sub Function getNextSaturday() As Date Select Case Weekday(Date) Case 1 getNextSaturday = DateAdd("d", 6, Date) Case 2 getNextSaturday = DateAdd("d", 5, Date) Case 3 getNextSaturday = DateAdd("d", 4, Date) Case 4 getNextSaturday = DateAdd("d", 3, Date) Case 5 getNextSaturday = DateAdd("d", 2, Date) Case 6 getNextSaturday = DateAdd("d", 1, Date) Case 7 getNextSaturday = DateAdd("d", 7, Date) End Select End Function
上のコードを実行すると、直近の土曜日は10/2と出力されます。
今回は直近の土曜日を取得するというテーマですが、同様の考え方で直近の日曜日など、任意の曜日も取得できるので、
必要となった際はこちらを参考にしてもらえると嬉しいです。