Довольно распространенная задача: определить количество рабочих дней в период между двумя датами – это частный случай расчета числа дней, который мы уже рассматривали ранее. Тем не менее, в Excel для этого даже существуют специальные функции.
Не совсем правильно будет пользоваться простейшими методами вычитания одной даты из другой либо функцией РАЗНДАТ. Ведь мы при этом не учитываем наш график труда и отдыха, что весьма важно.
Microsoft Excel имеет две основных функции, специально предназначенных для расчета будних дней – РАБДЕНЬ (WORKDAY) и ЧИСТРАБДНИ (NETWORKDAYS). Мы также остановимся на дополнительных РАБДНИ.МЕЖД и ЧИСТРАБДНИ.МЕЖД, которые могут быть очень полезными.
Функция РАБДЕНЬ определяет момент времени, который наступит через какое-то количество рабочих дней в будущем или в прошлом. Вы можете использовать ее для добавления или вычитания рабочих дней к определенной точке времени.
Используя формулу ЧИСТРАБДНИ, вы можете рассчитать, сколько рабочих дней во временном интервале.
А теперь давайте подробнее рассмотрим каждую из этих функций отдельно и посмотрим, как можно использовать для расчета будних дней в ваших таблицах Excel.
Функция РАБДЕНЬ.
Она возвращает момент времени, который наступит через определенное число рабочих дней (или наступил ранее). Она не учитывает дни отдыха и любые праздники, которые вы отдельно укажете.
Она подходит для расчета производственных графиков и сроков исполнения на основе стандартного производственного календаря, причем суббота и воскресенье – это для нее всегда дни отдыха.
РАБДЕНЬ - это встроенная функция в Excel 2007, 2010, 2013 и 2016. Ее можно ввести руками либо при помощи мастера функций. В более ранних версиях вам нужно специально включать пакет инструментов анализа.
Вам необходимо использовать следующие аргументы:
РАБДЕНЬ(дата_начала; дни; [праздничные_дни])
Первые два обязательны, а последний – по желанию:
- Дата_начала – с нее начинается подсчет дней.
- Дни - рабочие дни, которые нужно добавить или вычесть из начальной точки отсчета. Положительное число возвращает будущий момент времени, отрицательное — возвращает в прошлое.
- Праздничные_дни - необязательный список дат, которые следует считать нерабочими днями. Это может быть либо диапазон ячеек, содержащих даты, которые вы хотите исключить из расчетов, либо константа массива.
Теперь, когда вы знаете основы, давайте посмотрим, как вы можете использовать РАБДЕНЬ в ваших таблицах Excel.
Как добавить или вычесть рабочие дни.
Чтобы рассчитать рабочие дни в Эксель, следуйте этим простым правилам:
- Чтобы добавить будние дни, введите положительное число в качестве аргумента дни в формуле РАБДЕНЬ.
- Чтобы вычесть будние дни, используйте там же отрицательное число.
Предположим, у вас в ячейке A10 указан начальный момент времени, а список праздников — в ячейках А2: А7. Вы хотите узнать, какое число будет через 90 рабочих дней в будущем и прошлом.
Вы можете сделать это, используя следующие формулы:
Чтобы добавить столько же к начальной точке, но учитывая праздничные дни в А2: А7:
=РАБДЕНЬ($A$10;90;$A$2:$A$7)
Чтобы вычесть 90 рабочих дней, исключая праздники:
=РАБДЕНЬ($A$10;-90;$A$2:$A$7)
Чтобы рассчитать сроки на основе текущей даты, используйте функцию СЕГОДНЯ() в качестве точки начала:
Чтобы добавить 90 рабочих дней:
=РАБДЕНЬ(СЕГОДНЯ();90;$A$2:$A$7)
Чтобы переместиться на такое же время назад по отношению к сегодня:
=РАБДЕНЬ(СЕГОДНЯ();-90)
Чтобы указать время начала непосредственно в формуле, используйте формулу ДАТА():
=РАБДЕНЬ(ДАТА(2020;1;7);90;$A$2:$A$7)
На следующем скриншоте показаны результаты всех этих и еще нескольких формул РАБДЕНЬ:
И, естественно, вы можете указать, сколько будних дней нужно добавить либо вычесть из точки начала в некоторой ячейке, а затем сослаться на эту ячейку в своей формуле. Например:
=РАБДЕНЬ($A$10;С1;$A$2:$A$7)
Где A10 - начальная датировка, а C1 - число рабочих дней до (отрицательные числа) или после (положительные числа) нее, без учета праздников.
Настраиваем свой график выходных дней.
В случае, если у вас применяется какой-то особенный график нерабочих дней (не суббота и воскресенье), то вам в помощь – формула РАБДЕНЬ.МЕЖД (WORKDAY.INTL в английской версии).
Она появилась в Excel 2010, в более старых версиях программы ее нет.
Дополнительно к своей предшественнице, она позволяет указывать, какие именно дни недели предназначены у вас для отдыха.
Синтаксис ее выглядит следующим образом:
РАБДЕНЬ.МЕЖД (дата_начала, дни, [выходные], [праздничные_дни])
Первые два аргумента являются обязательными и знакомыми нам:
Дата_начала – начальный момент времени.
Дни - будние дней до (отрицательное значение) или после (положительное значение) начальной точки. Если этот аргумент в результате каких-то расчетов передается в виде десятичного числа, то дробная часть отбрасывается.
Последние два аргумента являются необязательными:
Выходные - указывает, что именно следует считать днями отдыха. Это может быть либо число, либо текст, как показано ниже.
Число | Выходные дни |
1 или отсутствует | Суббота Воскресенье |
2 | Воскресенье понедельник |
3 | Понедельник вторник |
4 | Вторник Среда |
5 | Среда Четверг |
6 | Четверг Пятница |
7 | Пятница Суббота |
11 | Только воскресенье |
12 | Только понедельник |
13 | Только вторник |
14 | Только среда |
15 | Только четверг |
16 | Только в пятницу |
17 | Только суббота |
Текст для указания выходного дня - серия цифр из семи нулей и единиц, представляющих семь дней недели, начиная с понедельника. 1 означает нерабочий день, и 0 — соответственно наоборот. Например:
- «0000010» — суббота - отдыхаем.
- «1000001» — понедельник и воскресенье - отдыхаем.
И вот как это может выглядеть на примере:
Я бы рекомендовал обратить внимание на конструкцию
=РАБДЕНЬ.МЕЖД($A$10;90;"1000001";$A$2:$A$7)
Просто переставляя 0 и 1, можно прямо указать любой график труда и отдыха.
Все остальное, думаю, достаточно хорошо понятно из скриншота.
Замечание. Функции Excel РАБДЕНЬ и РАБДЕНЬ.МЕЖД возвращают порядковые номера (числа), представляющие даты. Чтобы они отображались как нужно, выделите нужные ячейки и нажмите Ctrl + 1, чтобы открыть диалоговое окно «Формат ячеек». На вкладке «Число» выберите «Дата» и определите нужный формат даты.
Как рассчитать, сколько рабочих дней между двумя датами?
В ситуациях, когда вам нужно получить число рабочих дней в каком-то временном промежутке, используйте формулу ЧИСТРАБДНИ() (в английском варианте – NETWORKDAYS) :
ЧИСТРАБДНИ (дата_начала; дата_окончания; [праздничные_дни])
Первые два аргумента должны уже быть вам знакомы, а третий (необязательный) аргумент позволяет исключить пользовательский список праздников из подсчета.
Чтобы узнать, сколько будних дней между двумя точками в столбцах A и B, используйте следующую формулу:
=ЧИСТРАБДНИ(A10;B10)
При желании вы можете ввести свой список праздников в отдельный диапазон и дополнить формулу, чтобы исключить эти дни:
=ЧИСТРАБДНИ(A10;B10;A2:A7)
В результате учитываются только будние дни.
Рассчитать количество рабочих дней с учетом праздников и своего графика выходных
Если вам нужно обрабатывать какие-то особенные нерабочие дни (например, отдыхаем только в воскресенье, в понедельник и воскресенье и т.д), используйте функцию ЧИСТРАБДНИ.МЕЖД, которая позволяет указать, какие дни недели предназначены для отдыха.
ЧИСТРАБДНИ.МЕЖД (WORKDAY.INTL в английском варианте) - более мощная модификация функции ЧИСТРАБДНИ, которая работает с пользовательскими параметрами выходных . Как и его предшественница, она возвращает число рабочих дней в будущем или в прошлом, но позволяет вам определить, какие именно дни недели в вашем графике нужно считать нерабочими.
Формула ЧИСТРАБДНИ.МЕЖД появилась впервые в Excel 2010, и поэтому недоступна в более ранних версиях программы.
Синтаксис ее выглядит следующим образом:
ЧИСТРАБДНИ.МЕЖД (дата_начала, дни, [выходные], [праздничные_дни])
Первые два аргумента являются обязательными и встречались нам уже неоднократно:
Дата_начала - начальная точка.
Дни - будние дней до (отрицательное значение) или после (положительное значение) точки начала. Если этот аргумент в результате каких-то расчетов предоставляется в виде десятичного числа, то он усекается до целого.
Последние два аргумента являются необязательными:
Выходные - указывает, в какие дни недели вы не работаете. Это может быть либо число, либо текст, как показано ниже.
Число | Выходные дни |
1 или отсутствует | Суббота Воскресенье |
2 | Воскресенье понедельник |
3 | Понедельник вторник |
4 | Вторник Среда |
5 | Среда Четверг |
6 | Четверг Пятница |
7 | Пятница Суббота |
11 | Только воскресенье |
12 | Только понедельник |
13 | Только вторник |
14 | Только среда |
15 | Только четверг |
16 | Только в пятницу |
17 | Только суббота |
Текст для указания выходного дня - серия цифр из семи нулей и единиц, представляющих семь дней недели, начиная с понедельника. 1 означает день отдыха, а 0 — будний день. Например:
- «0000011» - суббота и воскресенье – не работаем.
- «1000001» - понедельник и воскресенье - отдыхаем.
На первый взгляд, такие конструкции могут показаться громоздкими и ненужными, но лично мне этот метод больше нравится, потому что вы можете создавать графики выходных «на лету», не запоминая никаких чисел.
Праздники - необязательный список дней, которые вы хотите исключить из своего календаря. Это может быть диапазон ячеек, содержащих даты, или константа массива из последовательных значений, представляющих их. Все, как и ранее.
А теперь несколько примеров.
=ЧИСТРАБДНИ.МЕЖД(A10;B10;1) – это знакомый нам вариант, когда нерабочими считаются суббота и воскресенье.
А вот =ЧИСТРАБДНИ(A10;B10;11) – отдых только в воскресенье,
=ЧИСТРАБДНИ.МЕЖД(A10;B10;2) – в воскресенье и понедельник. Такой расчет полезен, если в вашей организации свой график работы, не такой, как у всех.
=ЧИСТРАБДНИ.МЕЖД(A11;B11;"1100000";$A$2:$A$7)
не работаем в понедельник и вторник, учитывается также список праздников.
Вы можете объединить полученное число со своим собственным сообщением, склеив их при помощи оператора &.
Например, давайте посмотрим, сколько нужно еще отработать до конца 2020 года. Для этого введем 31 декабря 2020 года в формате даты, и используем следующее выражение:
="Осталось "&ЧИСТРАБДНИ(СЕГОДНЯ();ДАТА(2020;12;31);A2:A7)&" дн. до конца года!"
Ух, осталось всего 203 дня! Не так много, как я думал :)
Примечание. Чтобы учесть свой индивидуальный график работы, используйте ЧИСТРАБДНИ.МЕЖД().
Как определить ближайший рабочий день?
Предположим, мы должны определить, какого числа мы можем выставлять счета своим клиентам, а какого - нет. Думаю, вы согласитесь, что делать это в выходной день не стоит. Поэтому в зависимости от даты мы должны либо оставить ее неизменной, либо предложить другой день - рабочий.
Если выходными днями у нас традиционно считаются суббота и воскресенье, то ближайший рабочий день - это либо пятница, либо понедельник. Вот как это может выглядеть.
Для субботы подсчитать дату ближайшего понедельника можно двумя способами:
=РАБДЕНЬ(A2-1;1)
или
=ЕСЛИ(ДЕНЬНЕД(A3;2)>5;A3+(8-ДЕНЬНЕД(A3;2));A3)
Ближайший рабочий день в прошлом (то есть прошлая пятница) определяется так:
=ЕСЛИ(ДЕНЬНЕД(A4;2)>5;МИН(A4-(ДЕНЬНЕД(A4;2)-5);A4);A4)
Ну и если немного усложнить условие - если день попадает на субботу, тогда ближайший рабочий день - прошедшая пятница, а если на воскресенье - тогда предстоящий понедельник:
=ЕСЛИ(ДЕНЬНЕД(A6;2)>6;A6+(8-ДЕНЬНЕД(A6;2));МИН(A6-(ДЕНЬНЕД(A6;2)-5);A6))
Как видите, на слишком уж сложно.
Возможные ошибки при расчетах.
Если ваша формула РАБДЕНЬ, РАБДЕНЬ.МЕЖД, ЧИСТРАБДНИ или ЧИСТРАБДНИ.МЕЖД возвращает ошибку #ЧИСЛО! или #ЗНАЧ!, причина может быть одной из следующих:
- аргументы начала и конца временного отрезка передают неверные данные (не являются датой, записаны как текст скорее всего)
- аргумент «выходные» указан неверно (например, 22 или «000000011»).
Надеюсь, эти примеры и инструкции были вам полезны. Если еще остались вопросы - пишите в комментариях. Постараюсь ответить.