首页 > 解决方案 > 优化 Excel 宏 - 速度

问题描述

有两个名为 Data 和 Calc 的工作表。

数据选项卡有应用程序 200,000 行和 14 列。以后每个月我都会添加大约 1500 行数据。

Calc 选项卡从数据选项卡中获取相关数据。

单元格 K3:HB3 是从 1 到 200 的数字。

下面是用于计算 1500 行和 200 列数据的公式,目前我大约需要 15 分钟来进行计算。

请你帮我更快地处理下面的宏。

Sub Calc()

Application.ScreenUpdating = False
Application.Calculation = xlManual
Application.CutCopyMode = False
Dim S As Workbook
Dim j, 1stcolm as Integer
Dim S1, D1 As Worksheet

Set S1 = ThisWorkbook.Worksheets(“Data”)
Set D1 = ThisWorkbook.Worksheets(“Calc”)
Dim myFormula As String
myFormula = “=SUMIFS(Data!C2,DATE(YEAR(‘Calc’!R[0]C5),MONTH(‘Calc’R[0]C5)+’Calc’!R3C[0]-1,1),Data!C7,’Calc’!R[0]C2)”

D1.Activate

For j = 4 To D1.Range(“B” & Rows.Count). End (3) (1). Row

        Range(“K” & j, “HB” & j) = myFormula
        Next j

Application.Screenupdating= True
Application.Calculation = xlAutomatic
Application.CutCopyMode = False

End Sub

标签: excelvbaexcel-formula

解决方案


停用自动计算并在代码末尾重新激活它。此外,最好不要在代码中使用公式,更喜欢使用循环。

Sub OptimizeTimeCode() 

    'Remove the update of Excel screen
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'Remove pop-up
    Application.DisplayAlerts = False
    Application.AskToUpdateLinks = False
    'Remove the automatic calculation
    Application.Calculation = xlCalculationManual
 
    '... your code
 
   'To be re-activated at the end of the process
   Application.ScreenUpdating = True
   Application.EnableEvents = True
   Application.DisplayAlerts = True
   Application.AskToUpdateLinks = True
   Application.Calculation = xlCalculationAutomatic

End Sub

推荐阅读