将For / Next循环更改为Variant数组

时间:2012-12-21 19:49:58

标签: excel-vba vba excel

我想让我的代码运行得更快。我相信正确的技术是使用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

2 个答案:

答案 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