Если кто-нибудь может мне помочь, почему у меня отрицательные числа вместо 40, которым это должно быть равно, пожалуйста, помогите. Я был бы очень благодарен. Спасибо!
решение1
Вы правильно выбрали «Использовать систему данных 1904» для рабочей книги в разделе Файл > Дополнительно > «При расчете этой рабочей книги» (прокрутите вниз до конца).
Это необходимо для того, чтобы время можно было рассчитывать как отрицательное число. (Попробуйте отключить его, и вы увидите, что отрицательные числа превратятся во все #).
Но, например, в B16 и C16 время просто вводится как 18:00 и 01:00 без даты. 01:00 - 18:00 - это действительно отрицательное время. Примерно -0,71, если отображается как число.
Решение состоит в том, чтобы изменить каждый отдельный расчет времени End-Start, чтобы учесть переход за полночь. Поэтому замените "C16-B16" на "IF(C16-B16<0,C16-B16+1,C16-B16)"
Вам придется сделать это для каждого дня недели, что сделает формулу довольно длинной.
Подумайте о добавлении дополнительного столбца между днями, чтобы отобразить часы, отработанные в этот день. Тогда для итога нужно будет просто сложить эти ячейки.
Редактировать: опередили!
Еще раз отредактируйте: вам следует использовать +1, как в моем примере, а не +24, как в предыдущем посте, потому что единицей измерения являются дни, а не часы.
Последняя правка: гораздо более короткое решение — заменить «C16-B16» на «MOD(C16-B16,1)». Это работает, сохраняя только дробную часть времени. В случае со временем десятичная 1 равна 24 часам.
решение2
Обычная формула для выхода за пределы 24:
=EndTime - StartTime +(EndTime < StartTime)
Объединить все это в одну формулу для суммирования всех дней недели — неловко, но выполнимо. Для этого требуется формула, вводимая в массив, поскольку вам нужно проверять каждую пару по отдельности.
Приведенная ниже формула использует ваши настройки, поскольку все значения EndTimes находятся в четных столбцах, а значения StartTimes — в нечетных столбцах.
Обратите внимание, что два построенных массива отличаются одним столбцом. В версиях Excel 2007+ вы можете напрямую проверить ODD/EVEN с помощью функции ISODD/ISEVEN.
Эта формула должна бытьвведенный массив:
=SUM(
MOD(COLUMN($C16:$O16),2)*$C16:$O16-
(MOD(COLUMN($B16:$N16),2)=0)*$B16:$N16+
((MOD(COLUMN($C16:$O16),2)*$C16:$O16-(MOD(COLUMN($B16:$N16),2)=0)*$B16:$N16)<0))
*24
или, используя ISODD и ISEVEN:
=SUM(
ISODD(COLUMN($C16:$O16))*$C16:$O16-
ISEVEN(COLUMN($B16:$N16))*$B16:$N16+
((ISODD(COLUMN($C16:$O16))*$C16:$O16-ISEVEN(COLUMN($B16:$N16))*$B16:$N16)<0))
*24
Или еще короче, но сложнее для понимания, поскольку мы используем функцию MOD, чтобы сохранить только дробную составляющую:
=SUM(
MOD(
ISODD(COLUMN($C16:$O16))*$C16:$O16-
ISEVEN(COLUMN($B16:$N16))*$B16:$N16,
1))
*24
Кмассив-вводформула, после ввода формулы в ячейку или строку формул, удерживайте клавишу ctrl-shiftво время ударавходить. Если вы сделали это правильно, Excel поместит фигурные скобки {...} вокруг формулы.
Я сделал формулу для линии, которую вы показываете на скриншоте. Результат 37,9833, используя ваши числа
решение3
Ваша проблема в том, что вы переходите через полночь. Возьмем, к примеру, первую строку в пятницу, субботу и воскресенье. Каждый день конечное время — 2:00 утра. Например, в пятницу, когда вы вычитаете время, получается 6:00 вечера пятницы минус 2:00 утра пятницы, что до 6:00 вечера.
Чтобы избежать негатива, но при этом сохранить приятный визуальный вид вашей диаграммы, вам следует использовать оператор IF. Для расчета на пятницу используйте:
=IF(K3 < J3, K3 - J3 + 24, K3 - J3)
В выражении IF есть три раздела.
(1) состояние
K3 < J3
Это проверяет, меньше ли K3 (время окончания), чем J3 (время начала). Если это так, то будет возвращено отрицательное число (время 2:00 утра «меньше» 6:00 вечера).
(2) если условие истинно
K3 - J3 + 24
Если условие истинно, Excel использует это уравнение. Я написал его, чтобы добавить 24, чтобы противодействовать любым отрицательным значениям, которые могут возникнуть.
(3) если условие ложно
K3 - J3
Если условие истинно, Excel использует это уравнение.
Краткое содержание
Используйте приведенный оператор IF вместо уравнения, которое вы использовали для расчета часов для каждого дня.
решение4
У меня была похожая проблема с расчетом времени, которое иногда выходило за полночь без информации о дне или дате. Мое время начала было вечером и иногда переходило на следующий день, поэтому я использовал несколько формул вместе, чтобы все получилось правильно для меня:
=IF(D4< C4,TEXT(D4-C4+24,"h:mm"),TEXT(D4-C4,"h:mm"))
(обратите внимание, что мне пришлось добавить пробел после символа «меньше» по какой-то причине форматирования — я не использую пробел в своей формуле)
Это просто if, где в моем случае D4 — это время окончания, а C4 — время начала. Если время окончания меньше времени начала, то, должно быть, оно перешло за полночь. Средний оператор дает общее время работы с поправкой на то, что оно перешло за полночь (+24). Конечный оператор показывает время работы, если вам нужно только обычное вычитание. Я обнаружил, что без «TEXT» и формата времени математика +24 отображалась бы как десятичное значение.