arrays - 为什么 Excel 数组公式很慢?

标签 arrays excel

我在网络上的许多地方读到,使用数组公式的缺点之一是它们很慢(并且使用中间辅助列可以加快速度)。

给出的一般解释是他们正在执行大量工作。确实如此,但辅助公式肯定也必须在不同的单元格中复制相同数量的工作。

我想更详细地了解一下:

  1. 为什么数组公式很慢?
  2. 什么情况下可能不是这样?

最佳答案

让我们举一个具体的例子:

enter image description here

公式:

D2:E11中:

=IF($A2=D$1,$B2)

D12E12中:

=SUM(D2:D11)

D13E13中:

{=SUM(IF($A$2:$A$11=D$1,$B$2:$B$11))}

作为数组公式,使用[Ctrl]+[Shift]+[Enter]确认

D14E14中:

=SUMIF($A$2:$A$11,D$1,$B$2:$B$11)

那么如果 A2:B11 发生变化会发生什么?

在辅助列中,只有那些引用实际已更改的单元格的公式需要重新计算。当然,D12E12 中的总和必须重新计算。但这正是开发 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/

相关文章:

java - double / double 的数组混淆

javascript - 在 angularjs/javascript 中操作数据

vba - 自动化错误 - 灾难性故障 EXCEL VBA

excel - 如果日期介于两个日期之间,则查找一个值

vba - 以编程方式添加工作簿事件并保存

excel - 有没有办法让Excel中的复制行为像剪切一样?

excel - 如何为映射到不同驱动器的两个人编写文件路径

php - 获取 PHP 数组中的最后一个数字索引

arrays - 访问矩阵中的值(Haskell 新手)

javascript - 用平均值填充数组