如图A列为源数据,体现的夜班和白班交叉排布,现要求4人1组,分白班、夜班依次进行编号,如B6B14B15B16因为都是白班的第二个4人组,同时又是整体的第2个编号,所以统一编为2组。公式如下:
=DROP(REDUCE(0,A2:A31,LAMBDA(x,y,LET(
m,TAKE(A1:A30,ROW(y)-1),
i,FILTER(x,m=y,0),
n,IF(SUM(i)=0,MAX(x) 1,IF(SUM(1*(MAX(i)=x))<4,MAX(i),MAX(x) 1)),
rr,VSTACK(x,IFS(y=OFFSET(y,-1,),IF(n<1,MAX(x) 1,n),y<>OFFSET(y,-1,),IF(n<1,MAX(x) 1,n),TRUE,MAX(x) 1)),
rr))),1)
公式思路:
本例主要思路是如何操作累加器x,过滤出夜班或者白班相对应的编号值,然后再判断这个值出现的次数,如果次数不足4次就取这个编号,如果大于4次,就在整体编号的基本上加1。
累加器的操作困难的地方就在于它是随着你的公式进行变化的,你对累加器进行操作,出会影响累加器本身,也就是说你的累加器操作出现问题那么累加器本身也会出现问题。类似于递归的使用,要能从整体上理解reduce输出结果的原理,才能使用对累加器。
评论 (0)