|
こんなのも有るよ
Excelのユーザー定義関数としても使えます
第1引数のvntDateには、調べたい月が含まれる日付を指定
例 2004年の5月を調べたいなら、2004/05/01〜2004/05/31を指定
第2引数は、調べたい曜日を番号で指定
日曜=1、月曜=2、、土曜=7とする
第3引数は、調べたい週を番号で指定
戻り値は、シリアル値が帰ります
例えば、5月の第2月曜が何日かを出すなら
= TheFirstWeek("2004/05/01", 2, 2)
とします
Public Function TheFirstWeek(ByVal vntDate As Variant, _
ByVal lngDayNum As Long, _
Optional lngNum As Long = 1) As Variant
' 月の第何曜日が何日かを取得
' vntDate :知りたい月が含まれる日付(例 2004/5/1)
' 年、月だけが有効
' lngDayNum :日曜=1、月曜=2、、土曜=7
' lngNum :第何週目
Dim i As Long
Dim lngYear As Long
Dim lngMonth As Long
TheFirstWeek = ""
'日付と認められない場合
If Not IsDate(vntDate) Then
Exit Function
End If
'曜日番号を計算上の番号に変換
lngDayNum = lngDayNum Mod 7
'年を取得
lngYear = Year(vntDate)
'月を取得
lngMonth = Month(vntDate)
'月初を取得
vntDate = DateSerial(lngYear, lngMonth, 1)
'第1週の指定曜日の日付を取得
vntDate = vntDate + ((7 - (vntDate Mod 7) + lngDayNum) Mod 7)
'指定の週の日付を取得
vntDate = vntDate + 7 * (lngNum - 1)
'月内に入る場合は戻り値とする
If vntDate >= DateSerial(lngYear, lngMonth, 1) _
Or vntDate >= DateSerial(lngYear, lngMonth + 1, 0) Then
TheFirstWeek = vntDate
End If
End Function
|
|