指定した期間内に、特定の曜日が何回あるかを取得する関数

  この関数は、引数で指定された期間内に、どの曜日が何回あったかを取得す
るものです。


● サンプル ●

  汎用関数ですので、標準プロシージャに以下のコードを記述して下さい。

'引数説明
'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エンジンは基本的に米国式
の日付を扱いますので、米国式で記述するようにして下さい。

Access97/2000



戻る


Excel Word Access VBA! モーグ