Excel计算过程/ INDIRECT在数组公式中

时间:2016-08-15 14:01:33

标签: excel range excel-indirect

我收到了这个电子表格,我每天都会粘贴数百到数千行的数据。而这个电子表格负载繁重的功能。我想尽可能地减少计算时间,但不太确定excel是如何设计来处理数据的。两个函数之间是否存在差异:

SUM(A2:A50)SUM(A2:A99999)

我如何看待这个:第一个例子的SUM函数一旦到达A50单元就会停止运行,第二个例子它将一直运行直到达到A99999。从这里我可以说首先在电子表格中更有效率。 请指教。

我得到了这个公式,它返回了 #N / A 值,我相信这是因为INDIRECT包含在数组公式中(Ctrl + Shift + Enter)。

整个配方本身:

=SUM(IF((INDIRECT("'" & $K$6 & "'!" & $K$7)>CODES!$K$2)+(MMULT(--('Data paste'!AD2:AF5>CODES!$K$1),{1;1;1})>0)+(MMULT(--('Data paste'!AD2:AF5>CODES!$K$3),{1;1;1})>1)+--('Data paste'!AD2:AD5*'Data paste'!AE2:AE5*'Data paste'!AF2:AF5>CODES!$K$4), 1, 0)*--('Data paste'!Q2:Q5=CODES!C2))

请找spreadsheet uploaded onto the GDrive,以便您更容易理解我的意思。公式位于 CODES E2 单元格。

谢谢。

1 个答案:

答案 0 :(得分:0)

显然,引用较小的范围总是更快或至少同样快。但是,Excel确实有一些optimization

  

许多Excel内置函数(SUM,SUMIF)可以有效地计算整列引用,因为它们可以自动识别列中最后使用的行。但是,像SUMPRODUCT这样的数组计算函数无法处理整列引用或计算列中的所有单元格。

因此对SUM(A2:A99999)来说不应该非常重要。

问题2:是的,您可以在数组公式中使用 INDIRECT()。它目前只返回 NA ,因为您正在尝试添加两个不同长度的数组:

{FALSE; TRUE} + {FALSE; FALSE; FALSE; FALSE} = {0; 1; #NA; #NA}

如何解决问题:

将CODES!K7更改为

 =COUNTA('Data paste'!A:A)

并将CODES!E2更改为

=SUM(IF(('Data paste'!AA2:INDEX('Data paste'!AA:AA,$K$7)>CODES!$K$2)
+(MMULT(--('Data paste'!AD2:INDEX('Data paste'!AF:AF,$K$7)>CODES!$K$1),{1;1;1})>0)
+(MMULT(--('Data paste'!AD2:INDEX('Data paste'!AF:AF,$K$7)>CODES!$K$3),{1;1;1})>1)
+--('Data paste'!AD2:INDEX('Data paste'!AD:AD,$K$7)*'Data paste'!AE2:INDEX('Data paste'!AE:AE,$K$7)*'Data paste'!AF2:INDEX('Data paste'!AF:AF,$K$7)>CODES!$K$4), 1, 0)
*--('Data paste'!Q2:INDEX('Data paste'!Q:Q,$K$7)=CODES!C2))

我已经用 Index()替换了间接()调用,这应该会提高性能。