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