0

私は自分のコードをより速く実行できるようにしようとしています。適切な手法は、バリアント配列を使用することだと思います。次のコードをより効率的なバリアント配列に変換する方法のサンプルを教えてください。ありがとう!

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 に答える