VB VBA 月の何週目かを計算する ― 2008年04月02日 20時56分25秒
Function fx_Date_NthweekWeekday(ByVal myYEAR As Long, _
ByVal myMonth As Long, _
ByVal myNth As Long, _
ByVal myWeekday As Long, _
Optional ByVal myStartWeekday As Long = vbSunday)
'myYear,myMonthで指定された年月のなかで、第myNth週の(myWeekdayで指定された)曜日の日付を求める
'パラメータ:
'myWeekday ---> 求める曜日を指定
'myStartWeekday ---> 週の開始曜日(省略可:省略時、日曜日)
'myWeekday: 日曜日 ---> vbSunday
' 月曜日 ---> vbMonday
' 火曜日 ---> vbTuesday
' 水曜日 ---> vbWednesday
' 木曜日 ---> vbThursday
' 金曜日 ---> vbFriday
' 土曜日 ---> vbSaturday
'指定された週に指定された月の日付がないときはNullを返す。
'例1: 1日が木曜日の時、その週の日曜日から水曜日までのいずれかを求めようとした場合、Nullを返す。
'例2:31日が金曜日の時、その週の土曜日を求めようとした場合、Nullを返す。
Dim myDateFst As Date
Dim myWeekdayFst As Long
Dim myWeekdayW As Long
Dim myCorrection As Long
'指定年月の1日の日付を得る
myDateFst = DateSerial(myYEAR, myMonth, 1)
myWeekdayFst = Weekday(myDateFst, myStartWeekday)
myWeekdayW = ((myWeekday - myStartWeekday + 7) Mod 7) + 1
'求めた日付から指定曜日を求めるための補正値を求める。
myCorrection = myWeekdayW - myWeekdayFst + (myNth - 1) * 7
'指定週の指定曜日の日付を求める。
fx_Date_NthweekWeekday = DateAdd("d", myCorrection, myDateFst)
'求めた日付の月が、求めようとしている月と同じか確認する。
'If Month(fx_Date_NthweekWeekday) <> myMonth Then
'fx_Date_NthweekWeekday = Null
'End If
End Function
最近のコメント