1

このアクセス機能を変更して、稼働日数を指定して終了日を計算できるようにしました。

ただし、英国の銀行の休日も考慮に入れる必要があります。

誰かが私がそれをどのように行うことができるか良い考えを持っていますか?

Public Function CountDays(startDate As Date, NoOfDays As Integer) As Date
' Function to count no of working days
Dim tmpNo As Integer
Dim tmpDate As Date
Dim tmpStartDate As Date
Dim i As Integer

tmpNo = NoOfDays

tmpStartDate = startDate

tmpDate = startDate

i = 0

Do Until i = NoOfDays

If Weekday(tmpDate) = 1 Or Weekday(tmpDate) = 7 Then
tmpNo = tmpNo + 1
Else
i = i + 1
End If
tmpDate = tmpDate + 1
Loop

CountDays = DateAdd("d", tmpNo, tmpStartDate)
End Function

乾杯

ロス

4

2 に答える 2

2

毎日ループする必要はありません。少し計算して平日の日数を取得し、その時間枠の休日数をテーブルで検索します。そう:

TotalDays = DateDiff("d", startDate, endDate) + 1

TotalWeekends = (DateDiff("ww", startDate, endDate) * 2) + _ 
((DatePart("w", startDate) = vbSunday) *-1) + _ 
((DatePart("w", endDate) = vbSaturday) *-1)

TotalHolidays = DCount("*","tblHolidays","Holiday Between #" & startdate & "# And #" & enddate & "#")

TotalWorkingDays = TotalDays - TotalWeekends - TotalHolidays 

ちなみに、日付の前後に # を使用すると、Access はそれが米国形式であると想定します。代わりに引用符を使用できます。

于 2013-03-07T15:38:46.487 に答える
0

英国の銀行休業日は毎年異なるため、これらの日付を格納するテーブルを作成し、コードでこのテーブルをチェックして、日付が存在する場合は tmpNo 値を増やす必要があります。

次のように「Else If」句を追加して、コードを変更します。

Do Until i = NoOfDays
    If Weekday(tmpDate) = 1 Or Weekday(tmpDate) = 7 Then
        tmpNo = tmpNo + 1
    Else If DCount("*","tblExceptionDates","dtmDate = #" & tmpDate & "#") > 0 Then
        tmpNo = tmpNo + 1
    Else
        i = i + 1
    End If
    tmpDate = tmpDate + 1
Loop
于 2013-03-07T13:54:58.253 に答える