VBA 中的循环

在某些情况下,VBA 程序需要连续多次执行同一组操作(即多次重复同一代码块)。 这可以使用 VBA 循环来完成。

VBA 循环包括:

接下来,我们将仔细研究每个周期。

Visual Basic 中的 For 循环运算符

循环运算符的结构 在 Visual Basic 中,可以按以下两种形式之一进行组织:作为循环 对于... 下一个 或作为一个循环 为每个.

循环“为了……下一个”

周期 对于... 下一个 使用一个从给定范围内依次取值的变量。 随着变量值的每次变化,循环体中的动作都会被执行。 从一个简单的例子中很容易理解:

对于 i = 1 到 10 总计 = 总计 + iArray(i) 下一个 i

在这个简单的循环中 对于... 下一个 使用了变量 i, 依次取值 1, 2, 3, ... 10,对于这些值中的每一个,循环内的 VBA 代码都会被执行。 因此,此循环对数组的元素求和。 数组 在变量中 合计.

在上面的例子中,没有指定循环增量,所以要增加变量 i 从 1 到 10,默认为增量 1…但是,在某些情况下,需要为循环使用不同的增量值。 这可以使用关键字来完成 如以下简单示例所示。

For d = 0 To 10 Step 0.1 dTotal = dTotal + d Next d

因为在上面的例子中,增量步设置为等于 0.1,那么变量 d总计 对于循环的每次重复,取值 0.0、0.1、0.2、0.3、... 9.9、10.0。

要确定 VBA 中的循环步骤,可以使用负值,例如,如下所示:

对于 i = 10 To 1 Step -1 iArray(i) = i Next i

这里的增量是 -1,所以变量 i 随着循环的每次重复,取值 10, 9, 8, ... 1。

循环“每个人”

周期 为每个 类似于循环 对于... 下一个,但不是迭代计数器变量的值序列,而是循环 为每个 对指定对象组中的每个对象执行一组操作。 在以下示例中,使用循环 为每个 枚举当前 Excel 工作簿中的所有工作表:

为工作表中的每个 wSheet 将 wSheet 调暗为工作表 MsgBox "Найден лист:" & wSheet.Name Next wSheet

循环中断语句“Exit For”

操作者 退出 用于中断循环。 一旦在代码中遇到该语句,程序就结束循环的执行并继续执行该循环之后的代码中的语句。 例如,这可用于在数组中搜索特定值。 为此,使用循环扫描数组的每个元素。 一旦找到所需的元素,就无需查看其余元素 - 循环被中断。

运营商申请 退出 在以下示例中演示。 这里循环迭代超过 100 个数组条目并将每个条目与变量的值进行比较 有效值…如果找到匹配项,则终止循环:

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Visual Basic 中的 Do While 循环

周期 做一会儿 只要满足指定的条件,就执行一段代码。 下面是一个过程的例子 小组,其中使用循环 做一会儿 不超过 1000 的斐波那契数按顺序显示:

'子程序输出斐波那契数不超过 1000 Sub Fibonacci() Dim i As Integer '计数器指示元素在序列中的位置 Dim iFib As Integer '存储序列的当前值 Dim iFib_Next As Integer '存储下一个值序列的 Dim iStep As Integer '存储下一个增量的大小 '初始化变量 i 和 iFib_Next i = 1 iFib_Next = 0 'Do While 循环将执行直到'当前斐波那契数的值大于 1000 Do While iFib_Next < 1000 If i = 1 Then '第一个元素的特殊情况 iStep = 1 iFib = 0 Else '在覆盖之前保存下一个增量的大小 '序列的当前值 iStep = iFib iFib = iFib_Next End If '在列 A 中打印当前斐波那契数活动工作表 '在索引为 i 的行中 Cells(i , 1).Value = iFib '计算下一个斐波那契数并将元素位置索引增加 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

在给定的示例中,条件 iFib_Next < 1000 在循环开始时检查。 因此,如果第一个值 iFib_下一个 如果超过 1000 个,则永远不会执行循环。

另一种实现循环的方法 做一会儿 - 不是将条件放在循环的开头,而是放在循环的结尾。 在这种情况下,无论是否满足条件,循环都会至少执行一次。

示意地,这样一个循环 做一会儿 最后要检查的条件如下所示:

当 iFib_Next < 1000 时执行...循环

Цикл «Do until» в Visual Basic

周期 做直到 非常类似于循环 做一会儿: 循环体中的代码块反复执行,直到满足指定条件(条件表达式的结果为 )。 在接下来的过程中 小组 使用循环 做直到 从列中的所有单元格中检索值 A 工作表,直到该列遇到一个空单元格:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) '当前单元格的值存入数组 dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 循环

在上面的例子中,条件 IsEmpty(单元格(iRow,1)) 位于结构的开头 做直到,因此如果第一个单元格不为空,则循环将至少执行一次。

但是,如循环示例中所示 做一会儿,在某些情况下,无论条件表达式的初始结果如何,循环都必须至少执行一次。 在这种情况下,条件表达式应该放在循环的末尾,如下所示:

做...循环直到 IsEmpty(Cells(iRow, 1))

发表评论