
说起求和函数,大家可能首先想到的是SUM和SUMIF函数,的确这两个是最常见的,但是也有一定的局限性,例如面对多个条件("且"或者"或")求和时,就显得不够方便甚至做不到,因此今天来学习一下SUMIFS这个函数的应用。
1 函数功能与参数:
功能:快速对多条件单元格求和
参数:SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)
参数名称 | 说明 |
---|---|
Sum_range(必需) | 要求和的单元格区域。 |
Criteria_range1(必需) | 使用Criteria1测试的区域。Criteria_range1和Criteria1设置用于搜索某个区域是否符合特定条件的搜索对。 一旦在该区域中找到了项,将计算Sum_range中的相应值的和。 |
Criteria1(必需) | 定义将计算Criteria_range1中的哪些单元格的和的条件。 |
Criteria_range2, criteria2, … (可选) | 附加的区域及其关联条件。 最多可以输入 127 个区域/条件对。 |
2 函数的应用
2.1 单条件求和
虽然说sumif函数可以满足单条件求和,不过sumifs不仅用来计算单条件求和,且满足多条件求和,用习惯了就可以代替sumif了,毕竟两者参数的顺序还不太一样
例子1.1 求出区域为华北的销售量

输入公式:=SUMIFS(E3:E10,C3:C10,"华北")
解读:第一个参数为求和区域E3:E10,第二个参数为条件区域C3:C10,第三个参数为第二个参数对应的条件,区域为“华北”
例子1.2 求出"销售量>80"的销售量总和

输入公式:=SUMIFS(E3:E10,E3:E10,">80")
2.2 通配符条件求和
这里简单介绍一下通配符,顾名思义就是通用的字符,它能够代替任意字符
主要有三种:
- 问号(?)代表任意单个字符
- 星号(*)代表任意多个字符
- 波形符(~)代表波浪符右侧的通配符转换为普通字符(即不是作为通配符使用)
例子2 求出"资源含有A"的销售量

输入公式:=SUMIFS(E:E,D:D,"*A*")
在这里,资源包含A,可以利用"*A*"进行匹配,其中"*"代表着任意(包括0)多个字符
2.3 多条件求和(条件关系为"且")
例3 求出"区域为华南且资源含有C"的销售量
这里有两个条件,一个是"区域为华南",一个是"资源含有C",两个条件的关系为"且"
所以,加上第二个条件区域和对应条件即可计算

输入公式:=SUMIFS(E3:E10,C3:C10,"华南",D3:D10,"*C*")
2.4 多条件求和(条件关系为"或")
例4 求出"区域为华东或者华西"的销售量
这里也有两个条件,"区域为华东"和"区域为华东",两者关系为"或"
当然我们可以使用分开求和的方式,然后将两者进行合计,如
输入公式:=SUMIFS(E3:E10,C3:C10,"华东")+SUMIFS(E3:E10,C3:C10,"华西")
但是作为一个有(xiang)追(tou)求(lan)的打工人,当然是越简单越好,因此介绍利用数组的方法进行求和计算

输入公式:=SUM(SUMIFS(E3:E10,C3:C10,{"华东","华西"}))
解读:这里的公式分为两个部分,先看SUMIFS(选中公式,摁F9,可以查看计算结果):

可以看到,SUMIFS(E3:E10,C3:C10,{"华东","华西"})的计算结果为{180,140}
可以理解为SUMIFS函数里面,求和区域E3:E10和条件区域C3:C10,与数组{"华东","华西"}的每一项都分别作为SUMIFS的参数进行计算,得到
{SUMIFS(E3:E10,C3:C10,"华东"),SUMIFS(E3:E10,C3:C10,"华西")}数组,即{180,140}
接下来就是利用SUM对{180,140}进行求和,从而得到结果320
2.5 多条件求和("或"和"且"都有)
例5 求出"区域为华东或者华北,且资源包含A或者C"的销售量
这里就有四个条件了,分别是(华东,*A*),(华东,*C*),(华北,*A*),(华北,*C*)
根据例4的,我们当然可以利用公式:
=SUM(SUMIFS(E3:E10,C3:C10,{"华东";"华北"},D3:D10,"*A*"))+SUM(SUMIFS(E3:E10,C3:C10,{"华东";"华北"},D3:D10,"*C*"))
进行计算,但是这样显然还不够简洁,那有没有办法像例4那样,对公式进行简化呢,答案显示是可以的,公式为:
=SUM(SUMIFS(E3:E10,C3:C10,{"华东";"华北"},D3:D10,{"*A*","*C*"}))
这里就需要添加一下数组的基础知识了,首先,数组是什么?
数组是按一行,一列或多行列区域的数据元素的集合。
在数组里面,逗号表示列,分号表示行,像例4的{180,140}就是一个1行2列数组,{180;140}则是一个2行1列的数组
那么,在Excel是怎么输入数组的呢?
选中行数和列数对应的区域,输入公式,然后ctrl+shift+enter进行输入
下面是一个3行3列的数组

用SUM函数对数组求和,就是将数组所有的数进行求和,得到一个总和值
在这个的基础上,我们再来分析公式:
=SUM(SUMIFS(E3:E10,C3:C10,{"华东";"华北"},D3:D10,{"*A*","*C*"}))
首先我们看一下SUMIFS函数得到的是什么结果?

得到的是{0,100;185,0},也就是
*A* | *C* | |
---|---|---|
华东 | 0 | 100 |
华北 | 185 | 0 |
这里就很明显能看到,原来{"华东";"华北"}与{"*A*","*C*"}组合作用的就是得到区域为行,资源为列的2*2数组,对应的值是每一项的和
当然,我们也可以将逗号和分号调换,换成{"华东","华北"}与{"*A*";"*C*"}

得到的是{0,185;100,0},即:
华东 | 华北 | |
---|---|---|
*A* | 0 | 185 |
*C* | 100 | 0 |
所以不管用哪个公式,得到的结果都是一样的,只是求解过程中数组行列所代表的含义有所不同而已
以后会继续不定期更新Excel、SQL、Python相关的知识,喜欢的朋友可以关注、收藏、点赞走一波哟,下篇再会~