VBA中的循环是自动化处理重复任务的核心工具,在深入学习每种循环结构前,先明确两个所有循环都必备的概念:
循环条件:决定循环是否继续执行的条件表达式
循环变量控制:必须在循环体内有改变循环条件的语句,否则可能产生无限循环
接下来通过两类循环详细说明

For Next
1.1 For…Next
这是最常用的循环,特别适合已知精确循环次数的情况
示例1:计算1到10之间所有奇数的和,通过设置 Step 2,计数器 i 每次增加2
Dim i As IntegerDim total As Integertotal = 0' 使用 Step 2,i 的值将从1开始,每次循环增加2: 1, 3, 5, 7, 9For i = 1 To 10 Step 2total = total + iNext imsgbox "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 -1Cells(11 - i, 1).value = iNext imsgbox "递减填充完成!"
执行后结果显示如下:

1.2 For Each…Next
适合遍历集合对象(如工作表、单元格区域等),无需知道元素数量
示例3:单元格区域遍历
Dim serial As IntegerDim cell As Rangeserial = 1For Each c In Range("D2:F5")c.value = serialserial = serial + 1Next c
执行后结果显示如下:


Do While
2.1Do While…Loop
Do While…Loop 语句非常适合处理那些循环次数不确定,需要根据特定条件来决定是否继续循环的情况
示例4:动态判断数据行尾并分类
Dim rs As Integerrs = 2 ' 数据从第2行开始' 循环条件:B列当前行的单元格不为空Do While Cells(rs, "B").value <> ""If Cells(rs, "B").value >= 60 ThenCells(rs, "C").value = "及格"ElseCells(rs, "C").value = "不及格"End Ifrs = 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 Integerrs = 2 ' 数据从第2行开始' 循环条件:B列当前行的单元格不为空Do Until Cells(rs, "B").value = ""If Cells(rs, "B").value >= 60 ThenCells(rs, "C").value = "及格"ElseCells(rs, "C").value = "不及格"End Ifrs = rs + 1 ' 行号递增,移动到下一行Loop
执行后结果一致:

2.3Do…Loop While
Do…Loop While 循环是一种“后测试”循环结构,特点是循环体内的代码至少会执行一次,然后再判断条件是True再继续循环
示例6:处理用户输入直至有效
代码实现的功能:在处理用户输入时,校验输入内容符合要求(如非空、特定格式等)。Do…Loop While 能确保至少询问用户一次,并在输入无效时持续提示
Dim userInput As StringDouserInput = InputBox("请输入姓名:")If userInput = "" Thenmsgbox "姓名不能为空,请重新输入!"End IfLoop 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 IntegerRandomizetargetNumber = Int(100 * Rnd + 1) ' 随机生成1到100的数字DoplayerGuess = Val(InputBox("猜一个1到100之间的数字:"))If playerGuess > targetNumber Thenmsgbox "猜大了!"ElseIf playerGuess < targetNumber Thenmsgbox "猜小了!"End IfLoop Until playerGuess = targetNumber ' 直到猜对数字才停止循环msgbox "恭喜你,猜对了!数字就是 " & targetNumber
通过以上示例代码可知,条件放在循环开头或结尾,仅仅影响循环体的执行次数:
条件在前:先检查条件,可能一次都不执行
条件在后(Do…Loop While/Until):确保循环体至少执行一次

结束语
建议初学者可以从简单的 For…Next 开始,如修改参数单步调试观察变化,逐步扩展到更复杂的循环结构。另外,如需提前终止循环,还可以配合使用 Exit For 或 Exit Do 在满足特定条件时提前退出
好了,今天的分享到此结束了,咱么下期继续
公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色的”,解锁更多的VBA技能





![[C++探索之旅] 第一部分第十一课:小练习,猜单词 - 鹿快](https://img.lukuai.com/blogimg/20251015/da217e2245754101b3d2ef80869e9de2.jpg)










暂无评论内容