Te dwie funkcje obliczy liczbę dni robocze i dni weekend:
Function NumWeekendDays(dBegin As Date, dEnd As Date) As Long
Dim iPartial As Integer
Dim lBeginDay As Long
Dim lNumWeekendDays As Long
iPartial = DateDiff("d", dBegin, dEnd + 1) Mod 7
lBeginDay = 6 - DatePart("w", dBegin, vbMonday)
lNumWeekendDays = (DateDiff("d", dBegin, dEnd + 1) \ 7) * 2
If iPartial > 0 And lBeginDay - iPartial < 0 Then
If lBeginDay = -1 Then
lNumWeekendDays = lNumWeekendDays + 1
ElseIf iPartial - lBeginDay = 1 Then
lNumWeekendDays = lNumWeekendDays + 1
Else
lNumWeekendDays = lNumWeekendDays + 2
End If
End If
NumWeekendDays = lNumWeekendDays
End Function
Function NumWeekDays(dBegin As Date, dEnd As Date) As Long
NumWeekDays = DateDiff("d", dBegin, dEnd + 1) - NumWeekendDays(dBegin, dEnd)
End Function
Uwaga: znalazłem to najprostsze do obliczenia częściowego tygodniu dni weekendowe poprzez obliczenie zmiennej lBeginDay
tak, że jeśli data rozpoczęcia była Poniedziałek, lBeginDay == 5
... jeśli data rozpoczęcia to piątek, lBeginDay == 1
, itp. Inne odmiany również powinny działać.
Czy możesz użyć funkcji NETWORKDAYS? pseudokod: TotalDays za pośrednictwem DateDiff z dwiema datami funkcyjnych Run NETWORKDAYS w dwóch terminach Minus dni robocze od Totaldays na dni weekendowe. – jetgrrrl
Funkcja NETWORKDAYS jest cenną funkcją arkusza programu Excel, ale nie istnieje w języku VBA. –