8

我想创建一个简洁的 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 等于以下之一(Oct-13、Nov-13 或 Dec-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 公式有效这一事实表明数据正常并且这是一个语法问题。任何人都可以引导我朝着正确的方向前进吗?

4

7 回答 7

19

你可以SUMIFS这样使用

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

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

请注意这种语法,公式中最多只能有两个带有“OR”条件的条件......如果有两个条件,那么您必须用逗号分隔条件,另一个用分号分隔。

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

=SUMPRODUCT(Quote_Value,(Salesman="JBloggs")*(Days_To_Close<=90)*ISNUMBER(MATCH(Quote_Month,{"Oct-13","Nov-13","Dec-13"},0)))

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

于 2013-11-27T10:39:24.573 回答
2

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

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

于 2013-11-27T12:01:16.400 回答
1

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

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

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

截屏

在此处输入图像描述

于 2013-11-27T10:04:34.170 回答
1

您可能会考虑在源列中引用实际日期/时间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”条件实际上指定了一个日期范围——它在其他情况下可能不起作用。

于 2013-11-27T10:06:16.257 回答
1

速度

SUMPRODUCTSUM数组快,即函数中有{}数组。比 快 30% 。SUMSUMIFSSUMPRODUCT

{SUM(SUMIFS({}))}vsSUMPRODUCT(SUMIFS({}))两者都可以正常工作,但是SUMPRODUCT如果没有CTRL-SHIFT-ENTER创建{}.

偏爱

SUMPRODUCT(--(ISNUMBER(MATCH(...))))我个人更喜欢SUMPRODUCT(SUMIFS({}))为多个标准重写。

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

于 2015-10-07T21:48:23.673 回答
0

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

于 2014-05-28T21:12:27.230 回答
0

使用以下,很容易链接单元地址...

=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))

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

于 2015-11-18T06:46:53.880 回答