我有预算编制的电子表格,其中涉及根据与其他电子表格相关的日期更新总价值。
我有一个正在运行的公式,但我发现了一个问题,即如果上面的单元格得到更新,则不会添加值。
持有总数的单元格的公式(在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)
使用:
将此作为表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
答案 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上的数据!作为数据透视表的来源,您希望在其中使用此计算日期,而不是始终使用截止日期或始终是付费日期。
不知道为什么我没想到这一点,因为我一直都在使用它......