我正在制作一个巨大的Excel工作表(大约40,000行,数十列),其中每个单元镜像引用另一个工作表中的相同单元格(不要介意奇怪的架构,来自出口这个excel庞然大物的软件的局限性,我必须将此视为理所当然)仅在此工作表中约有150,000个单元格引用。我想知道引用其他表格单元的速度最快的方法是什么:
=value(datasheetname!c2)
=table_name[@c_rowname_or_number]
为了使这个巨大的工作表响应,我已经需要禁用自动计算,因此每次轻微的性能提升对我来说都很棒。
感谢您的帮助!
答案 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)如果非常大,会产生重大影响。我会说,如果你的表中有任何这些,并且它们不一定必须在那里(设置列数等),那么你应该将它们改为静态引用。