提起“large”和“small”这两个英文单词,绝大部分同学都不会陌生,表示“大的”和“小的”意思。但是,你知道吗,它们也是两个超级好用的取大小值的Excel函数。
Large函数的功能是返回一组数据中第k大值,其中“k”由用户在参数中指定,如果是“3”,则返回第三大值,如果是“1”,则返回最大值;同理,Small函数返回一组数据中第k小值。
由此可见,Large函数和Small函数返回“最值”的功能要比Max和Min函数更强大,Max和Min函数只能返回最大值和最小值。
两个函数的语法结构相同,分别为Large(array,k)和Small(array,k)。其中:
array:表示需要返回第k大值或者第k小值的单元格区域或者数组;
k:表示返回值在单元格区域或者数组中的排序位置。
下面我们来举例说明两个函数的实际使用:
1、查找指定序号的值
在单元格D2键入公式“=LARGE(B2:B16,3)”返回销售排行第三的销售数量;在单元格D3键入公式“=SMALL(B2:B16,3)”则返回销售排行倒数第三的销售数量。
两个函数的参数一模一样。
2、有条件查找指定序号的值
譬如需要查询小于100的最大值,在单元格D2键入公式“=LARGE((B2:B16<100)*B2:B16,1)”,其中“(B2:B16<100)*B2:B16”运用了数组计算,因此这是一个数组公式,需要同时按下CTRL+SHIFT和ENTER三键确认,并且系统在公式上自动加上了数组公式的标记大括号。
首先计算(B2:B16<100),即运用比较运算符将单元区域B2:B16中的数据逐一与100进行比较,生成一个逻辑值的数组{FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE};
然后,逻辑值数组*B2:B16,在进行算术运算时,逻辑值TRUE等于1,False等于0,两个数组相乘的运算规则是对应的数据项相乘,结果为{0;50;0;0;0;64;0;0;0;0;49;0;82;0;0},新数组只保留了单元格区域B2:B16中小于100的数据,大于等于100的数据全部转化为0。
最后Large函数返回新数组中最大值82。
那么如果要查询大于100的最小值,是否只需照搬以上公式,譬如写作“=SMALL((B2:B16>100)*B2:B16,1)”呢?
答案是NO。因为这个方法没有将小于100的数据屏蔽掉,而是转换为0,在刚才求最大值的例子中,所有数据都大于0,保留0不会影响最后结果,但是如果用刚才的例子求最小值,0就有可能影响最后结果,因为0可能比真正的答案要小。
要解决这个问题,就必须把不符合条件的数据屏蔽掉。在单元格D3键入公式“=SMALL(IF(B2:B16>100,B2:B16),1)”,并按CTRL+SHIFT和ENTER三键确认。其中:
首先计算IF(B2:B16>100,B2:B16),通过IF函数逐一判断单元格区域B2:B16中的数据是否大于100,是则返回该值,否则返回错误值,生成一个新数组{346;FALSE;298;307;200;FALSE;FALSE;225;189;174;FALSE;309;FALSE;249;296}。
然后Small函数返回新数组中的最小值,错误值被忽略,结果为174。
3、升序或者降序排列
在单元格D2键入公式“=SMALL($B$2:$B$16,ROW(A1))”并下拉复制即可升序排列销售数量。
ROW函数返回引用单元格的行号,则ROW(A1)返回行号1作为Small函数的参数k,在下拉复制过程中,单元格引用自动位移,则行号自动递增。
生成降序的方法一样,将函数改为Large函数,即将公式改为“=LARGE($B$2:$B$16,ROW(A1))”即可。
4、汇总指定序号的值
譬如要计算排名前三的销售数量合计,可以在单元格E2键入公式“=SUM(LARGE(B2:B16,{1,2,3}))”。
公式使用常量数组{1,2,3}给Large函数的第二个参数k赋值,当然也可以是{1,2,3,4,5}或者{1,3,5},取决于实际需求。
Large函数逐一返回常量数组各数组项作为k值的结果,生成一个新数组“{346,309,307}”。
Large函数本身没有相加的功能,最后使用Sum函数汇总新数组的数据项。也可以嵌套使用Average函数等生成平均数等。
从未使用过Large和Small函数的同学,快来试试吧!