我收到了这个电子表格,我每天都会粘贴数百到数千行的数据。而这个电子表格负载繁重的功能。我想尽可能地减少计算时间,但不太确定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 单元格。
谢谢。
答案 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()替换了间接()调用,这应该会提高性能。