复制公式或填写

时间:2015-02-22 04:26:08

标签: excel excel-vba vba

我正在使用vba从多个单元格中复制公式并粘贴到大量单元格中。这是我的代码 -

Sub FillFormulae()
Application.ScreenUpdating = False

Dim WS As Worksheet: WS = Sheets("Main")
WS.Range("E15:P15").Copy
WS.Range("E16:P" & MainDataLastCell).PasteSpecial xlPasteFormulas
WS.Range("S15:EA15").Copy
WS.Range("S16:EA" & MainDataLastCell).PasteSpecial xlPasteFormulas

End Sub

MainDataLastCell是一个全局变量,其当前数据的值为312896。这可能或多或少取决于数据。

问题是此代码需要4个多小时才能完成。你们是否认为如果我使用“Filldown”代替复制公式,它会花费更少的时间?

2 个答案:

答案 0 :(得分:1)

下面怎么样?使用简单的公式,在我的机器上运行只需要大约一分钟。

Sub fillformulae()
Application.ScreenUpdating = False

Dim icol As Integer
Dim irow As Integer
Dim WS As Worksheet: WS = Sheets("Main")

For icol = 5 To 16
    WS.Range(Cells(16, icol), Cells(MainDataLastCell, icol)).Formula = WS.Cells(15, icol).Formula
Next

For icol = 19 To 131
    WS.Range(Cells(16, icol), Cells(MainDataLastCell, icol)).Formula = WS.Cells(15, icol).Formula
Next
Application.ScreenUpdating = True
End Sub

答案 1 :(得分:1)

建议您尝试

  1. 关闭计算
  2. 关闭screenupdating
  3. 下面的代码还修复了编译错误,因为WS = Sheets("Main")无法工作

    Const MainDataLastCell = 312896
    
    Sub FillFormulae()
    Application.ScreenUpdating = False
    
    Dim WS As Worksheet
    Dim lngCalc As Long
    
    Set WS = Sheets("Main")
    
    With Application
        lngCalc = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    
    With WS
        .Range("E16:P" & MainDataLastCell).FormulaR1C1 = .Range("E15:P15").FormulaR1C1
        .Range("S16:EA" & MainDataLastCell).FormulaR1C1 = .Range("S15:EA16").FormulaR1C1
    End With
    
    
    With Application
        .Calculation = lngCalc
        .ScreenUpdating = True
    End With
    
    End Sub