我正在尝试将SUMIFS
公式重写为SUMPRODUCT
,以便它可以引用已关闭的工作表。如果日期在两个值之间,则公式会检查具有日期的列,如果是,则对另一列求和。
SUMIFS
公式为
=SUMIFS('WorkbookName'!$D:$D,'WorkbookName'!$A:$A
">=7/1/2015",'WorkbookName'!$A:$A"<=9/30/2015")
只要两个工作簿都处于打开状态,这都有效,但我无法让SUMPRODUCT
生成"-"
以外的任何内容
这就是我的尝试(A17
和A18
是上述两个日期)
=SUMPRODUCT(--('Workbook'!$A:$A>=A17),('Workbook'!$A:$A<=A18) ('Workbook'!$C:$C))
答案 0 :(得分:1)
您的语法似乎不太正确(或者是帖子编辑器损坏了您的公式):
=SUMPRODUCT(--(Workbook!$A1:$A1000>=A17),--(Workbook!$A1:$A1000<=A18),Workbook!$C1:$C1000)
我强烈建议您不要将整个列引用与SUMPRODUCT一起使用。因此我使用1000作为上排参考。
随意修改此值以满足您的要求,但您应该注意不要使其过于任意大,因为,对于每个引用的附加单元格,将需要额外的计算。
这适用于这些额外的细胞是否在技术上超出了这些范围内最后使用的细胞。有一些功能,例如COUNTIF(S)/ SUMIF(S),您可以在不损害性能的情况下引用整个列,但不能使用在数组上运行的函数,例如AGGREGATE,SUMPRODUCT和任何需要CSE的构造。
更好的是,使范围动态化,以便在数据扩展/收缩时自动调整,从而提供最佳的计算效率。如果你愿意,我可以告诉你如何做到这一点。
此致
答案 1 :(得分:0)
尝试,
=SUMPRODUCT(--('Workbook'!$A:$A>=A17), --('Workbook'!$A:$A<=A18), ('Workbook'!$C:$C))
在两个工作簿打开的情况下创建公式。之后,您可以关闭外部工作簿,引用应调整为完整路径和工作簿名称。
我不完全清楚为什么要从效率更高的SUMIFS function切换到旧的SUMPRODUCT function,除非您尝试为大约xl2003版本提供兼容性。
答案 2 :(得分:0)
如果上面的代码是正确的,则有两个错误。正确的语法是
=SUMPRODUCT(--('Workbook'!$A:$A>=A17), --('Workbook'!$A:$A<=A18), ('Workbook'!$C:$C))
第二部分需要 - 以及第二部分的逗号丢失。我在这里尝试过,这些改变没有任何问题。