excel函数技巧:reduce如何操作累加器实现分组-趣帮office教程网

如图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输出结果的原理,才能使用对累加器。