利用excel求特定条件下的最大/小值(maxif/minif)
欢迎关注我的公众号:Romi的杂货铺
在Excel中有sumif,countif等函数可以实现求特定条件下数值的加总和计数,那么如何在一个或多个条件下求出此时的最大值或者最小值呢?
其实sumif函数和countif函数实际上都是可以由sum/count+if函数通过数组实现的,所以求特定条件下的最大/小值也可以使用同样的方法。同时maxifs函数已经可以在office365和office 2019中使用了,具体可以参见:https://support.office.com/zh-cn/article/MAXIFS-%e5%87%bd%e6%95%b0-dfd611e6-da2c-488a-919b-9b6376b28883,如果使用的是这两个版本的office可以直接使用
求最大值:
(1)单条件
如果只有一个条件,例如需要求同一类别下的最大的数量,
可以参照以下公式即可:
=MAX(数字值区域*条件1)
=MAX(IF(条件区域=条件1,数字值区域)
现在需要找到每一个类别下的最大值,输入公式=MAX(($A2:2:A8=A2)∗(8=A2)*(C2:2:C8))或者=MAX(IF(8))或者=MAX(IF(A2:2:A8=A2,8=A2,C2:2:C$8)),因为里面涉及到数组的计算,所以要让公式生效,必须三键同时按下:Ctrl+Shift+Enter。结果如下图 所示:
注意这里的相对引用和绝对引用,如果条件是在固定的单元格需要使用绝对引用(加上$符)
(2)多条件
如果是多条件的求最大值呢?可以参照以下公式:
=MAX(数字值区域条件1条件2…)
=MAX(IF((条件区域1=条件1)*(条件区域2=条件2)…,数字值区域)
如图所示,如果要求每个城市,每个类别中的最大值,需要在目标单元格内输入公式:=MAX(($A2:2:A8=A2)∗(8=A2)*(B2:2:B8=B2)∗(8=B2)*(C2:2:C8))或者=MAX(IF((8))或者=MAX(IF((A2:2:A8=A2)∗(8=A2)*(B2:2:B8=B2),8=B2),C2:2:C$8)),并且三键同时按下让公式生效。
求最小值:
(1)单条件
如果只有一个条件,例如需要求同一类别下的最大的数量,
可以参照以下公式即可:
=MIN(IF(条件区域=条件1,数字值区域)
现在需要找到每一个类别下的最小值,输入公式=MIN(IF($A2:2:A8=A2,8=A2,C2:2:C$8)),同时按下:Ctrl+Shift+Enter。结果如下图 所示:
(2)多条件
如果是多条件的求最小值呢?可以参照以下公式:
=MIN(IF((条件区域1=条件1)*(条件区域2=条件2)…,数字值区域)
如图所示,如果要求每个城市,每个类别中的最小值,需要在目标单元格内输入公式:=MIN(IF(($A2:2:A8=A2)∗(8=A2)*(B2:2:B8=B2),8=B2),C2:2:C$8)),并且三键同时按下让公式生效。
一个有趣的点:
=MAX(数字值区域条件1条件2…)这类型的公式改为MIN后就不可用了,而=MAX(IF((条件区域1=条件1)*(条件区域2=条件2)…,数字值区域)直接改为MIN是可行的,那么原因是什么呢?
大家可以尝试将公式改为MIN(数字值区域条件1条件2…),会发现返回最小值全部都是0。
这是因为=MAX(数字值区域条件1条件2…)这一个公式相当于每一个数组中的元素都是和另外的一个数组中的元素相乘的,当不满足条件时返回false,而false乘以任何数字都会得到0,所以在判断最小的值的时候0是最小的值。
而=MAX(IF((条件区域1=条件1)(条件区域2=条件2)…,数字值区域)的IF((条件区域1=条件1)(条件区域2=条件2)…,数字值区域)函数保证了不满足条件时返回false(if函数没有第三参数时默认返回false),全部满足条件后返回数字值,min函数会忽略错误值,从而就可以返回真正的最小值了