Dim i As Long
Dim rows As Long
Dim rng3 As Range
rows = rng3.rows.Count
For i = rows To 1 Step (-1)
有谁知道这个循环是如何工作的?我对rows To 1 Step (-1)
的含义感到困惑。
答案 0 :(得分:27)
从高数到1
每次迭代添加 (-1)
注意: 添加,因为数学逻辑中的+
和-
评估为-
如果rows = 10
则
for i = 10 to 1 step -2
意味着从10 to 1
从每个循环周期中的2
减去 i
。
在循环中添加Debug.Print i
可能会为您提供更好的线索。
注意:从VBE菜单栏中打开Immediate Window
CTRL + G 或View => Immediate Window
< / p>
每个循环增加3的示例循环。
for i = 1 to 10 step 3
debug.print i
next i
用法
当从电子表格中删除行时,主要使用后退技术。
要在实践中查看逻辑,请参阅以下内容
答案 1 :(得分:5)
删除行时,通常会从最后开始向后退一步,这样就不会跳过任何行。
Dim i As Long
Dim rows As Long
Dim rng3 As Range
rows = rng3.rows.Count
For i = rows To 1 Step (-1)
'delete row if "delete" is in column 1
If rng3.cells(i,1).Value = "delete" Then
rng3.Rows(i).EntireRow.Delete
End If
next i
答案 2 :(得分:0)
Dim i as Integer
For i = 1 To 14 Step 3
Debug.Print i
Next i
在上面的代码循环中,迭代次数从1增加到14,增量为3,因此输出就像
1 4 7 10 13
这意味着它不能越过14限制。
因此,无论在步骤中提供什么值,它都会添加到变量用于循环目的。在这里
i = i +3
但是在VBA中的For循环中,Step值无法动态更改。例如:
Dim i As Integer
For i = 1 To 10 Step i
Debug.Print i
Next i
这里,在开始迭代之前,Step等于 i 的值,这是默认值,即0.所以我将增加如下:
i = i+ i => i = i+0
所以我不会在这里增加,循环将永远迭代。
现在查看以下代码:
Dim i as Integer
For i = 1 To 14 Step i+1
Debug.Print i
Next i
我将增加如下:
i=i+(i+1) => i= i+(0+1) =>i = i+1
所以它会增加1,输出将是1 2 3 .... 14
现在查看以下代码:
Dim i As Integer
i = 3
For i = 1 To 10 Step i
Debug.Print i
Next i
这里,在循环执行之前我等于3,所以Step值为3,但是循环将以i = 1开始,并在循环中以3递增。 在这里,
i = i+3
所以输出为1 4 7 10。
现在换一些其他变量:
Dim i As Integer
Dim j As Integer
j = 2
For i = 1 To 10 Step j
Debug.Print i
j = i
Next i
在上面的代码中,Step值为2,所以无论j是否在内部循环修改,每次迭代都会增加2,它不会影响Step值,因此输出将是
1 3 5 7 9
如果我遗漏任何事情或有什么不妥,请纠正我。还建议在VBA中使用For循环进行动态循环是否有任何方法。