[VBA]指定月の指定週の指定曜日は何日かを求める

Riichi

2010年08月24日 13:24

下記は、「指定月の指定週の指定曜日は何日かを求める」サンプルです。

******************************
Option Explicit

'テスト用の実行関数
Public Sub test()

  Dim myDay As String
  myDay = GetTargetWeekDay("2010/7", 1, vbMonday)  '有効な場合
  MsgBox ("有効な日付: " & myDay & " 日です。")

  myDay = GetTargetWeekDay("2010/7", 9, vbMonday)  '無効な場合
  MsgBox ("無効な日付: " & myDay & " 日です。")
  
End Sub

'*************************************
' 機 能:指定月の指定週の指定曜日は何日かを求める。
' 引 数:日付(年月 2008/8)
'     指定週(数字)
'     指定曜日(数字)
'      vbSunday    1  日曜
'      vbMonday    2  月曜
'      vbTuesday   3  火曜
'      vbWednesday  4  水曜
'      vbThursday   5  木曜
'      vbFriday    6  金曜
'      vbSaturday   7  土曜
'
' 戻り値:有効な日付(該当の日付文字)、無効な日付("")
'*************************************
Private Function GetTargetWeekDay(ByVal str年月 As String, _
    ByVal int指定週 As Integer, ByVal int曜日 As Integer) As String
  
  Dim Dt As Date
  Dim nextDt As Date
  Dim intFirstWeekDay As Integer
  Dim intTargetWeekDay As Integer
  
  '引数に"/01"を加えて日付として判定できるかをチェック
  If IsDate(str年月 & "/01") Then
    Dt = CDate(str年月 & "/01")
  Else
    GetTargetWeekDay = ""
    Exit Function
  End If
  
  'チェックに使用する翌月の1日を求める。
  nextDt = CDate(Year(Dt) & "/" & (Month(Dt) + 1) & "/01")

  '1週目の指定曜日の日付を求める
  intFirstWeekDay = (((int曜日 + 8) - (CInt(Weekday(Dt)) + 1)) Mod 7) + 1
  
  '指定週の日付を求める
  intTargetWeekDay = intFirstWeekDay + ((int指定週 - 1) * 7)
  GetTargetWeekDay = str年月 & "/" & intTargetWeekDay
  
  '算出した日付が有効かどうかをチェックする。
  If IsDate(GetTargetWeekDay) = False Then
    GetTargetWeekDay = ""
    Exit Function
  End If
  
End Function

******************************

[サンプルの実行の仕方]

1.上記の *** で囲まれた内容をコピペし、エクセルマクロ(モジュール)へ
  貼り付けます。
2.マクロ又は、Visual Basic Editerで、Main()の実行を行ってください。
  結果がメッセージボックスへ表示されます。

 ※例外処理は行われていません。
  入力値が必ずある前提で関数は作成されています。
  不正な入力値が引数として予想される場合は、入力値の
  チェックを行ってください。

関連記事