2012-11-21 49 views
0

你好,我有樹下一個碼一個什麼樣的問題是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 
+1

你試過了嗎?你發現了什麼? –

+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 
+0

嗯有趣,但我必須使用變量數組,因爲取決於colummn的「A」我必須分析欄「B」「C」---「D」 –

2

選項2

利用選1要激活每一次迭代這是細胞不必要。選項3您將設置爲一個變量,但只能使用一次,因此設置中會有成本,但在初始檢查之外無法使用。

而且檢查使用值2的時候,因爲這不檢查貨幣/日期,而且字符串將快於隱.value的當前使用:

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

我忘記說我沒有更新尖叫,並且在選項3中我使用了很多次X,但沒有寫完整行,我使用有明確的代碼。 –

+0

hehe只是提前使用value2使我的代碼更快:D –

+0

我有另一個小問題Activecell.offset(0,1)和activecell.offset(0,1).value2之間有什麼區別,因爲它們都返回單元格的值。 –

相關問題