为什么Excel数组公式很慢?
我在网上的很多地方都读过,使用数组公式会带来的一个缺点是它们很慢(并且使用中间帮助列可以加快速度)。
给出的一般性解释是他们正在做很多工作。 他们是,但是辅助者公式当然也必须重现在不同单元格上分布的相同数量的工作。
我想更详细地了解一下:
- 为什么数组公式很慢?
- 什么情况可能不是这样?
举个具体的例子:
公式:
在D2:E11
:
=IF($A2=D$1,$B2)
在D12
和E12
:
=SUM(D2:D11)
在D13
和E13
:
{=SUM(IF($A$2:$A$11=D$1,$B$2:$B$11))}
作为用[Ctrl] + [Shift] + [Enter]确认的数组公式确认
在D14
和E14
:
=SUMIF($A$2:$A$11,D$1,$B$2:$B$11)
那么,如果在A2:B11
发生了什么变化呢?
在助手列中,只有那些公式需要重新计算哪个实际上已经改变的单元格。 当然,必须重新计算D12
和E12
的总和。 但这正是Excel开发的地方。 所以程序可能被优化来完成这个非常高性能。
数组公式必须完全重新计算,与哪个单元格实际上已经改变无关。 这是10个IF
函数和A2:B11
每个更改之后的SUM
。 没有什么优化。 数组上下文只会导致IF
函数,默认情况下期望一个条件和一个value_if_the_criteria_is_true对条件数组中的每个条件执行多次并提供一个结果数组,然后通过SUM
进行求和。
SUMIF
也必须完全重新计算。 但是,这将通过已经过优化的预编译函数SUMIF
来完成。 该函数不会像数组公式那样简单地调用IF
函数10次。
因此,如果涉及到性能,那么带有帮助列的解决scheme将是最好的,然后来SUMIF
和数组公式是肯定是性能最低的解决scheme。
但是当然,性能差异只会在影响公式的数据单元太多或者表单中有太多的数组公式的时候才会出现。 因此,如果需要使用数组公式,那么不应该将整列或行作为数组,并且不应将数千个数组公式放在表中。