vba - 加速 Excel 宏?

标签 vba excel

现在我有一个宏 PopulateYearlyValues 但在我看来它花费的时间太长了

Sub PopulateYearlyValues(ByVal Month As Range)
    Dim c As Double
    Dim s As Double
    c = Application.WorksheetFunction.Match(UCase(Month.Value), ActiveSheet.Range("AA5:AX5"), 0)
    s = (ActiveSheet.Range("AA5").Column - 1)
    With ActiveSheet
        Dim i As Integer
        Dim j As Integer
        For i = 7 To 44
            .Range("G" & i).Value = 0
            .Range("H" & i).Value = 0
            For j = 1 To c
                .Range("G" & i).Value = (.Range("G" & i).Value + .Cells(i, s).Offset(0, j))
                .Range("H" & i).Value = (.Range("H" & i).Value + .Cells(i, s).Offset(0, (j + 1)))
                j = j + 1
            Next j
        Next i
    End With
End Sub

我有一个范围 G7:H44 需要填充范围 AA7:AX44SUM 但是..它只是每个其他专栏:

If Month.Value = "January"
    G7  = SUM(AA7)
    H7  = SUM(AB7)
    ...
    G44 = SUM(AA44)
    H44 = SUM(AB44)
End If

If Month.Value = "April"
    G7  = SUM(AA7, AC7, AE7, AG7)
    H7  = SUM(AB7, AD7, AF7, AH7)
    ...
    G44 = SUM(AA44, AC44, AE44, AG44)
    H44 = SUM(AB44, AD44, AF44, AH44)
End If

但是我的宏占用的时间太长了..还有其他方法吗?

最佳答案

您可以尝试将计算设置为手动并禁用 ScreenUpdating 等常用的 vba 优化方法。

Dim calc As XlCalculation
calc = Application.Calculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Application.ScreenUpdating = True
Application.Calculation = calc

将您的代码或函数调用放在 Application.Calculation = xlCalculationManualApplication.ScreenUpdating = True 之间

This is from my previous Post

关于vba - 加速 Excel 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3061424/

相关文章:

vba - 在 for 循环中键入不匹配,包括对工作表单元格值的测试

vba - 按颜色突出显示相交

excel - 将 Excel 工作簿保存到常量路径,文件名来自两个字段

python - Python 中两个嵌套字符串列表之间的减法

c# - 使用 Excel Interop 时,忽略 Excel 中设置的日期格式

vba - 字体颜色更改为白色而不是灰色

excel - 如何使用 POI 在 Excel 中设置公式?

vba - 具有多个条件的Select Case函数不循环

excel - Excel 2016 中的 Workbook_Open() 未触发

vb.net - 使用字符串值创建 Excel