VBA 程序循环结构

VBA 中,循环结构用于多次重复执行同一段代码。重复次数通过特定数字或特定条件控制。

通过控制循环过程中特定变量,循环结构可执行复杂的重复任务。

循环结构的执行流程可简单的表示如下:

循环结构的执行流程

VBA 循环结构类型

VBA 中循环结构有 3 种类型,它们是:

  • For 循环
  • Do While 循环
  • Do Until 循环

下面分别介绍 3 种类型循环结构语法以及用法。

For 循环

For 循环是最常用的循环类型,它有两种形式:

  • For … Next 循环
  • For Each 循环

For … Next 循环

使用 For ... Next 循环可以按指定次数,循环执行一段代码。For 循环使用一个数字变量,从初始值开始,每循环一次,变量值增加或减小,直到变量的值等于指定的结束值时,循环结束。

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

可以看到,For 循环使用 i 变量,循环 10 次,i 的值从 1 到 10 变化。

值得注意的是,For 循环的 Step 值如果是 1,则 Step 关键词可省略。上述过程循环部分可写成如下方式:

For i = 1 To 10
    sum = sum + i
Next

For Each 循环

For Each 循环用于逐一遍历一个数据集合中的所有元素。数据集合包括数组、Excel 对象集合、字典等。

For Each 循环不需要一个数字变量,但是需要与数据集合中的元素相同的数据类型变量。其基本语法如下:

For Each [元素] In [元素集合]
    '循环执行的代码
Next [元素]

其中,

  • [元素] 是与集合中的元素相同类型的变量,该变量可在循环代码中使用。
  • [元素集合]是包括多个元素的集合。

下面看一个实际例子,循环打印出工作簿中所有工作表的名称。

Sub MyCode()

    Dim sh As Worksheet
    
    For Each sh In Worksheets
        Debug.Print sh.Name
    Next sh

End Sub

sh 变量就是元素变量,Worksheets 是工作簿中所有工作表的集合。

Exit For 语句

Exit 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 时,循环就停止。

Do While 循环

Do While 循环用于满足指定条件时循环执行一段代码的情形。循环的指定条件在 While 关键词后书写。

Do While 循环也有两种形式:

  • Do While … Loop 循环
  • Do … Loop While 循环

Do While … Loop 循环

Do While … Loop 循环,根据 While 关键词后的条件表达式的值,真时执行,假时停止执行。基本语法如下:

Do While [条件表达式]
    '循环执行的代码
Loop

其中,只要 [条件表达式] 为真,将一直循环执行。[条件表达式] 一旦为假,则停止循环,程序执行 Loop 关键词后的代码。

看一个实际的例子,还是求 1- 10 累积和。

Sub MyCode()

    Dim i As Integer
    Dim sum As Integer
    
    i = 1
    Do While i <= 10
        sum = sum + i
        i = i + 1
    Loop
    
End Sub

i 变量的初始值是 1,根据 While 后的条件,只要 i 变量小于等于 10,后续的代码就可以一直循环执行。

这里为了演示使用了 Do While 循环,实际情况下,这种求和问题,使用 For 循环更简洁。

Do … Loop While 循环

与上一种 Do 循环不同的是,Do ... Loop While循环至少循环执行代码一次后,再判断条件表达式的值。基本语法如下:

Do
    '循环执行的代码
Loop While [条件表达式]

其中,While 和条件表达式写在 Loop 关键词后。

Exit Do 语句

Exit For 语句类似,Exit Do 语句用于跳出 Do While 循环。

Do Until 循环

Do Until 循环与 Do While 循环类似。不同点在于,Do While 在条件表达式为真时,继续执行循环;而 Do Until 在条件表达式为真时,停止执行循环。

Do Until 循环也有两种形式:

  • Do Until … Loop 循环
  • Do … Loop Until 循环

Do Until … Loop 循环

循环开始前判断 Until 后条件表达式的值,如果是真,停止循环;如果是假,继续执行循环。基本语法如下:

Do Until [条件表达式]
    '循环执行的代码
Loop

Do … Loop Until 循环

先运行一次,再判断 Until 后条件表达式的值,如果是真,停止循环;如果是假,继续执行循环。基本语法如下:

Do
    '循环执行的代码
Loop Until [条件表达式]

其他使用方法与 Do While 循环一致。

总结

本篇文章我们学习了 VBA 中程序循环结构基础,以及多种循环结构形式。包括子类在内,VBA 中常使用的循环结构包括 6 种,它们是:

循环结构 说明
For … Next 循环 按指定次数循环执行
For Each 循环 逐一遍历数据集合中的每一个元素
Do While … Loop 循环 当条件为真时,循环执行
Do … Loop While 循环 当条件为真时,循环执行。无论条件真假,至少运行一次
Do Until … Loop 循环 直到条件为真时,停止执行
Do … Loop Until 循环 直到条件为真时,停止执行。无论条件真假,至少运行一次

此外,学习了两种跳出循环的语句,它们是:

跳出语句 说明
Exit For 跳出 For 循环
Exit Do 跳出 Do While/Until 循环

 

转载注明:文章转载自「懒人Excel - lanrenexcel.com
本文标题:VBA 程序循环结构
15 评论
最新
最旧 最多投票
内联反馈
查看所有评论
Yuxin
4 月 前

hello 老师~想问下 for each那个示例我在实际操作后点击执行后既没有报错也没有任何变化,我怎么确认这个结果是什么样的呢?

YUXIN
4 月 前
回复给  懒人Excel

好的,谢谢老师

SaSa
5 月 前

请问在Do While 循环中,已经有loop来跳出循环了,为啥还要用到Exit Do嘞?这两个的作用有什么区别吗?

Kitty
6 月 前

excel 2016 运行不了以下代码:
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

老师您好
7 月 前

DO….LOOP WHILE .. 语句 计算1到10累加和时,sum as integer 时 提示溢出,换成long就好了,但是结果还是55,这是为什么呢?
Sub DOLOOPWHILE语句()
Dim i As Integer
Dim sum As Long
i = 1
Do
sum = sum + i
i = i + 1
Loop While i <= 10

Debug.Print sum

End Sub

Echo
1 年 前

在For Next循环中,只对sum声明,但是没有初始值,这种情况能在循环中执行吗

Dev
1 年 前

该章总结部分do….until loop和do until….loop说明好像和正文部分相悖,麻烦还请核对一下

Zzzzzzz
2 年 前

在文章开始讲For Next循环章节,第三小点关于步长,句尾的错别字希望更新一下,“”如果为复制,变量减小“”。很好的课程,希望越来越完美。

15
0
希望看到您的想法,请您发表评论x