为方便起见,将除数列表扩展为:
Interval 1 2 3 4 5 6 7
0700 - 0000 1 1 1 1 1 2 5
0000 -0700 4 4 4 4 4 8 16
假设您在 A1:H3 单元格中构建表格,请贴上这些标签:
A6 ---> start time
A7 ---> end time
C5 ---> day
D5 ---> total minutes
E5 ---> before 0700 (2) or after (1)
F5 ---> devide by
G5 ---> calc
H8 ---> Sum
其中 B6 是您的开始时间值,B7 是您的结束时间值。
输入这些公式(并观察它是如何工作的):
C6 ---> =WEEKDAY(B6,2)
D6 ---> =24*60-HOUR(B6)*60-MINUTE(B6)
E6 ---> =IF(TIME(HOUR(B6),MINUTE(B6),SECOND(B6))>TIME(7,0,0),1,2)
F6 ---> =INDEX($B$2:$H$3,E6,MATCH(C6,$B$1:$H$1,0))
G6 ---> =D6/F6
并将其拖到 C7:G7 。除了
D7 ---> =(HOUR(B7))*60+MINUTE(B7)
G8 ---> =SUM(G6:G7)
有效吗?如果您在理解公式时遇到困难,请分享。
编辑(第 2 部分,基于评论 + 重新创建新示例文件后的第 3 部分)
请花时间了解所使用的序列/excelFunction...我已将公式/键入序列作为我想分享的“策略”的一部分嵌入..
假设开始日期/时间在 A13,结束在 B13,请贴上这些标签:
A12 ----> start time
B12 ----> end time
C12 ----> dayNo
D12 ----> dateEachDay
E12 ----> before 7
F12 ----> after 7
G12 ----> divisor before 7
H12 ----> divisor after 7
I12 ----> sub total
A15 ----> dateForEquation
C18 ----> last day :
K19 ----> Sum
这个值:
C13 ----> 1
第一批公式(从日期/时间数据中获取仅日期数据):
A16 ----> =DATE(YEAR(A13),MONTH(A13),DAY(A13))
B16 ----> =DATE(YEAR(B13),MONTH(B13),DAY(B13))
C13 ----> 1
D13 ----> =A16
D18 ----> =B16
第二批第 1 部分(第一天 n 最后一天的分钟数):
E13 ----> =IF(TIME(HOUR(A13),MINUTE(A13),SECOND(A13))<TIME(7,0,0),7*60-HOUR(A13)*60-MINUTE(A13),0)
F13 ----> =IF(TIME(HOUR(A13),MINUTE(A13),SECOND(A13))>=TIME(7,0,0),24*60-HOUR(A13)*60-MINUTE(A13),24*60-7*60)
E18 ----> =IF(TIME(HOUR(B13),MINUTE(B13),SECOND(B13))<TIME(7,0,0),HOUR(B13)*60-MINUTE(B13),7*60)
F18 ----> =IF(TIME(HOUR(B13),MINUTE(B13),SECOND(B13))>TIME(7,0,0),HOUR(B13)*60+MINUTE(B13)-420,0)
第二批第2部分(全天之间的分钟数),需要拖到F17:
C14 ----> =IF(D14="",0,7*60)
D14 ----> =IF(D14="",0,17*60)
E14 ----> =IFERROR(INDEX($B$3:$H$3,MATCH(WEEKDAY($D14,2),$B$1:$H$1,0)),1)
F14 ----> =IFERROR(INDEX($B$2:$H$2,MATCH(WEEKDAY($D14,2),$B$1:$H$1,0)),1)
第三批,(使用 index() n match() 获得各自的除数 + calc)拖动直到 J18 :
G13 ----> =IFERROR(INDEX($B$3:$H$3,MATCH(WEEKDAY($D13,2),$B$1:$H$1,0)),1)
H13 ----> =IFERROR(INDEX($B$2:$H$2,MATCH(WEEKDAY($D13,2),$B$1:$H$1,0)),1)
I13 ----> =E13/G13
J13 ----> =F13/H13
最后..
J19 ----> =SUM(I13:J18)
如果你在理解它的某个地方卡住了,只是嗡嗡声.. 请帮我仔细检查(手工计算?)它虽然..(:
编辑(第 3 部分,基于“27-02-2018 21:20:00 at the end time (B13)”案例)
因为是同一天.. 使用 A21 作为开始日期/时间,B21 作为结束日期/时间..
在 A22 处,使用 =DATE(YEAR(A21),MONTH(A21),DAY(A21)) 提取日期 ..
在 B22,使用 WEEKDAY(A22,2) 获取日期的工作日...
然后在 C22 使用 =IF(TIME(HOUR(A21),MINUTE(A21),SECOND(A21))>TIME(7,0,0),0,IF(TIME(HOUR(B21),MINUTE(B21),SECOND(B21))>TIME(7,0,0),7*60-(HOUR(A21)*60+MINUTE(A21)),HOUR(B21)*60+MINUTE(B21))-(HOUR(A21)*60+MINUTE(A21))) 获取 0700 小时前的分钟数
在 D22 使用 =IF(TIME(HOUR(B21),MINUTE(B21),SECOND(B21))<TIME(7,0,0),HOUR(B21)*60+MINUTE(B21)-7*60,HOUR(B21)*60+MINUTE(B21)-(HOUR(A21)*60+MINUTE(A21))) 获取 0700 小时后的分钟数
使用 index/match 函数和在 B22 中定义的工作日,使用 =IFERROR(INDEX($B$3:$H$3,MATCH(WEEKDAY($A22,2),$B$1:$H$1,0)),1) 和 =IFERROR(INDEX($B$2:$H$2,MATCH(WEEKDAY($A22,2),$B$1:$H$1,0)),1) 在 E22 和 F22 处“加载”除数。
并在 G22 和 H22 处使用 =C22/E22 和 =D22/F22 将分钟除以除数。
最后使用=SUM(G22:H22)@H3得到总和