送佛送到西,开个国际火车,把全列日期的也贴上来吧,只是完成目标,没有考虑优化。
- =LET(sName,A2:A38,sS,B2:B38,sE,C2:C38,Ref,DROP(REDUCE("",UNIQUE(sName),LAMBDA(Zx,Zy,VSTACK(Zx,LET(sa,FILTER($B$2:$C$38,$A$2:$A$38=Zy),s,DROP(REDUCE("",SEQUENCE(ROWS(sa)),LAMBDA(x,y,VSTACK(x,LET(Ta,INDEX(sa,y,1),Tb,INDEX(sa,y,2),IF(INT(Ta)=INT(Tb),HSTACK(Zy,INDEX(sa,y,{1,2})),DROP(REDUCE("",SEQUENCE((INT(Tb)-INT(Ta))+1,,0),LAMBDA(XX,YY,VSTACK(XX,IFS(YY=0,HSTACK(Zy,Ta,INT(Ta)+1),YY=(INT(Tb)-INT(Ta)),HSTACK(Zy,INT(Tb),Tb),TRUE,HSTACK(Zy,INT(Ta)+YY,INT(Ta)+YY+1))))),1)))))),1),s)))),1),sT,MAP(CHOOSECOLS(Ref,2),TAKE(Ref,,-1),LAMBDA(x,y,LET(t,SEQUENCE(INT(y)-INT(x)+1,,INT(x))+1/24*{8,12,13,17},SUM(TEXT(x-t,"[<]!0")*{-1,1,-1,1},TEXT(y-t,"[<]!0")*{1,-1,1,-1})))),NN,TAKE(Ref,,1),Re,PIVOTBY(HSTACK(MATCH(NN,UNIQUE(sName),),NN),TEXT(CHOOSECOLS(Ref,2),"yyyy/mm/dd"),sT,LAMBDA(x,ROUND(SUM(x)*24,1)),0,0,,0),Ta,DROP(Re,,1),Fn,DROP(TAKE(Ta,,1),1),Tb,DATE(YEAR(--B2),MONTH(--B2),1),Tc,TEXT(SEQUENCE(,EOMONTH(B2,0)-Tb+1,Tb),"yyyy/mm/dd"),Td,DROP(REDUCE("",Tc,LAMBDA(XX,YY,HSTACK(XX,IFNA(CHOOSECOLS(Ta,MATCH(YY,TEXT(TAKE(Ta,1),"yyyy/mm/dd"),)),"")))),,1),Te,IFNA(VSTACK(Tc,DROP(Td,1)),""),Tf,HSTACK(VSTACK("姓名",Fn),Te),Tf)
复制代码 |