VBA公式因大型数据集而变慢

时间:2014-05-27 18:26:41

标签: excel vba excel-vba sumifs

我有以下代码并导致Excel每次都崩溃。 Sheet上的A列有大约280,000行数据。有关如何更有效地编写此代码的任何想法?理想情况下,我希望有值而不是公式。

sub test()
    Dim Total_Rows As Long
    Sheets("Sheet1").Activate
    Total_Rows = 13000
    Range("C2", "C" & Total_Rows) = "=SUMIFS('Sheet2'!C:C,'Sheet2'!A:A,'Sheet2!A2)"
End Sub

2 个答案:

答案 0 :(得分:2)

您始终可以限制SUMIFS必须考虑的单元格数量,例如使用范围A1:A400000代替A:A

但我认为你应该重新考虑是否确实有必要创造13,000个sumifs公式。

答案 1 :(得分:1)

显而易见的改进是在宏填充公式时关闭屏幕更新和计算,然后在最后重新开启。可能还有其他方法可以改善这一点,但我会从这些悬而未决的成果开始。

sub test()

    Dim Total_Rows As Long
    Sheets("Sheet1").Activate
    '## Disable screenupdating and calculation
    Application.ScreenUpdating = False
    Application.Calculation = -4135 xlCalculationManual

    Total_Rows = 13000
    Range("C2", "C" & Total_Rows) = "=SUMIFS('Sheet2'!C:C,'Sheet2'!A:A,'Sheet2!A2)"

    '## Put the calculation back to Automatic
    Application.Calculation = -4105 'xlCalculationAutomatic
    ActiveSheet.Calculate  'Force a calculation

    '## Replace the formulas with values only:
    Range("C2", "C" & Total_Rows).Value = Range("C2", "C" & Total_Rows).Value

    '## Allow the screen to update
    Application.ScreenUpdating = True

End Sub