我正在尝试从另一个文件中查找 5 个不同的条件。我使用的公式如下:
=IF(SUMPRODUCT(('[WorkBook]Sheet'!$A:$A=$A9),
('[WorkBook]Sheet'!$H:$H=$P9),
('[WorkBook]Sheet'!$D:$D=S$5),
(('[WorkBook]Sheet'!$E:$E="String1")+('[WorkBook]Sheet'!$E:$E="String2")) )>=1,TRUE,FALSE)
我可以在前几个单元格中得到结果。然而,当我将公式复制粘贴(或拖动)到表格底部时,使用 4 个处理器进行计算需要很长时间。最终,Excel 崩溃了。
是否可能使用了太多标准,并且它们在2个文件之间交叉引用,最重要的是,我用IF函数嵌套了它,因此公式太重而无法在多个单元格上运行(大约150k细胞)?如果是这样,谁能建议一个更好的公式?
最佳答案
那个 SUMProduct 除了 bool 值之外什么都没有,使其成为 COUNTIFS。 OR 条件使用 SUM(COUNTIFS(...)) 和硬编码字符串数组进行处理。
=AND(SUM(COUNTIFS('[WorkBook]Sheet'!$A:$A, $A9,
'[WorkBook]Sheet'!$H:$H, $P9,
'[WorkBook]Sheet'!$D:$D, S$5,
'[WorkBook]Sheet'!$E:$E, {"String1", "String2"})))
COUNTIFS 可以使用全列引用,而不会造成计算延迟损失,而 SUMPRODUCT 会受到很大的损失。
换行 AND 只是将数字转换为 TRUE/FALSE。
这是您的原始 SUMPRODUCT,其中所有范围都缩小到 H 列中包含最后日期的行。
=IF(SUMPRODUCT(('[WorkBook]Sheet'!$a$2:index('[WorkBook]Sheet'!$a:$a, match(1e99, '[WorkBook]Sheet'!$h:$h))=$A9),
('[WorkBook]Sheet'!$h$2:index('[WorkBook]Sheet'!$h:$h, match(1e99, '[WorkBook]Sheet'!$h:$h))=$P9),
('[WorkBook]Sheet'!$d$2:index('[WorkBook]Sheet'!$d:$d, match(1e99, '[WorkBook]Sheet'!$h:$h))=S$5),
(('[WorkBook]Sheet'!$e$2:index('[WorkBook]Sheet'!$e:$e, match(1e99, '[WorkBook]Sheet'!$h:$h))="String1")+
('[WorkBook]Sheet'!$e$2:index('[WorkBook]Sheet'!$e:$e, match(1e99, '[WorkBook]Sheet'!$h:$h))="String2")))>=1, true, false)
是的,这可能看起来很复杂,但实际上它比全列引用模型所做的工作要少得多。
关于excel - 具有来自另一个工作簿的 5 个条件的 Sumproduct 运行时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48927962/