【Excel VBA 基础编程】第28讲:掌握VBA循环技巧,轻松实现Excel自动化处理

VBA中的循环是自动化处理重复任务的核心工具,在深入学习每种循环结构前,先明确两个所有循环都必备的概念:

循环条件:决定循环是否继续执行的条件表达式

循环变量控制:必须在循环体内有改变循环条件的语句,否则可能产生无限循环

接下来通过两类循环详细说明

For Next

1.1 For…Next

这是最常用的循环,特别适合已知精确循环次数的情况

示例1:计算1到10之间所有奇数的和,通过设置 Step 2,计数器 i 每次增加2


    Dim i As Integer
    Dim total As Integer
    total = 0
    ' 使用 Step 2,i 的值将从1开始,每次循环增加2: 1, 3, 5, 7, 9
    For i = 1 To 10 Step 2
        total = total + i
    Next i
    msgbox "1到10之间所有奇数的和是: " & total ' 结果为 25

注意:在循环体内,只引用计数器变量 i的值,尽量避免直接修改计数器变量 i 的值,否则可能导致循环逻辑混乱或出现意外结果

示例2:从10递减到1,并在Excel的A列中填充这些数字


    Dim i As Integer
    ' 循环从10开始,到1结束,步长为-1(每次循环i减少1)
    For i = 10 To 1 Step -1
        Cells(11 - i, 1).value = i
    Next i
    msgbox "递减填充完成!"

执行后结果显示如下:

1.2 For Each…Next

适合遍历集合对象(如工作表、单元格区域等),无需知道元素数量

示例3:单元格区域遍历


    Dim serial As Integer
    Dim cell As Range
    serial = 1
    For Each c In Range("D2:F5")
        c.value = serial
        serial = serial + 1
    Next c

执行后结果显示如下:

Do While

2.1Do While…Loop

Do While…Loop 语句非常适合处理那些循环次数不确定,需要根据特定条件来决定是否继续循环的情况

示例4:动态判断数据行尾并分类


    Dim rs As Integer
    rs = 2 ' 数据从第2行开始
    ' 循环条件:B列当前行的单元格不为空
    Do While Cells(rs, "B").value <> ""
        If Cells(rs, "B").value >= 60 Then
            Cells(rs, "C").value = "及格"
        Else
            Cells(rs, "C").value = "不及格"
        End If
        rs = rs + 1 ' 行号递增,移动到下一行
    Loop

根据B列的成绩自动判断是否及格,并将结果输出到C列,执行后结果显示如下:

该循环核心特点是:先判断条件,后执行循环体。只要条件表达式为 True,循环体内的代码就会重复执行;一旦条件变为 False,循环就停止。这意味着如果一开始条件就不满足,循环体可能一次都不会执行

2.2 Do Until…Loop

Do Until…Loop 循环会在指定条件为 False 时重复执行代码块,一旦条件变为 True 就立即停止循环。其核心逻辑是“直到…为止才停止”

示例5:动态判断数据行尾并分类

仍旧是根据B列的成绩自动判断是否及格,并将结果输出到C列,使用Do  Until…Loop实现如下:


    Dim rs As Integer
    rs = 2 ' 数据从第2行开始
    ' 循环条件:B列当前行的单元格不为空
    Do Until Cells(rs, "B").value = ""
        If Cells(rs, "B").value >= 60 Then
            Cells(rs, "C").value = "及格"
        Else
            Cells(rs, "C").value = "不及格"
        End If
        rs = rs + 1 ' 行号递增,移动到下一行
    Loop

执行后结果一致:

2.3Do…Loop While

Do…Loop While 循环是一种“后测试”循环结构,特点是循环体内的代码至少会执行一次,然后再判断条件是True再继续循环

示例6:处理用户输入直至有效

代码实现的功能:在处理用户输入时,校验输入内容符合要求(如非空、特定格式等)。Do…Loop While 能确保至少询问用户一次,并在输入无效时持续提示


    Dim userInput As String
    Do
        userInput = InputBox("请输入姓名:")
        If userInput = "" Then
            msgbox "姓名不能为空,请重新输入!"
        End If
    Loop While userInput = "" ' 当输入为空字符串时继续循环
    msgbox "您好," & userInput & "!欢迎回来"

需要注意:即使用户第一次直接点击“确定”或“取消”导致输入为空,循环也会继续,要求用户输入,接着使用条件判断(Loop While userInput = “”) 在输入为空时继续循环

2.4 Do…Loop Until

Do…Loop Until先执行一次循环体内的代码,然后检查 Until 后的条件表达式。如果条件为 False,则返回 Do 处继续执行循环;如果为 True,则退出循环

示例7:猜数字游戏

猜数字游戏需要玩家至少猜一次后根据反馈继续,直到猜对,这非常适合用 Do…Loop Until


    Dim targetNumber As Integer, playerGuess As Integer
    Randomize
    targetNumber = Int(100 * Rnd + 1) ' 随机生成1到100的数字
    Do
        playerGuess = Val(InputBox("猜一个1到100之间的数字:"))
        If playerGuess > targetNumber Then
            msgbox "猜大了!"
        ElseIf playerGuess < targetNumber Then
            msgbox "猜小了!"
        End If
    Loop Until playerGuess = targetNumber ' 直到猜对数字才停止循环
    msgbox "恭喜你,猜对了!数字就是 " & targetNumber

通过以上示例代码可知,条件放在循环开头或结尾,仅仅影响循环体的执行次数:

条件在前:先检查条件,可能一次都不执行

条件在后(Do…Loop While/Until):确保循环体至少执行一次

结束语

建议初学者可以从简单的 For…Next 开始,如修改参数单步调试观察变化,逐步扩展到更复杂的循环结构。另外,如需提前终止循环,还可以配合使用 Exit For 或 Exit Do 在满足特定条件时提前退出

好了,今天的分享到此结束了,咱么下期继续

公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色的”,解锁更多的VBA技能

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
门店实体营销策划的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容