填写表格公式更快

时间:2018-02-22 11:51:58

标签: excel vba excel-vba function excel-formula

我是VBA开发人员,我的财务同事使用非常大的文件,并使用它们上的功能。我已经给了他们一个解决方案,只保留第1行的功能,并在需要时将其拖下来。

有没有人有VBA解决方案来获取第2行的功能,并在VBA中计算它更快,然后只是转储结果值?

错误在这里注意,我不知道它们在第2行上放了什么函数,所以我必须找到一种方法来获取VBA中的函数并在重新计算时保留相对引用。

亲切的问候, 丹尼尔

3 个答案:

答案 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)和文件可维护性。

您需要解决根本原因,而不是症状。一个好的起点是重新计算大师查尔斯威廉姆斯的这篇文章:

https://msdn.microsoft.com/en-us/vba/excel-vba/articles/excel-tips-for-optimizing-performance-obstructions

最后,根据您拥有的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