在vba中,在下一个树代码中移动行的效率更高

时间:2012-11-21 10:29:16

标签: excel vba

你好我有一个问题,下一个代码树在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我所有的代码

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

选项2。

使用选项1,您将在每次迭代时激活单元格,这是不必要的。选项3您设置为变量但仅使用一次,因此设置中有成本但在初始检查之外没有用。

同样在检查时使用Value2,因为这不检查货币/日期,对于字符串将比当前使用的隐式.Value更快:

if activecell.offset(i,0).Value2 = "Comp"