今日学习目标

  • 掌握For...Next循环
  • 掌握For Each...Next循环
  • 掌握Do While/Until循环

知识点

1. VBA循环怎么用:For...Next

循环让一段代码重复执行。For循环适合"知道要循环几次"的场景:

vba
For i = 1 To 10 ' 重复执行10次 Next i

i 是循环变量,每圈自动加1。倒着数或跳着数用Step:For i = 10 To 1 Step -1;中途跳出用 Exit For。

2. For Each...Next

For Each遍历集合(工作表、单元格区域等),不需要知道元素个数:

vba
For Each item In collection ' 遍历集合 Next item

批量处理对象时For Each比For更自然。

3. Do While / Do Until

只知道"到什么时候停"时用Do循环:

vba
Do While 条件 ' 条件满足时执行 Loop Do Until 条件 ' 条件不满足时执行 Loop

While是"满足就继续",Until是"满足就停"。Do循环必须自己在体内推进条件变量(如 i = i + 1),否则就是死循环。

今日代码

vba
Sub For循环示例() Dim i As Integer Dim sum As Integer sum = 0 For i = 1 To 100 sum = sum + i Next i MsgBox "1到100的和: " & sum End Sub Sub ForEach示例() Dim ws As Worksheet For Each ws In Worksheets MsgBox ws.Name Next ws End Sub Sub DoWhile示例() Dim i As Integer i = 1 Do While i <= 10 i = i + 1 Loop MsgBox "循环结束时i的值: " & i End Sub

预期结果:For循环弹出5050;ForEach逐个弹出工作表名;DoWhile结束时i=11。

实战场景

背景:销售流水表第2行到第31行共30条记录,C列是每单金额。月底要统计总销售额,并数出过万的大单笔数:

vba
Sub 统计销售流水() Dim i As Long, 总额 As Double, 大单数 As Long For i = 2 To 31 总额 = 总额 + Cells(i, 3).Value If Cells(i, 3).Value >= 10000 Then 大单数 = 大单数 + 1 End If Next i MsgBox "总销售额: " & 总额 & vbCrLf & _ "过万大单: " & 大单数 & " 笔" End Sub

循环变量i就是行号,Cells(i, 3) 取第i行C列;假如C列合计118000、过万4笔,弹窗就显示这两个数。数据涨到300行时把 2 To 31 改成 2 To 301 即可——这正是VBA替代手工操作的核心场景。

练习题

  1. 计算1-50的偶数和
  2. 遍历工作簿中所有工作表
  3. 使用循环填充A1:A10单元格

参考解答

  1. For循环i从1到50,i Mod 2 = 0时累加(bas文件 练习_计算偶数和 是完整示例,结果650)。
  2. 用For Each ws In Worksheets遍历所有工作表(参考ForEach示例)。
  3. 使用For i = 1 To 10配合Cells:
vba
For i = 1 To 10 Cells(i, 1).Value = i Next i

运行后A1:A10依次填入1到10。

延伸练习

  1. 用双重循环把九九乘法表写到A1:I9区域。
  2. 求1~100中能被3整除但不能被5整除的数之和。
  3. 用Do While从第1行向下找第一个空行并弹出其行号。

常见错误与排查

报错/现象 原因 解决方法
Excel卡死、鼠标转圈 Do循环死循环 按 Esc 或 Ctrl+Break 中断,补上推进语句
Run-time error '6': Overflow Integer超过32767 循环变量改成Long
Run-time error '1004' Cells的行号列号用了0或负数 行列从1开始,检查边界

学习总结

知道次数用For,遍历集合用For Each,只知道结束条件用Do循环;写Do循环先确认条件会被推进。


由在线工具箱(www.vba.net)整理制作