标题有些绕,举个栗子一目了然。
比如有5个数字:(1,2,3,21,22),需要求出这5个数字里面大于10的最小值,那需要得到的值就是21,excel中求最大值或者最小值都很简单,max和min函数就解决了,但是求大于某个值的最小值,就会有些绕,目前我有两种方法能求出这个数,一是min函数的数组公式,二是countif+large(或者countif+small函数)
一、min函数数组公式
min函数的作用是求出一组数据中的最小值
这个例子主要用到了这个函数和求最大值的max函数的一个特性:当参数是数组或者引用的时候,会忽视逻辑值(min函数其实挺复杂的,只是我们的使用方法很简单),逻辑值就是TRUE和FALSE,if函数里面判断显示哪个就是根据逻辑值进行的。
插个题外话,以下内容需要注意(摘自百度百科):
min函数有两种使用方法:直接把数值当做参数,以及引用一个区域/数组
参数可以是数字、空白单元格、逻辑值或表示数值的文字串。如果参数中有错误值或无法转换成数值的文字时,将引起错误。
如果参数是数组或引用,则函数 MIN 仅使用其中的数字,数组或引用中的空白单元格,逻辑值、文字或错误值将忽略。如果逻辑值和文字串不能忽略,请使用 MINA 函数 。
如果参数中不含数字,则函数 MIN 返回 0。
说人话就是,以下两个公式的计算结果不相等:
上面两个公式,都是求5个数的最小值,区别是前一个是直接引用,后一个是把这个5个数字直接当做了min的参数。
因为从上面的描述可以知道,当min的参数是引用的时候,true和false这种逻辑值是被直接忽视的,所以返回结果是1,而当做参数的时候,true相当于是1,false相当于是0,所以返回了0.
sum、average、max等这些函数也有这种特性,大家在用的时候要小心。
用min数组公式来解决这个问题,目标就是构建出一个数组来,把小于规定数字的值全部设为false,那在这个数组中用min求值的话,因为参数是数组,会忽视false,就求出了大于这个值的最小值,详细公式为:
因为是数组公式,所以需要用ctrl+shift+enter才能求出来,我们一步步看下这个公式:
1、if中的判断语句,B2:B6>10,是用B2:B6中的每一个数字去和10比大小,比较运算的结果为逻辑值,B2:B6为一个区间,可以理解为一个数组,所以返回值也是一个数组:{FALSE;FALSE;FALSE;TRUE;TRUE}
2、if的判断条件是一个数组的时候,就用到了另一个概念:if会把数组中的每一个值进行真假判断,比如不是0的数值就是真,就读取if函数的第二个参数,为0就读取第三个参数,这个例子里面,前三个值都是false,所以直接读取了最后的false,而第4和5个值为true,会读取B2:B6的第4和5个数字,分别就是32和21,所以内部if的最终运算结果为:{FALSE;FALSE;FALSE;32;21}
3、因为min函数的参数是一个数组,会忽略逻辑值,所以相当于在32和21中求最小值,最终就返回了21(其实前一步if函数的最后一个参数是true也可以,那最后的min函数就是在{TRUE;TRUE;TRUE;32;21}这个数组中求最小值,其实结果也一样,用false只是为了不混淆,用true可以,但是不能用1这种数字,因为这样最后生成的数组就包含数字了,可能会引起错误)
二、rank+large(rank+small)函数
第二种方法比第一种简单的多,理解了思路就很清晰了:
求大于某个值的最小值,那就是两步:求出这组数据中小于这个数字的有n个,然后返回这组数据中第n-1大的数,或者求大于这个数字的有m个,返回这组数据第m大的数
countif函数作用是求满足条件的单元格数量,large是求一组数据中第几大的数
比如还是:1,2,3,32,21这组数,小于10的数字有3个,而大于10的最小值就是这组数据里面第2大的数,看详细公式:
以上两种方法等价,只是别被“第几大”这个概念绕晕了
large的对应函数是small,求一组数据中第几小的数,和上面的公式大同小异,就不细说了。