77Lifeworkベータ版

77Lifeworkベータ版

IT関係の話(ツール開発・インフラ構築)をメインとして、その他私の趣味や雑記用のブログです。ここに書いた内容が少しでも参考になれば嬉しいです。

【Excel VBA】明日以降の直近の土曜日の日付を取得する方法

はじめに

こんにちは。
今回はExcel VBAで明日以降の直近の土曜日の日付を取得する処理を書いてみました。
ちょっと別のプログラムを書いているときに上の処理が必要な場面に出くわしたので、備忘録的な意味でもあります。

今回の処理を実装すると、本日日付が「2021/9/26」で日曜日だった場合に、次の土曜日の日付である「2021/10/2」を取得することができる、というわけです。

イメージとしては、以下のような感じですね。
f:id:J-back:20210926192327p:plain:w600


動作環境

以下です。普通の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と出力されます。
f:id:J-back:20210926190219p:plain:w600


今回は直近の土曜日を取得するというテーマですが、同様の考え方で直近の日曜日など、任意の曜日も取得できるので、
必要となった際はこちらを参考にしてもらえると嬉しいです。


おわりに

今回はExcel VBAで明日以降の直近の土曜日の日付を取得する方法についての記事でした。
最後まで読んでいただきありがとうございました。