利用加权思想求各产品销量最高的月份

下表是一个二维表,记录的是各产品在1~6月的销售数据。根据J2单元格的产品查询出其在1~6月中销量最高的月份。比如C产品1~6月的销量中,474是最高销量,对应的月份是五月。

看完动图后,相信你已经理解题意了,那该如何解题呢?很多小伙伴想到的方法可能是这样的:

先根据产品查询出它在1~6月的销量,然后在1~6月的销量中取出最大值,再根据最高销量在1~6月销量中的位置,返回对应的月份。

公式如下,优点是它不是数组公式,缺点是公式较长。

=INDEX(B2:G2,MATCH(MAX(OFFSET(B2:G2,MATCH(J2,A3:A10,),)),OFFSET(B2:G2,MATCH(J2,A3:A10,),),))


1.一维数组的加权

下面来说下加权的方法,输入下面的公式,按ctrl+shift+enter。

=INDEX(2:2,RIGHT(MAX(OFFSET(B2:G2,MATCH(J2,A3:A10,),)/1%+COLUMN(B:G)),2))

MATCH(J2,A3:A10,)这部分用match查找J2单元格的产品在A3:A10这个区域中的位置,结果为3。

OFFSET(B2:G2,MATCH(J2,A3:A10,),)这部分用offset偏移得到了C产品在1~6月的销量,结果为{339,330,457,231,474,163}。它是以B2:G2为基点,向下偏移3行。

OFFSET(B2:G2,MATCH(J2,A3:A10,),)/1%+COLUMN(B:G)这部分是加权的思想,用offset的结果,也就是C产品1~6月的销量,乘以100,再加上对应的列号。

最后返回的结果为{33902,33003,45704,23105,47406,16307}。

加权处理后的结果有两重意义。比如33902,前面的3位数339代表销量;后面的2位数代表该销量对应的列号。

而且它的结果不影响原来结果的大小顺序。比如原来C产品1~6月的销量中,第1大是474,第2大是457;加权处理后的结果中,第1大是47406,第2大是45704。

接下来用max从加权处理后的结果中取出最大值47406,它的意思是C产品的最大销量是474,对应的列号是6。

然后用right从47406中截取右边的2位数06,得到了最高销量对应的列号,最后用index返回第2行第6列的月份。

2.look+frequency
lookup和frequency是我非常喜欢用的一个组合,不亚于index和match。因为它虽然是数组公式,但不用按三键。输入下面的公式:

=LOOKUP(,0/FREQUENCY(-9^9,-OFFSET(B2:G2,MATCH(J2,A3:A10,),)),B2:G2)

OFFSET(B2:G2,MATCH(J2,A3:A10,)这部分在第1种方法中已经说过,返回C产品1~6月的销量,结果为{339,330,457,231,474,163}。
FREQUENCY(-9^9,-OFFSET(B2:G2,MATCH(J2,A3:A10,),))这部分用frequency定位到最高销量的位置,让最高销量的位置计数1,其他位置计数0,返回的结果为{0;0;0;0;1;0;0}。
定位的方式是在销量前面添加负号,让最大值变为最小值,然后利用frequency定位最小值的原理,间接的定位到最大值。
不理解frequency的原理,可以看《frequency专题》:https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1318296719930589185&__biz=MzU2ODgyMDYwNw==#wechat_redirect。
最后用lookup的经典查询方式,找到最高销量的位置,返回对应的月份。
3.二维数组的加权

输入下面的公式,按ctrl+shift+enter。

=INDEX(2:2,RIGHT(MAX((B3:G10/1%+COLUMN(B:G))*(A3:A10=J2)),2))

这个公式是对二维区域B3:G10进行加权处理,得到了一个二维数组,然后用A3:A10=J2筛选出C产品加权后的数据,其他产品的数据都变为0。接下来用max取出最大值,再用right从最大值中取出对应的列号,最后用index返回第2行中对应的月份。

链接:

https://pan.baidu.com/s/1yGh6YlfkvqVhmdoKGcswPQ

提取码:tl1f
(0)

相关推荐