Arrays 为什么Excel数组公式很慢?

Arrays 为什么Excel数组公式很慢?,arrays,excel,Arrays,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))} 作

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

一般的解释是,他们正在做大量的工作。是的,但是辅助公式肯定也会在不同的单元格中复制相同数量的工作

我想更详细地了解一下:

  • 为什么数组公式很慢
  • 什么情况可能不是这样

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

    公式:

    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
    中的某些内容发生更改,会发生什么情况呢

    在helper列中,只有那些公式需要重新计算,这些公式引用实际更改的单元格。当然,
    D12
    E12
    中的总和必须重新计算。但这正是Excel开发的原因。因此,该程序可能经过优化,以实现这一性能

    数组公式必须完全重新计算,与实际更改的单元格无关。这是10个
    IF
    函数和
    A2:B11
    中每次更改后的
    SUM
    。没有任何优化。数组上下文仅使
    IF
    函数(默认情况下,如果\u条件为真,则该函数需要一个条件和一个值)对条件数组中的每个条件执行多次,并提供一个结果数组,然后通过
    SUM
    求和

    SUMIF
    也必须完全重新计算。但这将通过预编译函数
    SUMIF
    完成,该函数为此进行了优化。该函数并不像数组公式那样简单地调用
    IF
    函数10次

    因此,在性能方面,带有辅助列的解决方案将是最好的,然后是
    SUMIF
    ,而数组公式肯定是性能最低的解决方案


    但是,当然,性能差异只有在有大量影响公式的数据单元或工作表中有大量数组公式的情况下才会明显。因此,如果需要使用数组公式,则不应将整列或整行作为数组,也不应将数千个数组公式放入工作表中。

    因为Excel的源代码不可查看,我想这会比其他任何东西产生更多的意见,但我猜在源代码中使用循环的数组公式总是会有更多的开销。你在谷歌上搜索过这个问题吗?原因有很多,其中之一就是公式的长度。检查配方优化,其中还包括为什么它们可能很慢。也对于SO来说,这是一个相当广泛的问题,通常用于代码审查。这也将是相当主观的…(编辑:和a)@底层源代码中的MacroMan循环通常是有效的。例如,在编写解释型python时,建议使用数组公式来加快计算速度,因为它们使用的是预编译的C循环。@Sam我对C的了解真的不是很好,所以我对此没有什么可谈的,但了解nontheless+1很有意思