0

我想让我的代码运行得更快。我相信正确的技术是使用变体数组。您能否提供一个示例,说明如何将以下代码转换为更高效的 Variant Array?谢谢!

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
4

2 回答 2

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

如果您想做更多的数组工作,您需要创建一个包含实际更新内容和更新内容的数组,然后将更新后的数组的值传输回单元格。如果速度是一个非常重要的问题,您可能需要进行调查,看看这是否会改善它。

于 2012-12-21T20:49:22.030 回答
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
于 2012-12-21T20:53:40.103 回答