Excel表引用 – 有不同的方法速度因素(罚款或奖金)

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

  • 经典的excel方法:使用somehting: =value(datasheetname!c2)
  • 使用相对较新的表单元格引用,如: =table_name[@c_rowname_or_number]

为了使这个巨大的工作表响应,我已经需要禁用自动计算,所以每一个小小的性能改进对我来说都是很好的。

谢谢您的帮助!

首先,我不确定你是否正在寻找正确的问题–Excel的单元格链接性能相当高 – 在我的示例工作簿中,我链接了5M单元格,只需要0.4“就可以运行计算。 ,即使是大型数据集上的一些VLOOKUP公式也会比任何数量的链接单元有更大的性能影响。请查看此答案 ,以获取有关如何提高速度的解释。

为了回答你的问题,我只用5M单元在工作簿上运行了一些定时器。

如果我通过一个简单的参考( =Sheet1!A2 )链接他们,我得到了以下结果:
10倍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仅在加载文件或更新时才构build计算树 – 否则只会执行重新计算。

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