Простым перебором-тупо но прозрачно
Public Function СбВсКол(ДатаНач As Date, ДатаКон As Date) As Integer
Dim DayOfWeek As Integer, Дата As Date, СбВсCount As Integer
Дата = ДатаНач
Do While Дата <= ДатаКон
DayOfWeek = DatePart("w", Дата, vbMonday)
If DayOfWeek = 6 Or DayOfWeek = 7 Then СбВсCount = СбВсCount + 1
Дата = Дата + 1
Loop
СбВсКол = СбВсCount
End Function |
в принципе можно подсчитать число полных недель
и проверить первую и последнюю на предмет поподания в них суб/вс
'Количество недель
Debug.Print DateDiff("ww", ДатаНач, ДатаКон, vbMonday)
'Первая неделя началась
Debug.Print DatePart("w", ДатаНач, vbMonday)
'последняя неделя закончилась
Debug.Print DatePart("w", ДатаКон, vbMonday) |
Хотя в жизни праздники все гораздо запутанней и не ограничиваются одними уикендами
встречаются всякие другие праздники
и что уж совсем не предугадаешь постановления правительства о переносу рабочих дней
я обычно табличку завожу ОсобыеДни