Excel VBA:在包含大量公式的工作簿中加载数据的有效方法

Excel VBA:在包含大量公式的工作簿中加载数据的有效方法,vba,excel,Vba,Excel,我有一个Excel VBA代码,可以读取主数据,将每个案例/循环的数据加载到工作簿中,然后通过许多公式进行大量计算(没有VBA代码)。期望的结果是计算的输出。代码循环遍历主数据中的所有案例 这就是问题所在。我在每个循环中使用了多个“复制和粘贴”操作来将数据加载到工作簿中,但运行时间比我预期的要长,导致Excel“没有响应”。请注意,我已经在Excel中关闭了自动计算,并在VBA代码中添加了工作簿计算触发器,以避免每次发生粘贴操作时都完全更新工作簿 是否有人建议直接设置wb中的单元格=主数据中的单

我有一个Excel VBA代码,可以读取主数据,将每个案例/循环的数据加载到工作簿中,然后通过许多公式进行大量计算(没有VBA代码)。期望的结果是计算的输出。代码循环遍历主数据中的所有案例

这就是问题所在。我在每个循环中使用了多个“复制和粘贴”操作来将数据加载到工作簿中,但运行时间比我预期的要长,导致Excel“没有响应”。请注意,我已经在Excel中关闭了自动计算,并在VBA代码中添加了工作簿计算触发器,以避免每次发生粘贴操作时都完全更新工作簿

是否有人建议直接设置wb中的单元格=主数据中的单元格将加速或减慢代码?或者有人能提出一种更有效的加载数据的方法吗


在您发送回复之前,我感谢您的努力。

如评论中所述,不要使用
。选择
可以提高宏的速度。此外,使用VBA复制粘贴操作的速度确实较慢,您应该从worksheet.Range(“CopyRange”).Value=ToWorksheet.Range(“PasteRange”).Value执行赋值
。此外,在开头添加这些行总是有帮助的:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Application.DisplayAlerts = False
并在最后重新激活它们:

Application.DisplayAlerts = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

这方面有很多信息,比如说直接赋值比使用剪贴板更快。在内存中工作(例如数组)和批量加载数据总是比循环更快。也不要使用
。在代码中选择
,可能在运行屏幕更新或计算后关闭它们。您还应该关闭Application.Events,以防它们中的一些连接到VBA代码。然后,您应该使用尽可能大的矩形范围,即
DestinationWorksheet.Range(“SomeNamedRange”)。Value=SourceWorksheet.Range(“SourceRangeOfSameSize”)。Value