
在 VBA 编程中,循环结构用于反复执行某段代码,其重复次数由预设数值或特定逻辑条件决定。
通过动态调整循环过程中的控制变量,可实现更为复杂、灵活的重复操作任务。
整个循环结构的运行逻辑可简要概括为如下流程:
VBA 提供了三种主要的循环语句,具体包括:
- For 循环
- Do While 循环
- Do Until 循环
接下来将逐一讲解这三类循环的语法格式及其实际应用场景。
For 循环
For 循环是使用频率最高的循环方式,它包含两种基本形式:
- For … Next 循环
- For Each 循环
For … Next 循环
该循环适用于已知执行次数的场景,通过一个数值型计数器变量,从起始值开始,每次迭代按指定步长递增或递减,直至达到终止值时自动退出。
标准语法格式如下:
For [计数器] = [起始值] To [终止值] Step [步长]
'待重复执行的语句块
Next
说明如下:
- [计数器] 是一个数值类型变量,可在循环体内被引用;
- [起始值] 与 [终止值] 为确定的数字;
- [步长] 表示每次循环后计数器的变化量;若为正,则递增;若为负,则递减。
举个实例:计算 1 到 10 的累加和。
Sub MyCode()
Dim i As Integer
Dim sum As Integer
For i = 1 To 10 Step 1
sum = sum + i
Next
End Sub
此处 i 作为计数器,完成从 1 至 10 共 10 次迭代。
需要特别注意的是:当步长为 1 时,“Step 1”部分可以省略不写。 因此上述代码也可简化为:
For i = 1 To 10
sum = sum + i
Next
For Each 循环
For Each 循环专用于遍历各类集合对象(如数组、Excel 工作表集合、字典等)中的每个成员,无需手动管理索引变量,只需声明一个与集合元素类型一致的临时变量即可。
基本语法如下:
For Each [临时变量] In [集合对象]
'对每个元素执行的操作
Next [临时变量]
其中:
- [临时变量] 必须与集合中各元素的数据类型兼容,并可用于循环体内部;
- [集合对象] 是包含多个项目的容器,例如 Worksheets、Range、Dictionary.Keys 等。
来看一个典型应用:输出当前工作簿中所有工作表的名称。
Sub MyCode()
Dim sh As Worksheet
For Each sh In Worksheets
Debug.Print sh.Name
Next sh
End Sub
这里 sh 就是代表每一个工作表的对象变量,Worksheets 则是 Excel 内置的工作表集合。
Exit For 语句
Exit For 用于强制中断当前 For 循环(包括 For … Next 和 For Each),常用于满足某种提前退出条件时。
例如:在计算 1 至 10 累加和的过程中,一旦总和超过 30 即刻终止循环。
Sub MyCode()
Dim i As Integer
Dim sum As Integer
For i = 1 To 10
sum = sum + i
If sum > 30 Then
Exit For
End If
Next
End Sub
当 sum 超过 30 后,程序立即跳出 For 循环,不再继续后续迭代。
Do While 循环
Do While 循环适用于“只要条件成立就持续执行”的情形,判断依据位于 While 关键字之后。
该循环同样具备两种结构形式:
- Do While … Loop 循环
- Do … Loop While 循环
Do While … Loop 循环
该结构先判断条件是否为真,若为真则执行循环体,否则跳过整个循环。语法如下:
Do While [条件判断式]
'循环体代码
Loop
只要 [条件判断式] 返回 True,循环将持续进行;一旦结果为 False,则立即退出,执行 Loop 后面的语句。
仍以求 1–10 累加和为例:
Sub MyCode()
Dim i As Integer
Dim sum As Integer
i = 1
Do While i
<p>i 的初始值设为 1,While 后的条件确保只有当 i ≤ 10 时才持续执行循环体。</p>
<p>尽管本例可用 Do While 实现,但在固定次数的场景下,For 循环通常更直观、易读。</p>
<h3>Do … Loop While 循环</h3>
<p>这种形式与前一种的区别在于:它会无条件地至少执行一次循环体,然后再根据 While 后的条件决定是否继续。语法如下:</p>
Do
'循环体代码
Loop While [条件判断式]
<p>注意:While 及其后的表达式必须置于 Loop 关键字之后。</p>
<h3>Exit Do 语句</h3>
<p>类似于 Exit For,Exit Do 可用于中途退出任意类型的 Do 循环(含 Do While 和 Do Until)。</p>
<h2>Do Until 循环</h2>
<p>Do Until 循环与 Do While 功能相似,但逻辑相反:Do While 在条件为真时继续循环,而 Do Until 则是在条件为真时停止循环。</p>
<p>它也分为两种写法:</p>
- Do Until … Loop 循环
- Do … Loop Until 循环
Do Until … Loop 循环
在进入循环前先检查 Until 后的条件表达式,若为 True,则直接跳过循环;若为 False,则执行循环体。语法如下:
Do Until [条件判断式]
'循环体代码
Loop
Do … Loop Until 循环
该形式首先无条件执行一次循环体,然后才检测 Until 后的条件,若为 True 则结束循环,否则继续。语法如下:
Do
'循环体代码
Loop Until [条件判断式]
其余用法与 Do While 循环完全一致。
总结
本文系统介绍了 VBA 中循环结构的基础知识及多种实现方式。综合来看,VBA 中常用循环共有六种,涵盖以下类别:
| 循环类型 | 功能说明 |
|---|---|
| For … Next 循环 | 依据明确次数重复执行 |
| For Each 循环 | 依次访问集合中每个元素 |
| Do While … Loop 循环 | 条件为真时持续循环 |
| Do … Loop While 循环 | 条件为真时持续循环;至少执行一次 |
| Do Until … Loop 循环 | 条件为真时停止循环 |
| Do … Loop Until 循环 | 条件为真时停止循环;至少执行一次 |
此外,还学习了两类用于主动跳出循环的关键语句:
| 退出语句 | 作用范围 |
|---|---|
| Exit For | 退出 For 类型循环(含 For … Next 和 For Each) |
| Exit Do | 退出 Do 类型循环(含 Do While 和 Do Until) |










