excel函数技巧:双reduce循环实现个人分数在所有班级中的排名-趣帮office教程网

如图A列至C列是源数据,数据有600多行,包含所有班级所有学生的成绩,现想要统计一每个学生的分数如果放在每一个班会排到第几名。公式如下:

=LET(class,SORTBY(TRANSPOSE(UNIQUE(B2:B642)),--SUBSTITUTE(TRANSPOSE(UNIQUE(B2:B642)),"班","")),

REDUCE(class,L2:L642,LAMBDA(x,y,VSTACK(x,DROP(REDUCE("",class,LAMBDA(m,n,HSTACK(m,1 SUM(1*(FILTER(L2:L642,B2:B642=n)>y))))),,1))))

)

公式思路:公式主体为reduce(reduce(sum(if……,核心为sum(if语句实现计算每个人在每个班里的排名:

1 SUM(1*(FILTER(L2:L642,B2:B642=n)>y)))

1 sum或者1 sumproduct是中式排名常用的占位排名语句。当然也可以按其它要求排名如不占位排名等

这里面有个条件判断,OFFSET(y,,-10)=n,功能是判断要排名的这个成绩是否在要排名的班里,如果是则正常sum函数排名,如果不是则要把这个成绩用vstack把数据合并到这个班里。