循环控制

所谓循环控制,即在循环执行一段代码,用于完成一些重复性任务。

VBA中的循环控制语句主要有3种:

  1. for循环
  2. Do……loop循环
  3. while循环

其中for循环最常用。

for循环

for循环有两种语句形式,for next语句,和for each next语句。通常for next语句用于循环次数已知的,for each next语句用于循环次数未知的。

for next语句

格式如下:

1
2
3
for 计数变量=开始值 to 结束值
    ' 用于循环执行的语句
next 计数变量

其中,next后面的计数变量可以省略。

例1,循环打印数字1到10的累加。

1
2
3
4
5
6
7
Sub sum10()
    Dim total As Integer
    For i = 1 To 10
        total = total + i
    Next i                ' 此处的计数变量i可以省略
    Debug.Print total     ' 打印结果55
End Sub

for next语句还有一个参数ー步长,用关键字step指定,格式如下:

1
2
3
for 计数变量=开始值 to 结束值 step 步长的值
    ' 用于循环执行的语句
next 计数变量

使用Step关键字, 可以根据您指定的值来增加或减少计数器变量。省略step时,默认步长是1。

例2,计算1到10所有奇数的和.在下面的示例中, 每次i循环重复时, 计数器变量递增2。

1
2
3
4
5
6
7
Sub sum10()
    Dim total As Integer
    For i = 1 To 10 step 2 ' 步长是2,也就是循环变量取值是1,3,5,7,9
        total = total + i
    Next i                 ' 此处的计数变量i可以省略
    Debug.Print total      ' 打印结果25
End Sub

for each next语句

格式如下:

1
2
3
for 计数变量=开始值 to 结束值
    ' 用于循环执行的语句
next

步长也可以是负数。

例3,计算1到10所有偶数的和。在下面的示例中, 每次i循环重复时, 计数器变量递增2。

1
2
3
4
5
6
7
Sub sum10()
    Dim total As Integer
    For i = 10 To 1 step -2 ' 步长是-2,也就是循环变量取值是10,8,6,4,2
        total = total + i
    Next i                 ' 此处的计数变量i可以省略
    Debug.Print total      ' 打印结果30
End Sub

for each next语句格式如下:

1
2
3
For Each 循环变量 In 循环对象
    ' 循环执行的语句
Next 循环变量

For Each…Next语句会对循环对象中的每个对象重复语句块。在每次循环运行时,Visual Basic会自动设置一个变量。Next后面的循坏变量可以省略。

循环对象可以是一个集合对象或者数组。

例4,下面的代码将循环访问数组中的每个元素,并将每个元素的值设置为索引变量 I 的值。

1
2
3
4
5
6
7
Sub Test()
    Dim TestArray(4) As Integer, I As Variant
    For Each I In TestArray
        TestArray(I) = I
        Debug.Print TestArray(I)
    Next I                        ' 可以省略I
End Sub

以上程序的运行结果如下:

1
2
3
4
5
 0
 0
 0
 0
 0

Do……loop循环

Do……loop循环也有两种形式。第一种是先判断循环条件再开执行,第二种先执行一次然后再判断循环条件是否成立。

先判断再执行

格式如下:

1
2
3
Do [While | Until] 循环条件
    ' 用于循环执行的语句
Loop

这里的[While | Until]表示两者随便用一个都可以。While就是当条件成立的时候就执行,而Until就是直到条件成立时就停止执行。也就是说,While用于指定循环的条件,说明什么时候就执行循环,而Until用于指定停止循环的条件,说明什么时候不再执行循环。

例5,计算1到10所有数的累加和。Do While……Loop,Do Until……Loop的写法。

使用While关键字的写法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub sum10()
    Dim total As Integer
    Dim i As Integer
    i = 0
    Do While i <= 10
        total = total + i
        i = i + 1
    Loop
    Debug.Print total    ' 打印结果55
End Sub

使用Until关键字的写法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub sum10()
    Dim total As Integer
    Dim i As Integer
    i = 0
    Do Until i > 10
        total = total + i
        i = i + 1
    Loop
    Debug.Print total    ' 打印结果55
End Sub

先执行再判断

格式如下:

1
2
3
Do
    ' 用于循环执行的语句
Loop [While | Until] 循环条件

先执行再判断,即将条件判断语句放到Loop的后面,先Do一次,然后再Loop While或者Loop Until。

例6,计算1到10所有数的累加和。Do……Loop While,Do……Loop Until的写法。

使用While关键字的写法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub sum10()
    Dim total As Integer
    Dim i As Integer
    i = 0
    Do
        total = total + i
        i = i + 1
    Loop  While i <= 10
    Debug.Print total    ' 打印结果55
End Sub

使用Until关键字的写法如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub sum10()
    Dim total As Integer
    Dim i As Integer
    i = 0
    Do
        total = total + i
        i = i + 1
    Loop Until i > 10
    Debug.Print total    ' 打印结果55
End Sub

while循环

While循环有点类似于Loop循环,先判断条件是否成立,再开始(或结束)循环。

格式如下:

1
2
3
While 循环条件
    ' 用于循环执行的语句
wend

例7,计算1到10所有数的累加和。While……wend的写法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub sum10()
    Dim total As Integer
    Dim i As Integer
    i = 0
    While i <= 10
        total = total + i
        i = i + 1
    wend
    Debug.Print total    ' 打印结果55
End Sub

Exit语句

如果要中途退出循环怎么办?用Exit语句。 Exit语句可以退出 Do…Loop块、 For…Next 、 Function 、 Sub 或 Property代码(function,sub,Property将在以后的课程中介绍)。

Exit Do

退出Do...Loop语句。 只能在Do...Loop语句内使用它。Exit Do将控制权转移给 Loop 语句之后的语句。 在嵌套的 Do…Loop语句内使用时,Exit Do将控制权转移给发生Exit Do的循环的上一嵌套层中的循环。

例8,在i等于6时,退出Do循环,也就是计算1到5的累加和。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Sub sum10()
    Dim total As Integer
    Dim i As Integer
    i = 0
    Do
        total = total + i
        i = i + 1
        if i=6 then
          exit do         ' 退回do循环,执行紧挨着do循环的debug语句。
        end if
    Loop Until i > 10
    Debug.Print total    ' 打印结果15
End Sub

Exit For

提供一种退出 For 循环的方式。 它只能用于For...NextFor Each...Next循环。 Exit For将控制权转移给 Next 语句之后的语句。 在嵌套的 For 循环内使用时,Exit For将控制权转移给发生Exit For的循环的上一嵌套层中的循环。

例9,在i等于6时,退出For循环,也就是计算1到5的累加和。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub sum10()
    Dim total As Integer
    For i = 1 To 10
        if i=6 then
          exit for         ' 退回for循环,执行紧挨着for循环的debug语句。
        end if
        total = total + i
    Next i
    Debug.Print total      ' 打印结果15
End Sub

参考资料:
https://docs.microsoft.com/zh-cn/office/vba/language/concepts/getting-started/using-for-eachnext-statements https://docs.microsoft.com/zh-cn/office/vba/language/concepts/getting-started/using-doloop-statements

转载请注明本网址。