查找各产品最高销量对应的客户和最高销量(条件求最大)
同学们,大家好。今天分享一个群友的问题,是个条件求最大值的问题。先来看下数据源和完成后的效果。下图左表是数据源,问题是红色字体部分,查找各产品最高销量对应的客户以及最高销量,比如飞扬最高销量的是李四,最高销量是18。效果如右下表所示。
这个问题是一个条件求最大值的问题,我们肯定先要算出每种产品的最高销量,然后再根据最高销量查找出对应的客户。先来看常规的做法,在G6单元格输入公式=MAX((B$2:B$11=E6)*C$2:C$11),按ctrl+shift+enter三键结束,向下填充,得到了每种产品的最高销量。
再来看最高销量对应的客户,在F6单元格输入公式=INDEX(A$2:A$11,MATCH(MAX((B$2:B$11=E6)*C$2:C$11),(B$2:B$11=E6)*C$2:C$11,)),按ctrl+shift+enter三键结束,向下填充,完成。这里还有一点要说明的是如果一种产品的最高销量有多个,我这里只返回第1个最高销量对应的客户。比如,舒蕾的最大销量是10,有2个,只返回第1个对应的张三。想要返回最后一个可以用lookup。
上面2个公式用的函数,都是常用函数,比较简单的。只不过里面用了数组,如果对数组不太理解的话,会有点吃力的。这里我就不详细解释了。
接下来,我主要说一下frequency的做法。frequency可以求最大(小)值,也可以求条件最大(小)值。下面先说最大值和最小值,如下图所示,求A列销量的最小值和最大值。很多同学可能会说用min和max不就可以吗。没错,如果只求最大和最小值,确实用min和max就可以了。但我们用frequency求出最大值和最小值后,还能进行后续的查找,这个才是它真正的用处。
首先看下最小值是怎么求的,在C2单元格输入公式=LOOKUP(,0/FREQUENCY(-9^9,A2:A11),A2:A11),完成。还是先看FREQUENCY(-9^9,A2:A11)这部分,它的第1参数是-9^9,是一个很小的数字,比第2参数的所有数字都小,那么就会在第2参数的最小值(靠前)的位置计数1,如下图所示,在最小值10的位置计数1。虽然有多个10,但是只在第1个10的位置计数。
这样的话,就相当于定位到最小值的位置了,然后用lookup的经典套路lookup(1,0/(条件区域=条件),返回区域)来查找到最小值10。frequency返回结果的0可以看做条件不成立,1可以看做条件成立。
那最大值53又是怎么求出来的呢?其实只要将最大值变成最小值就可以了,然后定位到最小值的位置,最后返回最大值的结果。在D2单元格输入公式=LOOKUP(,0/FREQUENCY(-9^9,-A2:A11),A2:A11),完成。其实这个公式就是在frequency第2参数的前面加了一个负号,目的就是将最大值变为最小值,最小值变为最大值。说白了就是大小颠倒了顺序。
这样说,大家可能不太理解,还是以图片说明一下。由于frequency的第2参数加了个负号,所以最大值53变成最小值-53,而第1参数还是一个很小的数字-9^9,所以它在最小值-53的位置计数1。然后用lookup找到1的位置返回53就找到最大值了。
上面frequency求最大(小)值大家理解了,就可以说我们最开始的问题了,无非就是加个条件。在G6单元格输入公式=LOOKUP(,0/FREQUENCY(-9^9,-(B$2:B$11=E6)*C$2:C$11),C$2:C$11),不用按三键,向下填充,完成。这样就得到了最高销量。这个公式就比我们上面说的求最大值的公式多了一个条件,也就是(B$2:B$11=E6)这部分。
再来看最高销量对应的客户,在F6单元格输入公式=LOOKUP(,0/FREQUENCY(-9^9,-(B$2:B$11=E6)*C$2:C$11),A$2:A$11),向下填充,完成。用frequency的好处就是运算速度会快一点,而且不用按三键。
另外我的截图是分3个工作表的,大家最好下载文件查看的。
文件链接:
https://pan.baidu.com/s/1Xdtx1uwq0fGGI936Bi7hgA
提取码:rfv7