问题:根据各员工的百分比显示员工姓名

函数公式解决:

解法一:=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,返回对应的“李四”;以此类推……

预防老年痴呆的公式_数组_02

 

但如果查找值正好是0.1或0.4时,会返回与期待不符的结果,可以在第一参数上减去一个较小数(1%%),或在第二参数上加上一个较小数(9^-9)用以修正

MMlut、Subtotal、Sumif都是生成累计求和的内存数组

MMult思路:

第一个参数建构纵横两个常数组进行比对,得出三行三列内存数组

预防老年痴呆的公式_数组_03

 

第二个参数利用N(IF({1}……结构提取H1:H3单元格里的内容,并将内容为“百分比”的单元格转换为0

最后得出累计百分比

预防老年痴呆的公式_数组_04

 

Subtotal和Sumif思路:

利用OFFSET(H$1,,,ROW($1:$3))生成三个平面,第一个平面是H1:H1,第二个平面是H1:H2,第三个平面是H1:H3,再利用Subtotal或Sumif将每个平面分别求和的结果生成一个新的内存数组。

预防老年痴呆的公式_数据_05

 

原博客各种作……所以换阵地了,不过每篇都搬过来,实在有点累,想看就自己看吧:http://blog.sina.com.cn/pureiceshadow