Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA公式速度慢,数据量大_Vba_Excel_Sumifs - Fatal编程技术网

VBA公式速度慢,数据量大

VBA公式速度慢,数据量大,vba,excel,sumifs,Vba,Excel,Sumifs,我有以下代码,每次都会导致Excel崩溃。工作表上的A列有大约280000行数据。关于如何更有效地编写此代码,您有什么想法吗?理想情况下,我希望有值,而不是公式 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,'Sh

我有以下代码,每次都会导致Excel崩溃。工作表上的A列有大约280000行数据。关于如何更有效地编写此代码,您有什么想法吗?理想情况下,我希望有值,而不是公式

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

明显的改进是在宏填充公式时关闭屏幕更新和计算,然后在结束时重新打开。也许还有其他方法可以改善这一点,但我会从这些低挂果实开始

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

明显的改进是在宏填充公式时关闭屏幕更新和计算,然后在结束时重新打开。也许还有其他方法可以改善这一点,但我会从这些低挂果实开始

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

明显的改进是在宏填充公式时关闭屏幕更新和计算,然后在结束时重新打开。也许还有其他方法可以改善这一点,但我会从这些低挂果实开始

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

明显的改进是在宏填充公式时关闭屏幕更新和计算,然后在结束时重新打开。也许还有其他方法可以改善这一点,但我会从这些低挂果实开始

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

<>您可以始终限制<代码> SUFIFS 必须考虑的单元格个数,例如使用范围<代码> A1:A4000 而不是<代码> A: A<代码> < /P>
<>但是我认为你应该重新考虑创建13000个SUFIFS公式是否真的是必要的和有意义的。

< p>你可以总是限制<代码> SUFIFS 必须考虑的单元格个数,例如使用范围<代码> A1:A4000 而不是<代码> A: A<代码> < /P>
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

<>但是我认为你应该重新考虑创建13000个SUFIFS公式是否真的是必要的和有意义的。

< p>你可以总是限制<代码> SUFIFS 必须考虑的单元格个数,例如使用范围<代码> A1:A4000 而不是<代码> A: A<代码> < /P>
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

<>但是我认为你应该重新考虑创建13000个SUFIFS公式是否真的是必要的和有意义的。

< p>你可以总是限制<代码> SUFIFS 必须考虑的单元格个数,例如使用范围<代码> A1:A4000 而不是<代码> A: A<代码> < /P>
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

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

该公式在C2单元格中有效吗?它看起来是圆形的,假设它发生在第二张纸上。它发生在另一张纸上。更新的代码更直接。@simoco我知道这是正确的方法,但这是一次性的,我不想为了这个而学习数据库连接。如果我手动输入公式并向下拖动,它会工作(但需要大约一分钟)。该公式在单元格C2中工作吗?它看起来是圆形的,假设它发生在第二张纸上。它发生在另一张纸上。更新的代码更直接。@simoco我知道这是正确的方法,但这是一次性的,我不想为了这个而学习数据库连接。如果我手动输入公式并向下拖动,它会工作(但需要大约一分钟)。该公式在单元格C2中工作吗?它看起来是圆形的,假设它发生在第二张纸上。它发生在另一张纸上。更新的代码更直接。@simoco我知道这是正确的方法,但这是一次性的,我不想为了这个而学习数据库连接。如果我手动输入公式并向下拖动,它会工作(但需要大约一分钟)。该公式在单元格C2中工作吗?它看起来是圆形的,假设它发生在第二张纸上。它发生在另一张纸上。更新的代码更直接。@simoco我知道这是正确的方法,但这是一次性的,我不想为了这个而学习数据库连接。如果我手动输入公式并向下拖动,它会工作(但大约需要一分钟)。
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