Gustav Brock
gustav at cactus.dk
Wed Mar 31 11:52:22 CST 2004
Hi Christopher
> I am utterly shocked that a Google search on GetBusinessDays turned
> up squat.
> Anyways, I need an Access VBA function that will return the number of
> business days (Mon - Fri) between two dates. I know this is the type
> of stuff that's supposed to be all over the net, but I am finding
> nothing.
There are not so many around and some of them simply browse each and
every day in the interval to check if it's a business day ...
I've posted this function several times but I can't remember the old
subjects so here it is again:
<code>
Public Function ISO_WorkdayDiff(ByVal datDateFrom As Date, ByVal datDateTo As Date) As Long
' Purpose: Calculate number of working days between dates datDateFrom and datDateTo.
' Assumes: 5 or 6 working days per week. Weekend is (Saturday and) Sunday.
' Limitation: Does not count for public holidays.
' May be freely used and distributed.
' 1999-04-23. Gustav Brock, Cactus Data ApS, Copenhagen
' 2000-10-03. Constants added.
' Option for 5 or 6 working days per week added.
Const cbytWorkdaysOfWeek As Byte = 5
Dim bytSunday As Byte
Dim intWeekdayDateFrom As Integer
Dim intWeekdayDateTo As Integer
Dim lngDays As Long
Dim datDateTemp As Date
' Reverse dates if these have been input reversed.
If datDateFrom > datDateTo Then
datDateTemp = datDateFrom
datDateFrom = datDateTo
datDateTo = datDateTemp
End If
' Find ISO weekday for Sunday.
bytSunday = WeekDay(vbSunday, vbMonday)
' Find weekdays for the dates.
intWeekdayDateFrom = WeekDay(datDateFrom, vbMonday)
intWeekdayDateTo = WeekDay(datDateTo, vbMonday)
' Compensate weekdays' value for non-working days (weekends).
intWeekdayDateFrom = intWeekdayDateFrom + (intWeekdayDateFrom = bytSunday)
intWeekdayDateTo = intWeekdayDateTo + (intWeekdayDateTo = bytSunday)
' Calculate number of working days between the two weekdays, ignoring number of weeks.
lngDays = intWeekdayDateTo - intWeekdayDateFrom - (cbytWorkdaysOfWeek * (intWeekdayDateTo < intWeekdayDateFrom))
' Add number of working days between the weeks of the two dates.
lngDays = lngDays + (cbytWorkdaysOfWeek * DateDiff("w", datDateFrom, datDateTo, vbMonday, vbFirstFourDays))
ISO_WorkdayDiff = lngDays
End Function
</code>
Have fun!
/gustav