我在网络上的许多地方读到,使用数组公式的缺点之一是它们很慢(并且使用中间辅助列可以加快速度)。
给出的一般解释是他们正在执行大量工作。确实如此,但辅助公式肯定也必须在不同的单元格中复制相同数量的工作。
我想更详细地了解一下:
- 为什么数组公式很慢?
- 什么情况下可能不是这样?
最佳答案
让我们举一个具体的例子:
公式:
在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 的原因。因此,该程序可能经过优化以达到如此高的性能。
数组公式必须完全重新计算,与实际更改的单元格无关。这是 A2:B11
中每次更改后的 10 个 IF
函数和 SUM
。而且没有任何优化。数组上下文仅导致 IF
函数(默认情况下需要一个条件和一个 value_if_the_criteria_is_true)对条件数组中的每个条件执行多次,并提供一个结果数组,然后通过 求和
。
SUMIF
也必须完全重新计算。但这将通过预编译函数 SUMIF
来完成,该函数为此进行了优化。该函数不像数组公式那样简单地调用 IF
函数 10 次。
因此,如果就性能而言,带有辅助列的解决方案将是最好的,然后是 SUMIF
,而数组公式肯定是性能最低的解决方案。
但是,当然,只有当存在大量影响公式的数据单元格或工作表中存在大量数组公式时,性能差异才会明显。因此,如果需要使用数组公式,那么不应将整列或整行作为数组,也不应在工作表中放置数千个数组公式。
关于arrays - 为什么 Excel 数组公式很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37148716/