Table of contents
本教程解释了SUMIF和SUMIFS函数在语法和用法上的区别,并提供了一些公式实例,以在Excel 365、2021、2019、2016、2013、2010和低版本中对具有多个AND/OR条件的值进行求和。
众所周知,Microsoft Excel提供了一系列函数来对数据进行各种计算。 几篇文章之前,我们探讨了COUNTIF和COUNTIFS,它们分别用于根据单个条件和多个条件对单元格进行计数。 上周我们介绍了Excel的SUMIF,它将符合指定条件的数值相加。 现在是时候介绍一下复数版本的SUMIF - Excel的SUMIFS,允许按多个标准对数值进行求和。
熟悉SUMIF函数的人可能会认为,将其转换为SUMIFS只需要一个额外的 "S "和一些额外的条件。 这似乎很合乎逻辑......但在与微软打交道时,"合乎逻辑 "并不总是如此 :)
Excel SUMIF函数--语法& 使用方法
SUMIF函数用于有条件地对数值进行求和,基于一个 单一标准 我们在上一篇文章中详细讨论了SUMIF语法,这里只是快速复习一下。
SUMIF(range, criteria, [sum_range])- 范围 - 你的标准要评估的单元格范围,需要。
- 标准 - 必须满足的条件,要求。
- 总数_范围 - 如果满足条件,要加的单元格,可选。
正如你所看到的,Excel SUMIF函数的语法只允许一个条件。 而我们仍然说,Excel SUMIF可以用来对具有多个条件的值进行求和。 这怎么可能呢? 通过添加几个SUMIF函数的结果和使用具有数组条件的SUMIF公式,正如在下面的例子中所展示的。
Excel SUMIFS函数--语法& 使用方法
你在Excel中使用SUMIFS来 根据多个标准找到一个有条件的数值之和 .SUMIFS函数是在Excel 2007中引入的,在Excel 2010、2013、2016、2019、2021和Excel 365的所有后续版本中都可用。
与SUMIF相比,SUMIFS的语法要复杂一些。
SUMIFS(sum_range, criteria_range1, criteria1, [critical_range2, criteria2], ...)前3个参数是必须的,其他的范围和它们的相关标准是可选的。
总数_范围
- 一个或多个需要求和的单元格,可以是一个单元格、一个单元格区域或一个命名的区域。 只有带数字的单元格才会被求和;空白和文本值被忽略。标准_范围1
- 第一个要被相关标准评估的范围,需要。标准1
- 你可以以数字、逻辑表达式、单元格引用、文本或其他Excel函数的形式提供标准。 例如,你可以使用10、">=10"、A1、"樱桃 "或TODAY()等标准。criteria_range2, criteria2, ...。
- 你可以在SUMIFS公式中最多使用127个范围/标准对,这些是额外的范围和与之相关的标准,是可选的。
注意事项。
- 为了使SUMIFS公式正常工作,所有的 标准_范围 参数的尺寸必须与 总数_范围 ,即相同的行和列的数量。
- SUMIFS函数采用AND逻辑工作,这意味着只有在满足所有指定条件的情况下,才对求和范围内的单元格进行求和,即所有条件对该单元格都是真实的。
基本的SUMIFS公式
现在,让我们来看看Excel的SUMIFS公式中的两个条件。 假设,你有一个表格,列出了来自不同供应商的水果托运。 你在A列有水果名称,B列有供应商名称,C列有数量。你想要的是找出与特定水果和供应商有关的金额之和,例如,Pete提供的所有苹果。
当你学习新的东西时,从简单的东西开始总是一个好主意。 因此,首先,让我们定义SUMIFS公式的所有参数。
- sum_range - C2:C9
- criteria_range1 - A2:A9
- criteria1 - "苹果"
- criteria_range2 - B2:B9
- criteria2 - "Pete"
现在将上述参数组合起来,你将得到以下SUMIFS公式。
=SUMIFS(C2:C9, A2:A9, "苹果", B2:B9, "彼得")
为了进一步完善公式,你可以用单元格引用代替文本标准 "苹果 "和 "皮特"。 在这种情况下,你将不必改变公式来计算来自不同供应商的其他水果的数量。
=sumifs(c2:c9, a2:a9, f1, b2:b9, f2)
注意:SUMIF 和 SUMIFS 函数本质上是不区分大小写的。 要让它们识别文本大小写,请参见 Excel 中区分大小写的 SUMIF 和 SUMIFS 公式。
Excel中的SUMIF与SUMIFS
由于本教程的目的是涵盖按多个条件求和的所有可能方法,我们将讨论这两个函数的公式示例--Excel SUMIFS和SUMIF与多个条件。 为了正确使用它们,你需要清楚地了解这两个函数的共同点和它们的不同点。
虽然共同的部分很清楚(类似的目的和参数),但差异并不那么明显,尽管非常重要。
SUMIF和SUMIFS之间有4个主要区别。
- 条件的数量 . SUMIF一次只能评估一个条件,而SUMIFS可以检查多个条件。
- 语法 通过SUMIF, 总数_范围 是最后一个参数,也是可选的参数--如果没有定义,在 范围 有了SUMIFS,就会对参数进行求和。 总数_范围 是第一个也是必须的参数。
- 范围的大小。 在SUMIF公式中。 总数_范围 范围 在Excel的SUMIFS中,每个 标准_范围 必须包含与之相同数量的行和列。 总数_范围 争论。
例如,SUMIF(A2:A9,F1,C2:C18)将返回正确的结果,因为在这些单元格中最左边的 总数_范围 因此,Excel会自动进行修正,并在 "数据 "中包含尽可能多的列和行。 总数_范围 如同在 范围 .
具有不平等大小范围的SUMIFS公式将返回一个#VALUE!错误。
- 可利用性 .SUMIF在所有的Excel版本中都可用,从365到2000。 SUMIFS在Excel 2007和更高版本中可用。
好了,战略(即理论)够了,让我们进入战术(即公式例子:)。
如何在Excel中使用SUMIFS--公式示例
刚才,我们讨论了一个带有两个文本标准的简单SUMIFS公式。 以同样的方式,你可以用数字、日期、逻辑表达式和其他Excel函数表示的多个标准来使用Excel SUMIFS。
例1.带有比较运算符的Excel SUMIFS
在我们的水果供应商表中,假设,你想把所有数量在200以上的Mike的交货量相加。 要做到这一点,你在criteria2中使用比较运算符 "大于或等于"(>=),得到以下SUMIFS公式。
=SUMIFS(C2:C9,B2:B9,"Mike",C2:C9,">=200")
注意:请注意,在Excel的SUMIFS公式中,带有比较运算符的逻辑表达式应始终用双引号("")括起来。
在讨论Excel的SUMIF函数时,我们详细介绍了所有可能的比较运算符,同样的运算符也可以用于SUMIFS标准。 例如,下面的公式可以返回单元格C2:C9中大于或等于200且小于或等于300的所有值的总和。
=SUMIFS(C2:C9, C2:C9, ">=200", C2:C9, "<=300")
例2.使用Excel的日期SUMIFS
如果你想根据当前日期对多个标准的值进行求和,请在你的SUMIFS标准中使用TODAY()函数,如下图所示。 如果C列中的相应日期在过去7天内,包括今天,下面的公式将D列中的值进行求和。
=SUMIFS(D2:D10, C2:C10,">="&TODAY()-7, C2:C10,"<="&TODAY())
注意:当你在标准中使用另一个Excel函数和一个逻辑运算符时,你必须使用安培号(&)来连接一个字符串,例如"<="&TODAY()。
以类似的方式,你可以使用Excel的SUMIF函数对给定日期范围内的数值进行求和。 例如,如果B列中的日期在2014年10月1日至2014年10月31日(含)之间,下面的SUMIFS公式将单元格C2:C9中的数值相加。
=SUMIFS(C2:C9, B2:B9, ">=10/1/2014", B2:B9, "<=10/31/2014" )
通过计算两个SUMIF函数的差值也可以得到同样的结果,正如这个例子所演示的那样--如何使用SUMIF对给定日期范围内的数值进行求和。 然而,Excel的SUMIFS要简单得多,也更容易理解,不是吗?
例3.带有空白和非空白单元格的Excel SUMIFS
在分析报告和其他数据时,你可能经常需要对空或非空单元格对应的数值进行求和。
标准 | 描述 | 公式示例 | |
---|---|---|---|
空白单元格 | "=" | 对应于空白单元格的和值,绝对不包含任何内容--没有公式,没有零长度的字符串。 | =sumifs(c2:c10, a2:a10, "=", b2:b10, "=") |
如果A列和B列中的相应单元格绝对是空的,那么C2:C10单元格中的数值之和。
将C2:C10单元格中的数值相加,条件与上述公式相同,但包括空字符串。
如果A列和B列中的相应单元格不为空,则对C2:C10单元格中的数值进行求和,包括带有空字符串的单元格。
或
SUM / LEN
=SUM((C2:C10) * (LEN(A2:A10)>0)*(LEN(B2:B10)>0))
如果A列和B列中的相应单元格不为空,则对C2:C10单元格中的数值进行求和,零长度字符串的单元格不包括在内。
现在,让我们看看如何在真实数据上使用带有 "空白 "和 "非空白 "条件的SUMIFS公式。
假设B列有订单日期,C列有交货日期,D列有数量,如何找到尚未交货的产品总数? 也就是说,你想知道B列非空单元格和C列空单元格对应的数值之和。
解决办法是使用带有2个标准的SUMIFS公式。
=sumifs(d2:d10, b2:b10,"", c2:c10, "=")
使用Excel的SUMIF与多个OR标准
正如本教程开头所指出的,SUMIFS函数是用AND逻辑设计的。 但如果你需要对具有多个OR条件的值进行求和,即至少有一个条件被满足时,该怎么办?
例1.SUMIF + SUMIF
最简单的解决方案是将几个SUMIF函数返回的结果相加。 例如,下面的公式演示了如何找到Mike和John交付的产品的总数。
=SUMIF(C2:C9, "Mike",D2:D9) + SUMIF(C2:C9, "John",D2:D9)
正如你所看到的,第一个SUMIF函数添加了与 "Mike "对应的数量,另一个SUMIF函数返回与 "John "相关的数量,然后你将这两个数字相加。
例2.带数组参数的SUM & SUMIF
上面的解决方案非常简单,当只有几个条件时,可以快速完成工作。 但如果你想对有多个OR条件的值进行求和,SUMIF+SUMIF公式可能会大大增加。 在这种情况下,更好的方法是使用一个 阵列标准 现在让我们研究一下这种方法。
你可以先把所有的条件用逗号隔开,然后把得到的逗号隔开的列表用{大括号}括起来,这在技术上叫做数组。
在前面的例子中,如果你想对John、Mike和Pete交付的产品进行求和,你的数组条件将看起来像{"John"、"Mike"、"Pete"}。 而完整的SUMIF函数是 SUMIF(C2:C9, {"John", "Mike", "Pete"} ,D2:D9)
.
由3个值组成的数组参数迫使你的SUMIF公式返回三个独立的结果,但由于我们在一个单元格中写公式,它将只返回第一个结果--即约翰交付的产品总数。 为了使这种数组标准的方法发挥作用,你必须使用一个小技巧--将你的SUMIF公式包含在一个SUM函数中,像这样。
=SUM(SUMIF(C2:C9, {"John", "Mike", "Pete"} , D2:D9) )
正如你所看到的,与SUMIF+SUMIF相比,数组标准使公式更加紧凑,并允许你在数组中添加任意多的值。
这种方法既适用于数字,也适用于文本值。 例如,如果C列中没有供应商的名字,而是有供应商的ID,如1、2、3等,那么你的SUMIF公式将类似于这样。
=sum(sumif(c2:c9, {1,2,3} , d2:d9))
与文本值不同,数字在数组参数中不需要用双引号括起来。
例3.SUMPRODUCT & SUMIF
如果你喜欢在一些单元格中列出标准,而不是直接在公式中指定它们,你可以将SUMIF与SUMPRODUCT函数结合使用,后者将给定数组中的组件相乘,并返回这些产物的总和。
=sumproduct(sumif(c2:c9, g2:g4, d2:d9))
其中G2:G4是包含你的标准的单元格,在我们的例子中是供应商的名字,如下面的截图所示。
但当然,如果你想的话,没有什么能阻止你将数值列在SUMIF函数的数组标准中。
=SUMPRODUCT(SUMIF(C2:C9, {"Mike", "John", "Pete"}, D2:D9) )
两个公式返回的结果将与你在截图中看到的相同。
具有多个OR条件的Excel SUMIFS
如果你想在Excel中不是简单地用多个OR条件来求和,而是用几组条件来求和,你将不得不使用SUMIFS而不是SUMIF。 其公式将与我们刚才讨论的非常相似。
像往常一样,一个例子可能有助于更好地说明这个问题。 在我们的水果供应商表中,让我们加上交货日期(E列),并找出迈克、约翰和皮特在10月份的总交货量。
例1.SUMIFS + SUMIFS
这种方法产生的公式包括大量的重复,看起来很繁琐,但它很容易理解,最重要的是,它很有效 :)
=SUMIFS(D2:D9,C2:C9, "Mike", E2:E9, ">=10/1/2014", E2:E9, "<=10/31/2014") +
SUMIFS(D2:D9, C2:C9, "John", E2:E9, ">=10/1/2014", E2:E9, "<=10/31/2014" ) +
SUMIFS(D2:D9, C2:C9, "Pete", E2:E9, ">=10/1/2014" ,E2:E9, "<=10/31/2014" )
正如你所看到的,你为每个供应商写一个单独的SUMIFS函数,并包括两个条件--等于或大于10月1日(">=10/1/2014",)和小于或等于10月31日("<=10/31/2014"),然后你将结果相加。
例2.带数组参数的SUM & SUMIFS
我已经试图在SUMIF的例子中解释这种方法的精髓,所以现在我们可以简单地复制这个公式,改变参数的顺序(正如你所记得的,在SUMIF和SUMIFS中是不同的),并添加额外的条件。 结果公式比SUMIFS + SUMIFS更紧凑。
=SUM(SUMIFS(D2:D9,C2:C9, {"Mike", "John", "Pete"}, E2:E9, ">=10/1/2014", E2:E9, "<=10/31/2014")
这个公式返回的结果与你在上面的截图中看到的完全一样。
例3.SUMPRODUCT & SUMIFS
正如你所记得的,SUMPRODUCT方法与前两种方法不同,你要在一个单独的单元格中输入每个标准,而不是直接在公式中指定它们。 如果有几个标准集,SUMPRODUCT函数是不够的,你将不得不使用ISNUMBER和MATCH。
因此,假设用品名称在H1:H3单元格,开始日期在H4单元格,结束日期在H5单元格,我们的SUMPRODUCT公式的形状如下。
=SUMPRODUCT(--(E2:E9>=H4), --(E2:E9<=H5), --(ISNUMBER(MATCH(C2:C9, H1:H3,0)), D2:D9)
很多人不明白为什么要在SUMPRODUCT公式中使用双破折号(--)。 关键是,Excel SUMPRODUCT忽略了除数字以外的所有数值,而我们公式中的比较运算符返回布尔值(TRUE/FALSE),这是非数字的。 为了将这些布尔值转换为1和0,你使用双减号,技术上称为双单运算符。 第一个单运算符强制执行第二个单数否定了这些值,即颠倒了符号,把它们变成+1和0,这是SUMPRODUCT函数可以理解的。
我希望上面的解释是有意义的。 即使没有,也要记住这个经验法则--当你在SUMPRODUCT公式中使用比较运算符时,使用双单数运算符(--)。
在数组公式中使用Excel SUM
正如你所记得的,微软在Excel 2007中实现了SUMIFS函数。 如果有人仍然使用Excel 2003、2000或更早的版本,你将不得不使用SUM数组公式来添加具有多个AND条件的值。 当然,这种方法在Excel 2013 - 2007的现代版本中也适用,可以认为是SUMIFS函数的老式对应。
在上面讨论的SUMIF公式中,你已经使用了数组参数,但数组公式是不同的东西。
例1.在Excel 2003和更早的版本中用多个和条件求和
让我们回到最开始的例子,我们发现了与某个水果和供应商有关的金额总和。
正如你已经知道的,使用普通的SUMIFS公式可以很容易地完成这项任务。
=SUMIFS(C2:C9, A2:A9, "苹果", B2:B9, "彼得")
现在,让我们看看如何在早期的 "无SUMIFS "版本的Excel中完成同样的任务。 首先,你以range="condition "的形式写下所有应该满足的条件。 在这个例子中,我们有两个范围/条件对。
条件1:A2:A9="苹果"
条件2:B2:B9="Pete"
然后,你写一个SUM公式,"乘以 "你所有的范围/条件对,每个都用括号括起来。 最后的乘数是范围之和,在我们的例子中是C2:C9。
=SUM((A2:A9="苹果") * ( B2:B9="彼得") * ( C2:C9)
如下面的截图所示,该公式在最新的Excel 2013版本中完美运行。
注意:当输入任何数组公式时,你必须按Ctrl + Shift + Enter 。 一旦你这样做,你的公式会被括在{大括号}中,这是一个视觉指示,表明数组公式输入正确。 如果你尝试手动输入大括号,你的公式会被转换成一个文本字符串,它不会工作。
例2.现代Excel版本中的SUM数组公式
即使在现代版本的Excel中,也不应该低估SUM函数的威力。 SUM数组公式不是简单的思维体操,而是具有实用价值的,下面的例子就证明了这一点。
假设你有两列,B和C,你需要计算当C列的一个值大于或等于10时,C列大于B列的次数。
=SUM((C1:C10>=10) * (C1:C10>B1:B10))
没有看到上述公式的实际应用吗? 用另一种方式思考吧 : )
假设你有如下截图所示的订单列表,你想知道有多少产品在某一特定日期前没有全部交付。 翻译成Excel的语言,我们有如下条件。
条件1:B列(排序项目)中的一个值大于0
条件2:C列(已交付)中的数值小于B列的数值
条件3:D栏(到期日)中的一个日期小于11/1/2014。
把这三个范围/条件对放在一起,你会得到以下公式。
=SUM((B2:B10>=0)*(B2:B10>C2:C10)*(D2:D10
好了,本教程中讨论的公式例子只是触及了Excel SUMIFS和SUMIF函数的真正作用,但希望它们能为你指明正确的方向,现在你可以在Excel工作簿中求和,无论你要考虑多少复杂的条件。