如果受影响的单元格更新,Sumifs将返回0

时间:2017-07-17 01:42:22

标签: excel excel-formula sum

我有预算编制的电子表格,其中涉及根据与其他电子表格相关的日期更新总价值。

我有一个正在运行的公式,但我发现了一个问题,即如果上面的单元格得到更新,则不会添加值。

持有总数的单元格的公式(在Bar!B4中):

=SUMIFS(Foo!A:A,IF(ISBLANK(Foo!D:D),Foo!C:C,Foo!D:D),">="&Bar!A4, IF(ISBLANK(Foo!D:D),Foo!C:C, Foo!D:D),"<"&Bar!A5)

使用:

  • 富A:
    • 货币值
  • 富C:Ç
    • 项目需要支付的日期
  • 富d:d
    • 项目的支付日期(如果适用)
  • 酒吧!A4和A5
    • 日期范围

将此作为表Foo的样本数据(所有值都捏造):

A        B  C           D
Amount      Due         Paid
$200.00     2017-03-01  2017-01-03
$40         2017-03-12  2017-03-03
$300.00     2017-04-01
$40         2017-04-12

这就是Bar的结果:

A          B
Date       Total
2017-02-30 $240
2017-03-15 $0
2017-03-30 $340
2017-04-15 $0

如果我更新单元格Foo!D4它的日期介于Bar!A3和Bar!A4的范围之间,则公式不会在Foo!A5中注册该值。

更新后的表格Foo:

A        B  C           D
Amount      Due         Paid
$200.00     2017-03-01  2017-01-03
$40         2017-03-12  2017-03-03
$300.00     2017-04-01  2017-03-22
$40         2017-04-12

表栏变为:

A          B
Date       Total
2017-02-30 $240
2017-03-15 $300
2017-03-30 $0
2017-04-15 $0

应该是:

A          B
Date       Total
2017-02-30 $240
2017-03-15 $300
2017-03-30 $40
2017-04-15 $0

这是我的公式的问题还是这是一个奇怪的效率错误?

我在Windows 10上使用Excel 2013版本1609

2 个答案:

答案 0 :(得分:0)

我相信SUMIFS根据公式所在的单元格的位置而不是每个位置来计算criteria_range上的IF语句 - 即,如果公式在B4中,那么它会评估ISBLANK(Foo!D4)并使用它确定用于条件范围的列。如果您在Foo!D4 2017-04-02中创建日期,则$ 300显示在B4中。不过,最后的40美元仍然缺失,因为B4使用D列作为criteria_range,因此总结 - 如果基于Foo!D5,它没有值,因此不适合日期范围,而B5正在使用C列(因为对于超过2017-04-15的日期,Foo!D5是空白的,这与Foo!C5不匹配。

我能够使用数组公式使其工作,该公式使用预期的条件范围:

=SUM(IF((IF(ISBLANK(Foo!D:D),Foo!C:C,Foo!D:D)>=Bar!A4)*(IF(ISBLANK(Foo!D:D),Foo!C:C,Foo!D:D)<Bar!A5),Foo!A:A))

由于这是一个数组或CSE公式,您必须通过按Ctrl-Shift-Enter而不是Enter来关闭单元格才能使其工作。这意味着您必须点击F2或单击公式栏,粘贴,然后按Ctrl-Shift-Enter而不是仅粘贴文本(除非您从已经将其作为数组公式的单元格中复制)。您将能够分辨,因为它将在公式栏中显示,并在其周围加上花括号。

{=SUM(IF((IF(ISBLANK(Foo!D:D),Foo!C:C,Foo!D:D)>=Bar!A4)*(IF(ISBLANK(Foo!D:D),Foo!C:C,Foo!D:D)<Bar!A5),Foo!A:A))}

将花括号放在自己身上并不适用。 ;-)

数组公式使用*代表“AND”和+代表“OR”逻辑 - 基本上,如果为TRUE则求值为1,如果为FALSE则求值为0,因此如果需要两者则乘以标准(1 * 0为0,1 * 1为1),如果你只需要其中一个为真,则添加标准(1 + 0为1,1 + 1为2,符合条件)。

中间IF函数确定要与每个条件进行比较的数组。数组公式确定每个位置x的结果,乘以其他标准,并将值作为logical_test的结果返回给第一个IF函数。

第一个IF函数然后根据这些结果创建一个数组:如果条件在位置x处评估为TRUE,那么位置x的A列中的值将被添加到数组中。

SUM然后对第一个IF函数传递给它的数组求和。

答案 1 :(得分:0)

当然,如果你有数百个工作簿并且编写起来有点困难,那么数组公式会降低你的工作簿速度,因此一个更简单的方法可能就是将你的数据转换为Foo!进入表并放入

=IF(ISBLANK([@[Paid]]),[Due],[Paid])
E列中的

(表格应扩展为包含此列)并使用TableName [columnE'sHeaderName]作为条形码上的SUMIF中的范围!。

不想看到这个专栏或担心有人改变它?只需隐藏列。 ;-)

这也允许你在wookbook中的其他地方使用相同的“date”逻辑,而不是每次计算或使用一大堆数组公式。它还允许你使用Foo上的数据!作为数据透视表的来源,您希望在其中使用此计算日期,而不是始终使用截止日期或始终是付费日期。

不知道为什么我没想到这一点,因为我一直都在使用它......