即効テクニック |
● 概要 ● この関数は、引数で指定された期間内に、どの曜日が何回あったかを取得するものです。 ● サンプルコード ● 汎用関数ですので、標準プロシージャに以下のコードを記述して下さい。 '引数説明 '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エンジンは基本的に米国式の日付を扱いますので、米国式で記述するようにして下さい。