Сегодня мы в вами рассмотрим VBA код – аналог функций ЧИСТРАБДНИ и РАБДЕНЬ, применительно к Excel 2003.

Количество рабочих дней между датами

Входящими данными для формулы служат две даты date1 и date2.

Function CountNetDays(date1, date2 As Date) As Integer

    Dim d As Integer
    Dim datetemp As Date

    d = 1
    datetemp = date1

    Do Until datetemp = date2
        If Weekday(datetemp, vbMonday) < 6 Then d = d + 1
        datetemp = DateAdd("d", 1, datetemp)
    Loop

    CountNetDays = d

End Function

Никаких хитростей – считаем только дни с понедельника по пятницу, используя функцию определения дня недели Weekday, и указывая в параметрах дату и первый день недели (vbMonday).

Дата + рабочие дни

С помощью данной функции вы сможете рассчитать дату, отстоящую от начальной даты (date1) на определенное количество рабочих дней (netdays).

Function SetNetDays(date1 As Date, netdays As Integer) As Date

    Dim i As Integer
    Dim datetemp, resultd As Date

    i = 0
    datetemp = date1

    Do Until i = netdays
        If Weekday(datetemp, vbMonday) < 6 Then
            i = i + 1
            resultd = datetemp
        End If
        datetemp = DateAdd("d", 1, datetemp)
    Loop

    SetNetDays = resultd
End Function

Из идей для развития: учет в формулах заданных пользователем праздничных дней. В таком случае следует сделать дополнительное условие к проверке на рабочий день (Weekday < 6).


Добавить комментарий


Защитный код
Обновить

Вверх