乐于分享
好东西不私藏

Excel函数实战系列 第13期

Excel函数实战系列 第13期

Excel函数实战系列 第13期

小伙伴们,今天继续我们的函数实战系列,今天我们更新到第13期。
还是工作中的遇到的实际问题。
这个案例和我们前几天聊的排序函数说的案例非常相似,或者说是解决了一半的需求。
现有A列和B列的姓名和销售额,现需根据销售额进行排序,总的排序我们说排序函数的时候已经说过了,现在有了更进一步的需求,需要总的排序加上同一名字之间的内部排序,拿李四举例说明就是李四的销售总额的排序连接上李四各个销售额的内部排序。
其实思路大概是一样的,只不过是内部的排序有点绕,总体上解决思路中等偏下。
先把公式贴出来。
=LET(X,GROUPBY(A2:A21,B2:B21,SUM,,0,-2),Y,REDUCE(0,A2:A21,LAMBDA(X,Y,VSTACK(X,MATCH(OFFSET(Y,,1),UNIQUE(SORT(FILTER(B2:B21,Y=A2:A21),,-1)),)))),Z,MATCH(A2:A21,TAKE(X,,1),),Z&”-“&DROP(Y,1))
C2输入公式,不用下拉,公式也是自动溢出。
我们来分析下这个公式的具体思路。
首先用LET函数定义了3个名称,X,Y,Z。
先来看X。
GROUPBY(A2:A21,B2:B21,SUM,,0,-2)
GROUPBY函数也是个非常强大的函数,有8个参数,我们后期会说到他,功能就是分类汇总,用上次我们说的SUMIF也行。意思就是根据A列对B列进行分类汇总,进行求和,并根据第二列降序排序。
这样得到”张三”,33717;”李四”,26512;”陈六”,26354;”王五”,14612一个数组,并按降序排列。
最复杂的是Y了。
REDUCE(0,A2:A21,LAMBDA(X,Y,VSTACK(X,MATCH(OFFSET(Y,,1),UNIQUE(SORT(FILTER(B2:B21,Y=A2:A21),,-1)),))))
其实道理是一样的,循环A列姓名,筛选出等于每一个A列姓名的B列销售额,并进行降序排序,并进行去重处理,然后用MATCH查找每一个姓名内部的销售额的位置信息,最后用VSTACK纵向连接。
Z就简单了。
MATCH(A2:A21,TAKE(X,,1),)
用TAKE函数提取X的第一列,然后用MATCH查找总的销售额的排名信息。
最后Z&”-“&DROP(Y,1)进行连接处理,就得到想要的结果,因为REDUCE得到结果第一行是0,所以用DROP函数将第一行删除就可以了。
总体函数思路不难,就是写起公式来有点绕,有兴趣的小伙伴一定要练起来啊!