VBA 循环

循环结构:根据循环条件判断,循环条件成立,则执行循环体中的内容,循环条件不成立,则结束循环的执行。

VBA循环结构包括四类结构:For To、For Each、While、Do While。


1 For To

For To通过循环变量指定循环次数,执行循环体。

基本用法

语法

For 循环变量 = 起始值 to 结束值 
  循环体
Next

循环变量为整数,从起始值开始,每循环1次,循环变量自动加1。

循环变量的值依次变化为:起始值、起始值+1、起始值+2……结束值。

执行次数: 结束值 – 起始值 + 1 。

循环体可以包含多条语句。


示例

通过循环输出1到10。

Sub for1()
  '声明循环变量
  Dim i As Integer

  '循环变量从1到10
  For i = 1 To 10
    Debug.Print i
  Next

End Sub

输出结果:输出1到10。


调试查看循环执行流程

通过调试,查看代码的执行流程与执行过程中循环变量的变化情况。

VBA 循环调试

第1步:显示本地窗口

显示[本地窗口]的方法:[视图]菜单选中[本地窗口]。

第2步:打断点

单击Debug.Pring i 这1行代码的左侧

第3步:运行

点击按钮运行

VBA 循环调试

第4步:单点[逐语句]按钮

VBA 循环调试

观察[立即窗口]与本地窗口中循环变量的变化。

不断重复第4步,理解代码的执行流程与执行过程中循环变量的变化情况。


指定步长

通过Step指定步长,没有指定时默认为1。每循环1次,循环变量自动加step。

示例。输出1、4、7…步长为3,一直到15。

Sub for2()

  '声明循环变量
  Dim i As Integer
  
  '循环变量从1到15
  For i = 1 To 15 Step 3
    Debug.Print i
  Next

End Sub

输出结果: 1、4、7、10、13


退出当前循环

VBA中没有Continue来退出当前循环,可以通过If结构实现即可。

示例。循环1到10,当3时退出当前循环。

Sub for3()
  Dim i As Integer 

  For i = 1 To 10
    '当i=3时退出当前循环,模拟其它语言中的continue
    If i <> 3 Then
      Debug.Print i
    End If

  Next

End Sub

输出结果:1、2、4到10。


Exit For退出整个循环

语法

Exit For

示例。循环1到10,当为3时退出整个循环。

Sub for4()
  Dim i As Integer

  For i = 1 To 10
    If i = 3 Then
      'For语句中,Exit For退出整个循环。
      Exit For
    End If

    Debug.Print i

  Next

End Sub

输出结果:1、2。


2 For Each

For Each用于遍历集合中的所有元素。

语法

For Each 循环变量 In 集合变量
  循环体
Next

循环变量与集合中的元素类型相同,例如:集合为字符串集合,则循环变量是字符串类型,从第1个元素开始,每循环1次,循环变量代表下一个元素。

循环变量的值依次变化为:集合中的第1个元素、集合中的第2个元素、集合中的第3个元素……集合中的最后1个元素。

执行次数: 集合变量中有N个元素,则执行N次。

循环体可以包含多条语句。


示例代码

Sub for5()
  '声明数组变量
  Dim techs As Variant
  
  '数组初始化
  techs = Array("windows", "dos", "注册表", "vba", "html")
  
  '遍历集合
  For Each Item In techs
    Debug.Print Item
  Next

End Sub

输出结果为:

windows
dos
注册表
vba
html

调试查看循环执行过程

VBA 循环调试


3 While

for循环中的循环变量是自动变化,开发人员不需要修改,更加简单。

通常,while循环需要修改循环变量,更加灵活。

语法

Do while 循环条件
  循环体
Loop

首先判断循环条件是否成立,如果成立,则执行循环体中的内容;如果不成立,则结束while循环。


示例。通过while循环输出1到10。

Sub while1()
  Dim i As Integer
  i = 1

  Do While i < 11
    Debug.Print i
    i = i + 1
  Loop

  Debug.Print "最后i的值为:" & i

End Sub

调试执行过程

打断点运行

VBA 循环调试

第2次运行到断点处,立即窗口与本地窗口数据如下。

VBA 循环调试

运行到结束时,立即窗口与本地窗口的数据如下:

VBA 循环调试

Exit Do退出整个While循环

Exit Do

示例代码。

Sub while2()
  Dim i As Integer
  i = 1
  Do While i < 11
    '当i为3时,退出整个循环
    If i = 3 Then Exit Do
    Debug.Print i
    i = i + 1
  Loop

End Sub

输出结果:1、2。


4 Do While

上面的while结构与do while结构虽然都有do while,但我们还是沿用习惯说法。

while结构:首先判断循环条件,如果首次断不成立,则循环体一次也不执行。

do while结构:根据下面的语法结构,首先执行循环体,再判断循环条件,所以至少执行一次。


语法

Do 
  循环体
Loop while 循环条件

首先执行一次循环体,然后判断循环条件是否成立,如果成立,则执行循环体中的内容;如果不成立,则结束while循环。


示例代码如下:

Sub doWhile1()
  Dim i As Integer
  i = 1
  Do
    Debug.Print i
    i = i + 1
  Loop While i < 11

  Debug.Print "最后i的值为:" & i
End Sub

调试代码执行流程

通过调试更加准确的理解do while的执行流程。