Это старый вопрос, который продолжает собирать ответы на протяжении многих лет. Существующие ответы могут дать правильный результат в некоторых случаях, но проблема не так проста, как описывают эти ответы.
NETWORKDAYS дает вам количество рабочих дней за период, включая первый и последний дни. В некоторых ситуациях это не совсем то, что вам нужно, поэтому формула нуждается в корректировке. Однако существует много разных сценариев, как для того, как вам может потребоваться его корректировка, так и когда даты начала и окончания совпадают с исключенными днями. На самом деле не существует единой скорректированной формулы, которая дает правильный ответ для каждого случая. Я выложу инструменты для получения скорректированного результата, который вам нужен для вашего конкретного случая.
Если целью является не количество рабочих дней, содержащихся в диапазоне дат, вот некоторые из вариантов, которые необходимо обработать:
Начало и конец в один и тот же день. NETWORKDAYS выдает результат 1
если этот день является рабочим, или 0
если это не рабочий день. Как правило, это был бы желаемый результат, но некоторые варианты говорят, что если это рабочий день, результат в этом случае должен быть либо 0
либо долей дня (см. Следующий пункт).
Для планирования работ дни начала и окончания могут иметь особое значение. Работу можно назначить или начать в день начала, но этот день не считается ресурсом для выполнения задачи. В этом случае начальный день вычитается из пула ресурсных дней.
С другой стороны, конечную дату можно рассматривать как дату завершения, а результаты должны быть получены в начале дня. В этом случае дата окончания вычитается из пула.
Еще один сценарий рассматривает "средние дни". Работа над заданием начинается где-то в течение начального дня и завершается где-то в последний день. Таким образом, задача, выполняемая в понедельник и вторник, рассматривается как полдня в понедельник и полдня во вторник при общем ресурсе в один день. Корректировка будет вычитать полдня из даты начала и окончания.
Однако все это зависит от того, являются ли даты начала и окончания рабочими днями. Если период начинается в воскресенье и заканчивается в субботу, доступна полная неделя рабочих дней. Там не будет никакой корректировки.
Если период начинается или заканчивается в нерабочий день, а другой конец периода является рабочим днем, корректировка будет зависеть от того, как рассматриваются дни начала и окончания (см. Предыдущий пункт).
Поэтому, если вы хотите использовать NETWORKDAYS для целей, отличных от предполагаемых, вам нужно создать формулу, которая будет правильно отражать то, как вы хотите просмотреть начальный и конечный дни для своих целей. Вы можете упростить эту задачу, снова используя NETWORKDAYS для корректировок.
Если вы используете начальную или конечную дату для представления диапазона дат, NETWORKDAYS вернет 0
если этот день не рабочий день, или 1
если это рабочий день. Например:
NETWORKDAYS(C8,C8,holiday!$A$106:$A$117)
вернет 0
или 1
значение для даты начала. Вы можете использовать это, чтобы создать корректировку, которая автоматически корректирует, является ли эта дата рабочим днем. Примеры:
Исключить дату начала, если это рабочий день:
=NETWORKDAYS(C8,C9,holiday!$A$106:$A$117)-NETWORKDAYS(C8,C8,holiday!$A$106:$A$117)
Исключить дату окончания, если это рабочий день:
=NETWORKDAYS(C8,C9,holiday!$A$106:$A$117)-NETWORKDAYS(C9,C9,holiday!$A$106:$A$117)
Исключите полдня из дат начала и окончания, если они являются рабочими днями:
=NETWORKDAYS(C8,C9,holiday!$A$106:$A$117)-(NETWORKDAYS(C8,C8,holiday!$A$106:$A$117)+NETWORKDAYS(C9,C9,holiday!$A$106:$A$117))/2
Обратите внимание, что если один из первого или последнего дня является нерабочим днем, вы получите значение, содержащее полдня. Для этого сценария, если вас интересуют только целые дни, вам необходимо добавить округление в нужном направлении.
Если у вас могут быть периоды одного дня, вам нужно решить, как обращаться с этим в рамках ваших правил; это может быть исключением из того, как вы определяете рабочие дни. Если вы всегда хотите считать, что это один полный рабочий день, вы можете встроить тест IF, чтобы увидеть, равен ли результат NETWORKDAYS 1
, и назначить результат 1
вместо вашей корректировки.
Если у вас могут быть периоды одного дня, которые потенциально могут приходиться на нерабочий день, вы можете использовать тест IF, чтобы проверить, что NETWORKDAYS равен 0
, и в этом случае вы можете вернуть текстовое предупреждение или вызвать состояние ошибки.
Обратите внимание, что NETWORKDAYS использует только часть даты (целое число) значений даты / времени; любое время игнорируется. Одним из последствий является то, что на полудневные корректировки, как и в последнем примере, не влияет никакое значение времени, и значения времени нельзя использовать для создания полудневных корректировок.