史上最强选择组装函数choose的用法(二)
1.把两个数组组合成一个数组
=CHOOSE((allrow>ROWS(x))+1,x,LOOKUP(allrow,rowy,y))

在这个公式中,定义了4个名称。分别是x,y,allrow,rowy。它们对应的公式如上图右表所示。名称x是A3:A9的区域。名称y是C3:C9的区域。
名称allrow的公式为=ROW(INDIRECT(1&":"&COUNTA(x,y)))。返回的结果为{1;2;3;4;5;6;7;8;9;10;11;12;13;14}。
COUNTA(x,y)统计数组x和数组y的元素总个数。数组x有7个元素,数组y也是7个元素,一共是14个元素。
allrow就是用row和indirect构造出1到14的所有数字,这一步的目的是为了得到组合后数组的所有序号。
名称rowy的公式为=ROW(INDIRECT("1:"&ROWS(y)))+ROWS(x),返回的结果为{8;9;10;11;12;13;14}。
ROWS(y)返回数组y的元素个数,是7个。ROW(INDIRECT("1:"&ROWS(y)))返回的就是{1;2;3;4;5;6;7}。ROWS(x)返回数组x的元素个数,是7个。二者相加就是{8;9;10;11;12;13;14}。
名称rowy其实就是为了得到数组y的序号。数组x的序号是1到7。数组y就要从8开始,有7个元素,那就是8到14。
这4个名称的意思理解了,就可以看我们最开始的公式了。=CHOOSE((allrow>ROWS(x))+1,x,LOOKUP(allrow,rowy,y))
choose的第1参数(allrow>ROWS(x))+1返回的结果为{1;1;1;1;1;1;1;2;2;2;2;2;2;2}。意思就是把数组x全部编号为1,数组y全部编号为2。具体计算过程就是({1;2;3;4;5;6;7;8;9;10;11;12;13;14}>7)+1。
第2参数x就不用说了,还是A3:A9的区域。
第3参数LOOKUP(allrow,rowy,y)是一个lookup函数,返回的结果为{#N/A;#N/A;#N/A;#N/A;#N/A;#N/A;#N/A;48;"小";"时";"都";"吃";"不";"完"}。allrow是1到14,rowy是8到14,y是C3:C9的区域。
下面画了个图,方便大家理解。第1参数的索引值1对应的是第2参数的值,第1参数的索引值2对应的是第3参数的值。这样就把两个数组组合成一个数组了。这里用if函数也是可以的,因为只有2个数组。

2.计算业绩达标奖
如下图所示,根据店铺业绩和个人业绩来计算业绩达标奖。最下边的表是评定奖励的等级表。这个题目有2个条件,首要条件是根据店铺业绩确定在哪个档次,然后在对应的档次中确定个人业绩在哪个区间,最后返回奖励。

这个题目该如何做呢?咋一看还是挺难的。那是因为它有多个区域,我们平时查找一般只有一个区域。所以首先要确定它在哪个区域,然后再在该区域中查找。
=LOOKUP(C3%%,CHOOSE(MATCH(B3%%,{0;5;8}),{0;0.8;1.2;1.8},{0;1;1.5;2},{0;1.5;2.5;3}),{0;1;1.5;2}/1%)
因为上面的表格不规范,所以我们只能用常量数组来表示。一档的个人业绩区间表示为{0;0.8;1.2;1.8};二档的个人业绩区间表示为{0;1;1.5;2};三档的个人业绩区间表示为{0;1.5;2.5;3}。店铺的业绩区间表示为{0;5;8}。
https://pan.baidu.com/s/1kLaui95KFfdpImB86BRabA