この関数は、引数で指定された期間内に、どの曜日が何回あったかを取得す
るものです。
● サンプル ●
汎用関数ですので、標準プロシージャに以下のコードを記述して下さい。
'引数説明
'dtStart :期間開始日
'dtEnd :期間終了日
'iWeekDay :求めたい曜日
' 1=日曜日 2=月曜日 3=火曜日 4=水曜日 5=木曜日
' 6=金曜日 7=土曜日 VBの曜日定数でも可(vbSundayなど)
Public Function GetWeekDay(ByVal dtStart As Date, ByVal dtEnd As Date, _
iWeekday As Integer) As Long
Dim lngDay As Long '期間の日数
Dim lngWeek As Long '週の数
Dim lngRest As Long '週の余りの数
Dim lngEndDay As Long '期間の終わりの曜日
'計算処理
'期間の日数を取得
lngDay = DateDiff("d", dtStart, dtEnd) + 1
'週の数を取得
lngWeek = Int(lngDay / 7)
'余った日を取得
lngRest = lngDay - lngWeek * 7
'終了日の曜日を取得
lngEndDay = Weekday(dtEnd, iWeekday)
'条件判断
If lngEndDay > lngRest Then
GetWeekDay = lngWeek
Else
GetWeekDay = lngWeek + 1
End If
End Function
● 動作確認 ●
以下のコードを標準モジュールに記述し、実行して下さい。
Private Sub test()
Debug.Print GetWeekDay(#1/1/1901#, #12/31/2000#, vbSunday)
End Sub
イミディエイトウィンドウに「5218」と表示されます。
どうやら20世紀には、日曜日が5218回あるようです。
● 詳細 ●
サンプルでは、引数によって指定された期間の日数を計算し、週の数と余り
の日数を求め、最後に終了日と余りの日数を比較することで、特定の曜日の数
を取得しています。
処理のポイントは「iEndDay = Weekday(dtEnd, iWeekday)」ですね。
求めたい曜日を基準に期間終了日の曜日を取得し、7で割り切れなかった余り
の日数との差を計算しています。
なお、このサンプルでは引数の期間開始日、期間終了日共に「含めた」状態
で計算します。
また、日付リテラル文字は米国式に「mm/dd/yyyy」と記述しています。
「yyyy/mm/dd」でも問題なく動作しますが、JETエンジンは基本的に米国式
の日付を扱いますので、米国式で記述するようにして下さい。
|