0

こんにちは、ツリーの次のコードのどれが VBA でより効率的かという質問があります

オプション1:

While fin 

    if activecell.value = "Comp"
        ' do something 
        ' I use some many time the value of the activecell or the line 
        ' im actually
    end if

    activecell.offset(1,0).activate

loop

オプション 2:

dim i as long
i=0

While fin 

    if activecell.offset(i,0).value = "Comp"
        ' do something 
        ' I use some many time the value of the activecell or the line 
        ' im actually
    end if

    i = i + 1
loop

オプション 3: 「実際の行を何回も使用するため、わかりません」その値を変数に取り込んだ方がよい場合

dim i as long
dim x as string
i=0

While fin 

    x = activecell.offset(i,0)

    if x = "Comp"
        ' do something 
        ' I use some many time the value of the activecell or 
        'the line im actually
    end if

    i = i + 1
loop

よろしくお願いします。

PD FOR または私が持っているすべてのコード

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayAlerts = False
4

2 に答える 2

3

オプション4、つまり作成しなかったオプション4は、オプション1〜3よりもはるかに効率的です。セルをアクティブ化またはオフセットすることを気にしないでください。データをVariant配列にロードし、それを操作するだけです。

Dim v As Variant
Dim i As Long

v = Sheet1.Range("A1:A1000").Value ' or wherever your data is

For i = 1 To UBound(v, 1)
    If v(i, 1) = "Comp" Then
        ' do something
    End If
Next i
于 2012-11-21T11:32:04.913 に答える
2

オプション 2。

オプション 1 を使用すると、反復ごとにセルがアクティブになりますが、これは必要ありません。オプション 3 は変数に設定していますが、一度しか使用しないため、設定にはコストがかかりますが、初期チェック以外では使用できません。

また、これは通貨/日付をチェックせず、現在使用されている暗黙の .Value よりも高速になるため、チェック時に Value2 を使用します。

if activecell.offset(i,0).Value2 = "Comp"
于 2012-11-21T10:37:30.567 に答える