_Boroda_, Хе Хе , этого в ТЗ не было :-), признаю, что думал об этом, но вопрос не поднимал, вроде они должны попадать в список.
Цитата
adike написал: в Первом "ЕСЛИ" день минус этот же день равно 1. от него отнимают двойку, в результате получается отрицательное число. и вот это логическое выражение при отрицательном значении подставляет ноль.
нет причина не в этом, то что вы написали - это относится к расчету для целых дней между двумя датами, за минусом крайних. По ним идет дальнейший расчет.
она не работает со второй половинкой дня, черт почему сделал для первой и не сделал не проверил для второй - не понимаю. Проверьте ,поставьте время до обеда. Щас подправлю.
Верно: если в A и B вбить 25.05.2020 09:00:00 (понедельник) и 29.05.2020 18:00:00 (пятница) соответственно, то результат в C равен 2400. Это верно, т.к. все эти числа являются рабочими днями: 5 × 8 × 60 (рабочие дни × 8 рабочих часов × минут в часе) = 2400. Неверно: если в A и B вбить 24.05.2020 09:00:00 (воскресенье) и 29.05.2020 18:00:00 (пятница), то результат в C не соответствует действительности: он не то чтобы не остается неизменным (а должен, ведь воскресенье это нерабочий день), так он еще и уменьшается, и становится равным 1920. Верно: если в A и B вбить 24.05.2020 09:00:00 (воскресенье) и 25.05.2020 09:00:00 (понедельник), то результат в C равен 480. Это верно, т.к. учитывается лишь один рабочий день: 1 × 8 × 60 = 480. Неверно: если в A и B вбить 24.05.2020 09:00:00 (воскресенье) и 26.05.2020 09:00:00 (вторник), то результат в C не соответствует действительности, т.к. он должен увеличиться из-за наличия двух рабочих дней: 2 × 8 × 60 = 960.
Как исправить - неясно. Кто-то может пояснить, почему так происходит?
Дополнительно прикладываю файл, где вбиты все 4 описанных варианта и добавлены верные значения (как должно быть) в столбец D:
Даже стыдно, такой промах был =24*60*(IF(NETWORKDAYS(A2;B2;праздники!$A$1:$A$59)-2<0;0;NETWORKDAYS(A2;B2;праздники!$A$1:$A$59)-NETWORKDAYS(A2;A2;праздники!$A$1:$A$59)- NETWORKDAYS(B2;B2;праздники!$A$1:$A$59))/3+ NETWORKDAYS(A2;A2;праздники!$A$1:$A$59)*(MAX(MIN("13:00";IF(INT(A2)=INT(B2);MOD(B2;1);"24:00"))-MAX(MOD(A2;1);"09:00");0)+MAX(MIN("18:00";IF(INT(A2)=INT(B2);MOD(B2;1);"24:00"))-MAX(MOD(A2;1);"14:00");0))+ IF(INT(A2)=INT(B2);0;NETWORKDAYS(B2;B2;праздники!$A$1:$A$59)*(MAX(MIN("13:00";MOD(B2;1))-"09:00";0)+MAX(MIN("18:00";MOD(B2;1))-"14:00";0))))
БМВ написал: Даже стыдно, такой промах был ... Но проверить думаю стоит
Не нужно стыдиться, мы все ошибаемся. Огромное спасибо! Проверил, работает. Надеюсь, спустя какое-то время не вылезет что-то еще Это не упрёк ни в коем случае, а наоборот - уверенность в том, что всё будет в порядке.
25.05.2020 09:00:00 29.05.2020 18:00:00 меняем на 25.05.2020 10:00:00 29.05.2020 17:00:00 два час меньше то есть 2400- 120 = 2280 короткий вариант это тоже укорачивает до 2100 :-)
25.05.2020 10:00:00 25.05.2020 17:00:00 то есть 6 часов по короткому варианту 720 мин
идея с CHOOSE ОК, но результат пока ошибочен и сильно. А вот с TEXT нужно осторожно. Из за разных региональных настроек может быть иной разделитель и вместо ; может потребоватся , но в данном случае это проще заменить на MAX(0;...) =24*60*(MAX(;SUM(NETWORKDAYS(CHOOSE({1;2;3};A2;A2;B2);CHOOSE({1;2;3};B2;A2;B2);праздники!$A$1:$A$59)*{1;-1;-1}))/3+ NETWORKDAYS(A2;A2;праздники!$A$1:$A$59)*(MAX(MIN("13:00";IF(INT(A2)=INT(B2);MOD(B2;1);"24:00"))-MAX(MOD(A2;1);"09:00");0)+MAX(MIN("18:00";IF(INT(A2)=INT(B2);MOD(B2;1);"24:00"))-MAX(MOD(A2;1);"14:00");0))+ IF(INT(A2)=INT(B2);0;NETWORKDAYS(B2;B2;праздники!$A$1:$A$59)*(MAX(MIN("13:00";MOD(B2;1))-"09:00";0)+MAX(MIN("18:00";MOD(B2;1))-"14:00";0))))
Если удастся оптимизировать и без ошибок вторую часть то только буду рад
Эт все потому, что формула массивная (забыл об этом написать), а в файле не уследил, выложил с немассивным вводом в С2 Избежать возможной ошибки при использовании ТЕКСТ() можно как-то так (немассивная формула)
Андрей Лящук, Сперва поругать хотел, потом похвалить, ибо нашел что не прав, но пытливый медвежий ум чувствовал что есть подвох 28.05.2020 19:00:00 30.05.2020 17:00:00 считает не корректно.