Excel表格引用 - 是否存在不同方法的速度因子(惩罚或奖励)

时间:2013-02-19 23:23:45

标签: excel excel-formula excel-2010

我正在制作一个巨大的Excel工作表(大约40,000行,数十列),其中每个单元镜像引用另一个工作表中的相同单元格(不要介意奇怪的架构,来自出口这个excel庞然大物的软件的局限性,我必须将此视为理所当然)仅在此工作表中约有150,000个单元格引用。我想知道引用其他表格单元的速度最快的方法是什么:

  • 经典的Excel方法:使用像=value(datasheetname!c2)
  • 之类的东西
  • 使用相对较新的表格单元格引用,例如:=table_name[@c_rowname_or_number]

为了使这个巨大的工作表响应,我已经需要禁用自动计算,因此每次轻微的性能提升对我来说都很棒。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

首先,我不确定你是否正在研究正确的问题 - Excel的简单连接单元格的表现非常高 - 在我的示例工作簿中,我链接了5M单元格,只需0.4英寸就可以运行通常情况下,即使是大型数据集上的一些VLOOKUP公式也会比任意数量的链接单元具有更大的性能影响。请查看this answer以获取有关如何提高速度的说明。

要回答你的问题,我只是在工作簿上运行了一些带有5M单元的计时器。

如果我通过简单的引用(=Sheet1!A2)链接它们,我得到以下结果:
10x Application.CalculcateFullRebuild:47“
10x Application.CalculateFull:3,7“

通过表格通知(=Table1[@Column1]),我得到了这些结果:
10x Application.CalculcateFullRebuild:193“(4.1x)
10x Application.CalculateFull:5,7“(1.54x)

因此,在这两种情况下,表通知都明显变慢。在您的情况下,.CalculateFull可能更适用,因为Excel仅在加载文件或更新时构建计算树 - 否则只执行重新计算。

答案 1 :(得分:1)

我发现动态命名引用(使用OFFSET)如果非常大,会产生重大影响。我会说,如果你的表中有任何这些,并且它们不一定必须在那里(设置列数等),那么你应该将它们改为静态引用。