Аргументы: dtDate1 - начальная дата, dtDate2 - конечная дата, bUseHolidays - True - использовать таблицу праздников False - не использовать таблицу праздников 
Назначение: Расчет количества рабочих дней выпадающих на заданный временной интервал 
Возвращает: Количество рабочих дней. 
Public Function WorkDays(ByVal dtDate1 As Date, ByVal dtDate2 As Variant, Optional ByVal bUseHolidays As Variant) As Long 
Dim l As Long, wd1 As Integer, wd2 As Integer 
Dim wd As Long 
If IsMissing(bUseHolidays) Then 
    bUseHolidays = False 
End If 
l = DateDiff("d", dtDate1, dtDate2, vbMonday) 
wd1 = WeekDay(dtDate1, vbMonday) 
wd2 = WeekDay(dtDate2, vbMonday) 
wd = l - ((l + wd1 + (7 - wd2)) / 7&) * 2& + 1& 
If wd1 = 7 Then 
    wd = wd + 1 
End If 
If wd2 <= 5 Then 
    wd = wd + 2 
ElseIf wd2 = 6 Then 
    wd = wd + 1 
End If 
If bUseHolidays Then 
    wd = wd - DCount("*", "tblHolidays", "[Holiday] Between #" & _ 
    Format(dtDate1, "yyyy mm dd") & "# And #" & _ 
    Format(dtDate2, "yyyy mm dd") & "#") 
End If 
WorkDays = wd 
End Function 
Примечания: 
Суббота и воскресенье считаются нерабочими днями. 
Таблица праздников в данном примере называется "tblHolidays" и содержит одно поле "Holiday" типа Date/Time . В эту таблицу заносятся даты праздников которые не попадают на субботу и воскресенье. 
Автор: из справочника ProgramAdvices 
Ссылки по теме