为什么这个sumproduct函数导致我的excel挂起20-40分钟?

时间:2018-01-20 06:58:43

标签: excel

经过多次重启后,我了解到我的Excel文件因此而挂起。我关闭了自动计算,因为每次在单元格中输入值时,我的excel都会挂起。但是当我按下保存按钮时,它将再次计算并挂起我的Excel。

=SUMPRODUCT(('Payroll - Extra'!$C$2:$C$1048576)*('Payroll - Extra'!$C$1=A3)*('Payroll - Extra'!$A$2:$A$1048576='Payroll Tables and Settings'!$V$3)*('Payroll - Extra'!$B$2:$B$1048576='Payroll Tables and Settings'!$W$3))

我想要总结的字段是每个员工的列,如下图所示: Columns to be summed

输出将用于员工的工资单,如下所示: Output

2 个答案:

答案 0 :(得分:2)

'Payroll - Extra'!$O$2:INDEX('Payroll - Extra'!$O:$O, match(1e99, 'Payroll - Extra'!$O:$O)) 更改为

'Payroll - Extra'!$B$2:$B$1048576

...和'Payroll - Extra'!$B$2:INDEX('Payroll - Extra'!$B:$B, match(1e99, 'Payroll - Extra'!$O:$O)) to,

.navbar-expand

......同样也是类似的。假设' Payroll - Extra'!$ O:$ O是数字。

使用SUMPRODUCT或类似的循环计算函数时,请避免使用完整列引用。

答案 1 :(得分:2)

您的工作簿计算速度很慢,因为您要求它为工作簿包含的每个SUMPRODUCT公式进行300多万次乘法和比较(不知道您有多少个SUMPRODUCT公式)。

假设您确实没有1048576行数据,并且当您在工作表上按Ctrl-End时它只会到达实际数据的末尾,那么您应该使用带有完整列引用的SUMIFS($ A :$ A)而不是SUMPRODUCT,因为SUMIFS只计算使用的范围而不是所有的行。

将数据转换为Excel表并使用结构化引用也会更好。