6
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)

4

3 回答 3

27

高数1 添加 (-1)每次迭代

注意:添加是因为数学逻辑中的+AND-计算为-


如果rows = 10那时

for i = 10 to 1 step -2将意味着从每个循环循环10 to 1 减去 循环返回。2i

Debug.Print i在循环内添加一个可能会给你一个更好的线索。

注意:打开Immediate Window点击CTRL+GView => Immediate Window从 VBE 菜单栏

在此处输入图像描述


一个示例循环在每个循环中增加 3。

for i = 1 to 10 step 3
    debug.print i 
next i

在此处输入图像描述


用法

后退技术主要用于从电子表格中删除行时。

要查看实践中的逻辑,请参见以下内容

于 2013-10-30T15:32:13.270 回答
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
于 2013-10-30T15:41:25.500 回答
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 = 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

在这里,在循环执行之前 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 循环进行动态循环。

于 2018-06-01T16:15:25.607 回答