下記は、「指定月の指定週の指定曜日は何日かを求める」サンプルです。
******************************
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()の実行を行ってください。
結果がメッセージボックスへ表示されます。
※例外処理は行われていません。
入力値が必ずある前提で関数は作成されています。
不正な入力値が引数として予想される場合は、入力値の
チェックを行ってください。