我想让我的代码运行得更快。我相信正确的技术是使用Variant Array。您能否向我提供一个如何将以下代码转换为更高效的Variant数组的示例?谢谢!
Dim i As Long
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow
If Range("S" & i) > 0.0014 Then
Range("Z" & i, "AA" & i).Copy
Range("AC" & i, "AD" & i).PasteSpecial xlPasteValues
End If
Application.ScreenUpdating = False
Next i
答案 0 :(得分:2)
以下是一个例子:
Dim i As Long
Dim checkedValues 'Declare a variant
Application.ScreenUpdating = False
lastrow = Range("S" & Rows.Count).End(xlUp).Row
'Get range you're checking into the array
checkedValues = Range("S2:S" & lastrow)
For i = 1 To UBound(checkedValues)
If checkedValues(i, 1) > 0.0014 Then
'Transfer values directly instead of copy paste
Range("AC" & i + 1, "AD" & i + 1).value = Range("Z" & i + 1, "AA" & i + 1).value
End If
Next i
Application.ScreenUpdating = True
如果你想做更多的数组工作,你需要制作一个你实际更新的数组和你要更新的数组,然后将更新后的数组的值传回到单元格中。如果速度非常令人担忧,您可能需要进行调查,看看是否会改善速度。
答案 1 :(得分:2)
这是一种替代方法,只需将公式粘贴到指定的范围内,然后将它们复制为值:
Sub FastPaste()
Dim LastRow As Long
LastRow = Range("A" & Rows.Count).End(xlUp).Row
With Range("AC2" & ":AD" & LastRow)
.FormulaR1C1 = "=IF(RC19>0.0014,RC[-3],"""")"
.Copy
.PasteSpecial (xlPasteValues)
End With
End Sub