我正在尝试从另一个文件中查找 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 函数嵌套在一起,因此公式太重而无法在多个单元格(大约 15 万个单元格)上运行?如果是这样,任何人都可以提出更好的公式吗?

最佳答案

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/

10-12 05:46