下面的公式(以及它们产生的结果)参考了这张图片。每个步骤(每个公式)执行的操作可能是不言自明的。
Cell $V$4 : =MATCH(TRUE,INDEX(($B4:$T4<>0),0),0) -> 3
Cell $W$4 : =SUMPRODUCT(MAX(($B4:$T4<>"")*(COLUMN($B4:$T4))))-COLUMN($B4)+1 -> 17
Cell $X$4 : =OFFSET($B4,0,V4-1) -> 0.25
Cell $Y$4 : =OFFSET($B4,0,W4-1) -> 0.5
Cell $Z$4 : =OFFSET($B$3,0,V4-1) -> 5:00
Cell $AA$4 : =OFFSET($B$3,0,W4) -> 12:30
Cell $AB$4 : =IF(X4=0.5,TEXT(Z4,IF(MOD(V4,2)=1,"h","h:mm")),TEXT(Z4+TIME(0,15,0),"h:mm")) -> 5:15
Cell $AC$4 : =IF(Y4=0.5,TEXT(AA4,IF(MOD(W4,2)=0,"h","h:mm")),TEXT(AA4-TIME(0,15,0),"h:mm")) -> 12:30
Cell $AD$4 : =W4-V4+1-COUNT($B4:$T4) -> 0
Cell $AE$4 : =AD4>0 -> FALSE
Cell $AF$4 : =MATCH(TRUE,INDEX(ISBLANK(OFFSET($B4,0,V4-1):OFFSET($B4,0,W4-1)),0),0)+V4-2 -> #N/A
Cell $AG$4 : =AF4+AD4+1 -> #N/A
Cell $AH$4 : =OFFSET($B4,0,AF4-1) -> #N/A
Cell $AI$4 : =OFFSET($B4,0,AG4-1) -> #N/A
Cell $AJ$4 : =OFFSET($B$3,0,AF4) -> #N/A
Cell $AK$4 : =OFFSET($B$3,0,AG4-1) -> #N/A
Cell $AL$4 : =IF(AH4=0.5,TEXT(AJ4,IF(MOD(AF4,2)=0,"h","h:mm")),TEXT(AJ4-TIME(0,15,0),"h:mm")) -> #N/A
Cell $AM$4 : =IF(AI4=0.5,TEXT(AK4,IF(MOD(AG4,2)=1,"h","h:mm")),TEXT(AK4+TIME(0,15,0),"h:mm")) -> #N/A
Cell $AN$4 : =AB4&"-"&IF(AD4>1,AL4&"/"&AM4&"-","")&AC4 -> 5:15-12:30
他们可能会为你工作。
它们给出数据开始/结束的列号(减一,以避免计算包含名称的列)。公式不检查具有数据的单元格的内容。
单元格 B3(作为第 3 行的示例)包含=TIME(INT(B1/100),INT(MOD(B1,100)),0)
,并且格式为自定义(不同于 C3)。无论如何,第 3 行仅供公式使用,可以隐藏。第 1 行只是为了更清楚地看到相对列号。
然后你将与最后一个公式连接。
对于添加a/p
,您只能使用类似IF(<time> < TIME(12,0,0), "a","p")
(<time>
应该替换为对包含您想要的开始/结束时间的单元格的引用 - 整体或拆分 -)。然后,如上所示连接。
您可以保留此处使用的所有单元格(它更容易工作/调试),或者通过组合其他公式来完全创建一个公式。但它会非常长(我什至不确定它是否会超过 Excel 的某个限制)。我的建议是,如果可能的话,保留这些单元格。您可以隐藏它们,或者更好地对它们进行分组:选择列,然后选择 Data -> (Outline) Group。您将在顶部看到一个框,可让您折叠/展开组。
我想你有你需要的一切。