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