Queste due funzioni saranno calcolare il numero di giorni feriali e giorni di fine settimana:
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
Nota: ho trovato più semplice per calcolare i parziali settimane giorni del fine settimana calcolando la variabile lBeginDay
in modo che se la data di inizio è stata Lunedì lBeginDay == 5
... se la data di inizio era venerdì, lBeginDay == 1
, ecc. Anche altre varianti dovrebbero funzionare.
fonte
2012-01-09 06:55:08
È possibile utilizzare la funzione NETWORKDAYS? pseudo codice: TotalDays attraverso un DATEDIFF di due date funzione Run NETWORKDAYS in due date Minus giorni lavorativi dalla Totaldays per giorni del fine settimana. – jetgrrrl
La funzione NETWORKDAYS è una preziosa funzione del foglio di lavoro Excel, ma non esiste in VBA. –