Ближайший рабочий день в MS EXCEL с учетом праздников и переносов

Предположим, что счет за продукцию нужно выставлять только в рабочие дни, несмотря на дату доставки. Напишем формулу, которая определяет: если дата доставки попадает на выходной или праздничный день, то дата счета – следующий понедельник (или прошедшая пятница). Решение также учитывает рабочие субботы.

Решение этой задачи без учета праздников и переносов рассмотрено в статье Ближайший рабочий день.

В этой статье добавим два перечня дат: Праздники, т.е. праздничные дни, которые попадают на рабочие и Рабочие_дни, т.е. перенесенные рабочие дни, которые попадают на субботу. Перечни разместим на листе Календарь (см. Файл примера).

Создадим через Диспетчер имен (Формулы/ Определенные имена/ Диспетчер имен) два динамических диапазона:
Праздники =СМЕЩ(календарь!$A$3;;;СЧЁТЗ(календарь!$A$3:$A$31)) и
Рабочие_дни
=СМЕЩ(календарь!$D$3;;;СЧЁТЗ(календарь!$D$3:$D$31))

Если дата попадает на субботу (не рабочую), воскресенье или праздник, то нижеследующая формула возвращает дату следующего понедельника, точнее следующего рабочего дня:
=ЕСЛИ(ЕНД(ВПР(A2;Рабочие_дни;1;ЛОЖЬ));РАБДЕНЬ(A2-1;1;Праздники);A2)

Другая формула возвращает дату прошедшей пятницы, точнее последнего рабочего дня перед датой
=ЕСЛИ(ЕНД(ВПР(A2;Рабочие_дни;1;ЛОЖЬ));
ЕСЛИ(НЕ(ЕНД(ВПР(A2-1;Рабочие_дни;1;ЛОЖЬ)));A2-1;РАБДЕНЬ(A2+1;-1;Праздники));
A2)

Связанные статьи

Похожие задачи
Прочитайте другие статьи, решающие похожие задачи в MS Excel. Это позволит Вам решать широкий класс подобных задач.
Средняя: 4.7 (3 оценок)