относительно новый, чтобы преуспеть здесь.
Pt.1 - Создание динамической c временной шкалы дня недели, основанной на часах
Я пытаюсь сделать временную шкалу, основанную на часах каждого Задача, например, так:
Я знаю, как просто добавить часы к дате и времени, но есть еще несколько вещей, которые я должен принять во внимание :
- Дни, которые запускаются только с 08:00 до 16:00 ч, любые задачи, которые выполняются после 16:00 ч в один день, продолжаются на следующий.
- Только считается по рабочим дням, так что с понедельника по пятницу и с пятницы по понедельник
Идея состоит в том, что я могу использовать эту таблицу для любого проекта, и просто зная время, необходимое для каждой задачи, получим временную шкалу.
Pt.2 - Добавление столбца для фактических завершенных дат
Чтобы сделать его еще более сложным, я хочу добавить еще один столбец, в который я могу написать, когда я фактически выполнил задачу, что затем обновляет оставшуюся часть таблицы, например так:
У меня в настоящее время есть некоторые массивные и по общему признанию неорганизованные формулы в столбцах Start и End , хотя я подозреваю, что лучше начинать с нуля. Они не работают все время (не пропускайте выходные, считайте часы за пределами диапазона с 8 до 16 часов), и они выглядят следующим образом:
Начало: =IF(W9<>"", IF(TIME(HOUR(AA8), MINUTE(AA8), SECOND(AA8))<TIME(16,0,0),AA8,DATE(YEAR(AA8),MONTH(AA8),DAY(AA8))+1+TIME(8,0,0))+SUM(INT((WEEKDAY(AA8-{1,7})+DATE(YEAR(AA8),MONTH(AA8),DAY(AA8))+1+TIME(8,0,0)-AA8)/7)), "")=IF(W9<>"", IF(TIME(HOUR(AA8), MINUTE(AA8), SECOND(AA8))<TIME(16,0,0),AA8,DATE(YEAR(AA8),MONTH(AA8),DAY(AA8))+1+TIME(8,0,0))+SUM(INT((WEEKDAY(AA8-{1,7})+DATE(YEAR(AA8),MONTH(AA8),DAY(AA8))+1+TIME(8,0,0)-AA8)/7)), "")
Конец: =IF(AB10="", IF(W10<>"", IF(TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1,0,0)>TIME(16,0,0), IF(Z10+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1, 0, 0)>TIME(16, 0, 0), IF(HOUR(DATE(YEAR(Z10),MONTH(Z10),DAY(Z10+1))+TIME(8,0,0)+ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0)+TIME(((((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8)-ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0))*8, 0, 0))=8, DATE(YEAR(Z10),MONTH(Z10),DAY(Z10+1))+TIME(8,0,0)+ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0)+TIME(((((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8)-ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0))*8, 0, 0)-(2/3), DATE(YEAR(Z10),MONTH(Z10),DAY(Z10+1))+TIME(8,0,0)+ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0)+TIME(((((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8)-ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0))*8, 0, 0)), Z10+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1, 0, 0)), Z10+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10), 0, 0))+SUM(INT((WEEKDAY(Z10-{1,7})+IF(TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1,0,0)>TIME(16,0,0), IF(Z10+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1, 0, 0)>TIME(16, 0, 0), IF(HOUR(DATE(YEAR(Z10),MONTH(Z10),DAY(Z10+1))+TIME(8,0,0)+ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0)+TIME(((((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8)-ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0))*8, 0, 0))=8, DATE(YEAR(Z10),MONTH(Z10),DAY(Z10+1))+TIME(8,0,0)+ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0)+TIME(((((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8)-ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0))*8, 0, 0)-(2/3), DATE(YEAR(Z10),MONTH(Z10),DAY(Z10+1))+TIME(8,0,0)+ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0)+TIME(((((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8)-ROUNDDOWN(((HOUR((TIME(HOUR(Z10),MINUTE(Z10),SECOND(Z10))))+IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1)-16)/8, 0))*8, 0, 0)), Z10+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10)+1, 0, 0)), Z10+TIME(IF(ISNUMBER(SEARCH("Concept", W10)), Y10/3, Y10), 0, 0))-Z10)/7)), ""), AB10+AC10)