我正在使用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”代替复制公式,它会花费更少的时间?
答案 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)
建议您尝试
下面的代码还修复了编译错误,因为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