0

我有以下代码,每次都会导致 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
4

2 回答 2

2

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

但我认为您应该重新考虑创建 13,000 个 sumifs 公式是否确实有必要和有意义。

于 2014-05-27T20:52:33.750 回答
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
于 2014-05-27T19:26:13.870 回答