我正在尝试从另一个文件中查找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细胞)?如果是这样,有人可以提出更好的公式吗?
答案 0 :(得分:4)
那个SUMPRODUCT只有布尔才能成为一个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)
是的,这可能看起来很复杂,但实际上它比完整列参考模型的工作少得多。
答案 1 :(得分:0)
跨文件引用是我避免的瘟疫。有没有具体的理由说明为什么你不能在数据存在的同一工作簿中使用数据透视表,只需过滤数据透视表以显示你需要显示的内容?
简单得多。更安全。快得多。要查看此详细说明和其他替代方案,请在Optimizing Excel formulas - SUMPRODUCT vs SUMIFS/COUNTIFS
查看我的答案