MENU
Главная » Статьи » Функции

Работаем с датой
Выходной/рабочий день с учетом рабочих суббот и праздников:
=ЕСЛИ(ЕНД(ВПР(B3;N:N;1;0))=ЛОЖЬ;"выходной";ЕСЛИ(ЕНД(ВПР(B3;M:M;1;0))=ЛОЖЬ;"рабочий";ЕСЛИ(ДЕНЬНЕД(B3;2)>5;"выходной";"рабочий")))

Public Function ЕСЛИРАБДЕНЬ(ByRef день As Double, ByRef праздники As Range, ByRef рабочие_выходные As Range) As Byte
'определяет рабочий ли день - 1 или нет - 0
v_search_result = Application.Match(день, рабочие_выходные, 0)
If Not IsError(v_search_result) Then ЕСЛИРАБДЕНЬ = 1: Exit Function
v_search_result = Application.Match(день, праздники, 0)
If Not IsError(v_search_result) Then ЕСЛИРАБДЕНЬ = 0: Exit Function
If Weekday(день, vbMonday) < 6 Then ЕСЛИРАБДЕНЬ = 1: Exit Function
End Function

Следующий рабочий день, если есть рабочие субботы, но НЕ воскресенья.
=ЕСЛИ(СУММЕСЛИ(L:L;B3+1)>0;СУММЕСЛИ(L:L;B3+1);РАБДЕНЬ(B3;1;$M$2:$M$35))
=ЕСЛИ(ЕНД(ВПР(B3+1;L:L;1;0));РАБДЕНЬ(B3;1;$M$2:$M$35);ВПР(B3+1;L:L;1;0))

Public Function РАБДЕНЬСРАБВЫХ(ByRef день As Double, ByVal число_дней%, ByRef праздники As Range, ByRef рабочие_выходные As Range) As Double
'определяет рабочий отстоящий на указанное кол-во раб.дней
Dim i%, n% 'n - кол-во рабочих ней с начальной даты
If число_дней > 0 Then
    Do While n <> число_дней
        i = i + 1
        If ЕСЛИРАБДЕНЬ(день + i, праздники, рабочие_выходные) Then n = n + 1
    Loop
    РАБДЕНЬСРАБВЫХ = день + i
ElseIf число_дней < 0 Then
    Do While n <> число_дней
        i = i - 1
        If ЕСЛИРАБДЕНЬ(день + i, праздники, рабочие_выходные) Then n = n - 1
    Loop
    РАБДЕНЬСРАБВЫХ = день + i
Else
РАБДЕНЬСРАБВЫХ = ЕСЛИРАБДЕНЬ(день, праздники, рабочие_выходные)
End If
End Function

Прошло рабочих дней с начала месяца:
=ЧИСТРАБДНИ(КОНМЕСЯЦА(B3;-1)+1;B3;$S$2:$S$100)+СЧЁТЕСЛИМН(R:R;">="&КОНМЕСЯЦА(B3;-1)+1;R:R;"<="&B3)



 
Категория: Функции | Добавил: clownsaround (31.01.2018)
Просмотров: 397 | Теги: дата, excel, входные/рабочие | Рейтинг: 5.0/1
Всего комментариев: 0
avatar