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