Случалось ли вам рассчитывать количество рабочих дней между двумя датами или, зная начальную дату, рассчитать конечную дату, задав число рабочих дней? Особенно это удобно при составлении графика работ, если вы не используете специализированное программное обеспечение.

Версии Excel 2007 и 2010 предоставляют нам такой функционал в виде функций ЧИСТРАБДНИ и РАБДЕНЬ. А что же делать, если в наличии только Excel 2003 и ниже?

Сегодня мы в вами рассмотрим 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).


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


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

Похожие статьи

Вверх