问题:根据各员工的百分比显示员工姓名
函数公式解决:
解法一:=LOOKUP(A2/MAX(A:A),MMULT(N({1,2,3}<{2;3;4}),N(IF({1},H$1:H$3)))+9^-9,G$2:G$4) 解法二:=LOOKUP(A2/MAX(A:A)-1%%,SUBTOTAL(9,OFFSET(H$1,,,ROW($1:$3))),G$2:G$4) 解法三:=LOOKUP(A2/MAX(A:A)-1%%,SUMIF(OFFSET(H$1,,,{1;2;3}),"<>"),G$2:G$4)
思路:
三种解法都是利用Lookup二分法查找,查找序号除以20以后的数在累计百分比中对应员工的位置
Lookup的查找规则是按查找范围为升序数据中小于可匹配值的最大值,如E2单元格中是查找0.05在H1:H3三个数中小于0.1的最大值,即0,返回对应的“张三”;E4:E8中查找各自在H1:H3三个数中小于0.4的最大值,即0.1,返回对应的“李四”;以此类推……
但如果查找值正好是0.1或0.4时,会返回与期待不符的结果,可以在第一参数上减去一个较小数(1%%),或在第二参数上加上一个较小数(9^-9)用以修正
MMlut、Subtotal、Sumif都是生成累计求和的内存数组
MMult思路:
第一个参数建构纵横两个常数组进行比对,得出三行三列内存数组
第二个参数利用N(IF({1}……结构提取H1:H3单元格里的内容,并将内容为“百分比”的单元格转换为0
最后得出累计百分比
Subtotal和Sumif思路:
利用OFFSET(H$1,,,ROW($1:$3))生成三个平面,第一个平面是H1:H1,第二个平面是H1:H2,第三个平面是H1:H3,再利用Subtotal或Sumif将每个平面分别求和的结果生成一个新的内存数组。