|
こんにちは。かみちゃん です。
>1.まず任意の日付を指定します。
>2.その日から指定した日数だけさかのぼり、その日が営業日であるかを判断。
>3.もしその日が休業日であれば、営業日になるまで1日ずつ繰り上げる。
以下のURLにある「祝日判定関数」ktHolidayNameを利用して、祝日を判定する
ものとした場合、以下のコードで実現できます。
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
Option Explicit
Public Function GetBeforDay(ByVal TargetDate As Date, DayCount As Integer) As Date
Dim c As Range
TargetDate = TargetDate - DayCount
'求める日付が確定するまで繰り返す(無限ループ)
Do While True
'祝祭日でない場合
'ktHolidayName関数を利用
'参考URL http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
If ktHolidayName(TargetDate) = "" Then
'土曜日日曜日以外の場合
If Weekday(TargetDate) <> 1 And Weekday(TargetDate) <> 7 Then
'独自休業日の検索 … A列に設定してある場合
'A列の書式設定は、yyyy/m/dにしてあるものとする。
With Columns("A")
Set c = .Find(Format(TargetDate, "yyyy/m/d"), LookIn:=xlValues)
'独自休業日が設定してある場合
If c Is Nothing Then
'TargetDateの繰上がりを終了する … 求めるTargetDateの確定
Exit Do
End If
End With
End If
End If
'日付を1日繰り上げる
TargetDate = TargetDate - 1
Loop
GetBeforDay = TargetDate
End Function
あとは、=GetBeforDay("2004/12/25",2)
で、2004/12/22が取得できます。
(動作確認済みです)
|
|