我是VBA开发人员,我的财务同事使用非常大的文件,并使用它们上的功能。我已经给了他们一个解决方案,只保留第1行的功能,并在需要时将其拖下来。
有没有人有VBA解决方案来获取第2行的功能,并在VBA中计算它更快,然后只是转储结果值?
错误在这里注意,我不知道它们在第2行上放了什么函数,所以我必须找到一种方法来获取VBA中的函数并在重新计算时保留相对引用。
亲切的问候, 丹尼尔
答案 0 :(得分:2)
你的问题是:有没有人有VBA解决方案来获取第2行的功能,并在VBA 中计算它更快,然后只是转储结果值? [强调补充]
首先,VBA并不快。当您在VBA中评估公式时,它只是将公式发送到Excel引擎,对其进行评估,然后将答案返回给VBA。
其次,如果Excel运行缓慢,通常是因为人们无意中将其编程为慢速运行,原因是配方选择不当和布局欠佳。常见的罪魁祸首包括:
具有长计算链的易失性函数。看到 我的帖子 https://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/ 有关此内容的更多信息
多列上的低效查找(例如使用多个列 VLOOKUPS为同一记录带来数据而不是使用 一个MATCH和多个INDEX函数)
查找非常非常长的数组。看我的帖子 http://dailydoseofexcel.com/archives/2015/04/23/how-much-faster-is-the-double-vlookup-trick/ 了解如何对查找表进行排序并使用二进制匹配 参数可以加速查找数千倍。
过度使用资源密集型公式,例如SUMPRODUCT,何时 存在更简单的替代方案(包括SUMIF及其变体,或 更好的,数据透视表)
使用IF和其他功能更改数千个格式 单元格,而不是使用自定义数字格式
使用数据表(不要与Excel表格混淆)。 (这些可以真正占用资源,有时存在更好的替代方案)
使用数千个额外的公式来引用数据输入单元格 可能不会使用,而不是使用Excel表(又名 ListObjects)自动动态扩展。我总是用 用于托管我的数据和设置的表。它们从根本上简化了 引用(包括来自VBA)和文件可维护性。
您需要解决根本原因,而不是症状。一个好的起点是重新计算大师查尔斯威廉姆斯的这篇文章:
最后,根据您拥有的Excel版本和SKU,您可以使用PowerPivot和PowerQuery从根本上简化操作,并大幅减少工作簿中的公式数量。
答案 1 :(得分:1)
也许是这样的:
Sub formulaSetup()
Dim rng As Range
Set rng = Range("B3:B9999")
With rng
.Formula = Range("B2").Formula
.Value = .Value
End With
End Sub
如果您希望稍后修改并重新复制,则会在 B2 中留下一个公式样本。
(选择适合您情况的列和行限制)
答案 2 :(得分:1)
只是为了显示@ Gary的学生的另一种选择,虽然不如他的方法快:+)
ThisWorkbook.Worksheets("MySheet").Range("B2:B9999").FillDown