将 SUMIFS 与多个 AND OR 条件一起使用

Posted

技术标签:

【中文标题】将 SUMIFS 与多个 AND OR 条件一起使用【英文标题】:Using SUMIFS with multiple AND OR conditions 【发布时间】:2013-12-12 21:06:09 【问题描述】:

我想创建一个简洁的 Excel 公式,根据一组 AND 条件加上一组 OR 条件对列求和。

我的 Excel 表包含以下数据,并且我为列使用了定义的名称。

Quote_Value (Worksheet!$A:$A) 包含一个会计价值。 Days_To_Close (Worksheet!$B:$B) 包含一个生成数字的公式。 Salesman (Worksheet!$C:$C) 包含文本并且是一个名称。 Quote_Month (Worksheet!$D:$D) 包含一个公式 (=TEXT(Worksheet!$E:$E,"mmm-yy")) 将日期/时间数字从另一列转换为基于文本的月份参考。

如果 Salesman 等于 JBloggs 且 Days_To_Close 等于或小于 90 且 Quote_Month 等于以下之一(10 月 13 日、11 月 13 日或 12 月 13 日),我想对 Quote_Value 求和。

目前,我已经完成了这项工作,但其中包含大量重复,我认为我不需要。

=SUM(SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,"=Oct-13")+SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,"=Nov-13")+SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,"=Dec-13"))

我想做的更像是以下内容,但我无法找出正确的语法:

=SUMIFS(Quote_Value,Salesman,"=JBloggs",Days_To_Close,"<=90",Quote_Month,OR(Quote_Month="Oct-13",Quote_Month="Nov-13",Quote_Month="Dec-13"))

该公式没有错误,它只是返回一个 0 值。然而,如果我手动检查数据,那是不正确的。我什至尝试使用 TRIM(Quote_Month) 来确保空格没有潜入数据中,但我的扩展 SUM 公式有效这一事实表明数据正常并且这是一个语法问题。任何人都可以引导我朝着正确的方向前进吗?

【问题讨论】:

【参考方案1】:

有了下面,就很容易链接Cell地址了……

=SUM(SUMIFS(FAGLL03!$I$4:$I$1048576,FAGLL03!$A$4:$A$1048576,">="&INDIRECT("A"&ROW()),FAGLL03!$A$4:$A$1048576,"<="&INDIRECT("B"&ROW()),FAGLL03!$Q$4:$Q$1048576,E$2))

可以根据需要使用地址/替换/列函数以在全动态中使用单元格地址。

【讨论】:

【参考方案2】:

速度

SUMPRODUCTSUM 数组快,即在 SUM 函数中有 数组。 SUMIFSSUMPRODUCT 快 30%。

SUM(SUMIFS())SUMPRODUCT(SUMIFS()) 都可以正常工作,但如果没有 CTRL-SHIFT-ENTER 来创建 SUMPRODUCT 会更容易编写。

偏好

我个人更喜欢写SUMPRODUCT(--(ISNUMBER(MATCH(...)))) 而不是SUMPRODUCT(SUMIFS()) 来满足多个条件。

但是,如果您有一个要选择特定特征或全部特征的下拉菜单,SUMPRODUCT(SUMIFS()) 是唯一的选择。 (对于选择“全部”,该值应输入“”+“您想要的任何单词,只要它不是特定特征的一部分”。

【讨论】:

【参考方案3】:

为了让公式起作用,将光标放在公式中,然后按 ctr+shift+enter 就可以了!

【讨论】:

【参考方案4】:

您可以使用 DSUM,这将更加灵活。就像如果您想更改销售员的名称或报价月份一样,您无需更改公式,而只需更改一些标准单元格。有关详细信息,请参阅下面的链接...甚至标准也可以是从其他工作表复制的公式

http://office.microsoft.com/en-us/excel-help/dsum-function-HP010342460.aspx?CTT=1

【讨论】:

【参考方案5】:

你可以像这样使用SUMIFS

=SUM(SUMIFS(Quote_Value,Salesman,"JBloggs",Days_To_Close,"&lt;=90",Quote_Month,"Oct-13","Nov-13","Dec-13"))

SUMIFS 函数将返回一个包含 3 个值的“数组”(“Oct-13”、“Nov-13”和“Dec-13”各一个),因此您需要 SUM 来求和数组并给你最终的结果。

请注意此语法,公式中最多只能有 两个 条件和“OR”条件...如果有两个则合二为一,您必须用 逗号,另一个用分号

如果您需要更多,可以使用 SUMPRODUCTMATCH,例如在你的情况下

=SUMPRODUCT(Quote_Value,(Salesman="JBloggs")*(Days_To_Close&lt;=90)*ISNUMBER(MATCH(Quote_Month,"Oct-13","Nov-13","Dec-13",0)))

在该版本中,您可以使用 ISNUMBER/MATCH 添加任意数量的“OR”条件

【讨论】:

谢谢,这两种方法都适合我。但是,有没有办法通过使用对存储在另一个单元格中的文本的引用来指定数组 "Oct-13","Nov-13","Dec-13" 中的月份值,例如 Worksheet!G2,Worksheet !H2,Worksheet!I2? 没关系,我想通了。我将 ISNUMBER(MATCH(Quote_Month,"Oct-13","Nov-13","Dec-13" 替换为 ISNUMBER(MATCH(Quote_Month,G2:I2 其中 G2、H2 和 I2 是包含文本 Oct -13, Nov-13, Dec-13 没错,您可以在 SUMPRODUCT 和 SUMIFS 版本中使用范围。如果您在 SUMIFS 版本中执行此操作,则公式需要 CTRL+SHIFT+ENTER,除非您使用 SUMPRODUCT 代替 SUM 刚刚偶然发现这篇文章。惊人的技术!有谁知道为什么/如何工作?就像,我知道 MATCH(Quote_Month,"Oct-13","Nov-13","Dec-13",0) 用于生成向量。为什么这甚至对我来说是一个谜。当我搞砸这个时,对我来说最明显的第一步是计算命中数,即对向量求和。它不起作用。 fx 向导清楚地显示了矢量,我可以看到命中。 SUM 不会求和。但是 SUMPRODUCT 会 - 为什么?回到 SUMIFS,我可以看到 符号将起作用,但没有任何范围参考(例如 G2:I2) - 为什么? Excel 很奇怪。 PS:我在 Excel 2010 上,,, 根本不适合我。我必须使用 ;; 才能使这些工作。【参考方案6】:

Quote_Month (Worksheet!$D:$D) 包含一个公式 (=TEXT(Worksheet!$E:$E,"mmm-yy")) 将日期/时间数字从另一列转换为基于文本的月份参考。

您可以通过在Sumproduct 中添加+ 来使用OR。看到这个

=SUMPRODUCT((Quote_Value)*(Salesman="JBloggs")*(Days_To_Close&lt;=90)*((Quote_Month="Cond1")+(Quote_Month="Cond2")+(Quote_Month="Cond3")))

屏幕截图

【讨论】:

我不明白出了什么问题,但是当我输入这个公式时,我得到一个#VALUE!错误提示公式值之一的数据类型错误。 不确定 :) 直到我看到你的数据。如果你注意到了,它对我有用。【参考方案7】:

您可以考虑在Quote_Month 的源列中引用实际的日期/时间,然后您可以将您的OR 转换为几个ANDs,类似于(假设日期在我选择的内容中拨打Quote_Date)

=SUMIFS(Quote_Value,"<=90",Quote_Date,">="&DATE(2013,11,1),Quote_Date,"<="&DATE(2013,12,31),Salesman,"=JBloggs",Days_To_Close)

(我把有趣的条件移到了前面)。

这种方法在这里有效,因为“OR”条件实际上是在指定一个日期范围——它在其他情况下可能不起作用。

【讨论】:

以上是关于将 SUMIFS 与多个 AND OR 条件一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别