Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中,To和Step是什么意思?_Vba - Fatal编程技术网

在VBA中,To和Step是什么意思?

在VBA中,To和Step是什么意思?,vba,Vba,有人知道这个循环是如何工作的吗?我对行到1步(-1)的含义感到困惑 从高数值到1每次迭代添加(-1) 注意:它是添加的,因为数理逻辑中的+和-计算为- 如果行数=10则 对于i=10到1步骤-2意味着在每个循环周期中从10到1减去2 在循环中添加一个Debug.Print i,可能会提供更好的线索 注意:从VBE菜单栏点击CTRL+G或View=>立即窗口打开立即窗口 每个循环增加3个循环的示例 Dim i As Long Dim rows As Long Dim rng3 As Rang

有人知道这个循环是如何工作的吗?我对
行到1步(-1)
的含义感到困惑

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

注意:它是添加的,因为数理逻辑中的
+
-
计算为
-


如果
行数=10

对于i=10到1步骤-2
意味着在每个循环周期中从
10到1
减去
2

在循环中添加一个
Debug.Print i
,可能会提供更好的线索

注意:从VBE菜单栏点击CTRL+G或
View=>立即窗口打开
立即窗口


每个循环增加3个循环的示例

Dim i As Long
Dim rows As Long
Dim rng3 As Range
rows = rng3.rows.Count
For i = rows To 1 Step (-1)


用法

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

要了解实践中的逻辑,请参见以下内容


删除行时,通常的做法是从末尾开始向后退,这样就不会跳过任何行

for i = 1 to 10 step 3
    debug.print i 
next i
在上面的代码中,循环将以3的增量从1迭代到14,所以输出如下

Dim i as Integer

For i = 1 To 14 Step 3
Debug.Print i
Next i
这意味着它不能超过14个极限

因此,无论步骤中提供了什么值,它都将添加到变量中,用于循环。这里

1 4 7 10 13
但在VBA的For循环中,步长值不能动态改变。例如:

i = i +3
这里,在开始迭代之前,步骤等于默认值i,即0。因此,我将如下所示:

Dim i As Integer

For i = 1 To 10 Step i
    Debug.Print i
Next i
所以我不会在这里递增,循环将永远迭代

下面是代码:

i = i+ i => i = i+0
我想:

Dim i as Integer

For i = 1 To 14 Step i+1
Debug.Print i
Next i
所以它将增加1,输出将是1 2 3。。。。十四,

下面是代码:

i=i+(i+1) => i= i+(0+1) =>i = i+1
这里,在循环执行之前,i等于3,所以步长值将为3,但循环将从i=1开始,并在整个循环中以3递增。 这里,

因此,输出将为1 4 7 10

现在来看其他变量:

i = i+3
在上面的代码中,步长值将是2,所以无论j是否在修改内部循环,每次迭代我都会增加2,这不会影响步长值,所以输出将是

Dim i As Integer
Dim j As Integer
j = 2

For i = 1 To 10 Step j
    Debug.Print i
    j = i
Next i

请纠正我,如果我错过了什么或什么是错误的在这方面。还建议在VBA中使用for循环是否有任何动态循环的方法。

如果可以,将其转到->for i=1 to rows通常没有很好的倒计时理由,这会使代码变得不必要的复杂。有些人在与offset结合使用时会使用它,但出于代码审查的原因,我也非常反对使用offset。我要提到Sam的答案显然是正确的,因此我对他的答案投了赞成票。就我个人而言,我觉得从代码审查的角度增加循环计数器并管理正文中的减量更具可读性,但这只是我的观点。@KimGysen-如果您要删除行,那么最好从底部开始,然后向上…@TimWilliams我个人会使用rng3.rows(row_count-I)在循环中使用增量计数器,因为我认为大多数程序员阅读它更直观。但我不一定反对。我提到这一点纯粹是因为OP说这是一个开始的VBA er;在大多数情况下,您都会使用递增计数器,除非它是不必要的。@KimGysen-就像许多事情一样,这是一个偏好问题:-)非常感谢!这个解释太棒了:)对我来说肯定是用一种非常简单的方式把它分解了。@jacouh这将是一个很棒的新问题,但是你可以进入菜单栏中的“工具”>“选项”,第二个选项卡是你可以编辑颜色的地方
i = i+3
Dim i As Integer
Dim j As Integer
j = 2

For i = 1 To 10 Step j
    Debug.Print i
    j = i
Next i
1 3 5 7 9