【问题标题】:Why are Excel Array formulas slow?为什么 Excel 数组公式很慢?
【发布时间】:2016-05-10 20:50:04
【问题描述】:

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

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

我想更详细地了解一下:

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

【问题讨论】:

  • 由于 Excel 的源代码不可见,我想这会比其他任何东西产生更多的意见 - 但我猜想在源代码中使用循环的数组公式总是会开销更大。
  • 你用谷歌搜索过这个问题吗?有很多原因,其中之一是公式有多长。 This page 讨论了公式优化,其中还包括了它们可能会变慢的原因。 Here's another good page 也是如此。对于 SO,这是一个非常广泛的问题,通常用于代码审查。这也将是相当主观的......(编辑:和third page
  • @MacroMan 底层源代码中的循环通常是高效的。例如,编写解释型 Python,建议使用数组公式来加快计算速度,因为它们使用的是预编译的 C 循环。
  • @Sam 我对 C 的了解真的不是那么好,所以我没有什么可以回过头来的,但是很高兴知道 +1

标签: arrays excel


【解决方案1】:

让我们举个具体的例子:

公式:

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 的原因。因此,该程序可能已经过优化,可以做到这一点。

必须完全重新计算数组公式,而与实际更改的单元格无关。那是 10 个IF 函数和A2:B11 每次更改后的SUM。而且没有任何优化。数组上下文仅导致 IF函数(默认情况下需要一个条件和一个 value_if_the_criteria_is_true)对条件数组中的每个条件执行多次并提供一个结果数组,然后将其与 SUM 相加。

SUMIF 也必须完全重新计算。但这将使用经过优化的预编译函数SUMIF 来完成。该函数不像数组公式那样简单地调用 IF 函数 10 次。

所以在性能方面,带辅助列的解决方案会是最好的,然后是SUMIF,而数组公式肯定是性能最低的解决方案。

当然,只有当有很多数据单元格影响公式或者工作表中有很多数组公式时,性能差异才会明显。因此,如果需要使用数组公式,则不应将整列或整行作为数组,也不应将数千个数组公式放入工作表中。

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2010-10-30
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多