【EXCEL VBA】次の月曜日を取得したい

次の月曜日を取得する方法を紹介します。応用として、次の○曜日を取得する方法も併せて紹介します。

WorksheetFunction.WorkDay_Intlで解決する

通常だとWeekday関数を利用すると思います(サンプルプログラムの方法1)。今回はWorksheetFunction.WorkDay_Intl関数を利用する方法を紹介します。第3引数は、週末を指定します。文字列で指定した場合は、0が営業日、1が週末(休み)となります。左から月火水木金土日を表します。月曜日以外を週末(休み)とすることで、次の月曜日を求めています。

サンプルプログラム(コピペでOK)

Option Explicit

Sub sample()

    Dim day As Date
    day = #7/8/2022#
    Debug.Print day; WeekdayName(Weekday(day))      ' 2022/07/08 金曜日
    
    Dim day2 As Date
    
    ' 方法1
    day2 = day + 8 - Weekday(day, vbMonday)
    Debug.Print day2; WeekdayName(Weekday(day2))    ' 2022/07/11 月曜日
    
    
    ' 方法2
    day2 = WorksheetFunction.WorkDay_Intl(day, 1, "0111111")
    Debug.Print day2; WeekdayName(Weekday(day2))     ' 2022/07/11 月曜日

    ' "0111111" 7桁の数字は左から月火水木金土日に割り当てられています。取得したい曜日に0を設定してください。
    ' 水曜日に設定したい場合は、"1101111"とします。
    ' 方法2’
    day2 = WorksheetFunction.WorkDay_Intl(day, 1, "1101111")
    Debug.Print day2; WeekdayName(Weekday(day2))     ' 2022/07/13 水曜日日

End Sub