从0学Excel VBA编程 第9篇:Do While 循环——不知道要循环多少次时怎么办
上一篇我们学了
For循环,它适合"知道要循环几次"的场景。但工作中经常遇到另一种情况:一开始根本不知道要循环多少次,而是"只要条件满足,就一直做"。这时候就要请出Do While循环了。
学习目标
理解 Do While...Loop和Do...Loop While的区别学会用 Do While处理"直到遇到空单元格为止"的数据能避免写出"死循环"
知识点精讲
1. 为什么还需要 Do While?
For 循环适合"数清楚次数"的情况,比如"A1 到 A10"。
但很多时候,数据行数是变化的:
今天有 50 行数据,明天可能有 80 行 你只想处理到"最后一行有数据的行",不想手动数
这种"不确定次数,只知道停止条件"的场景,就用 Do While。
2. Do While...Loop 的基本写法
Do While 条件 ' 条件为真时,重复执行的代码Loop执行规则:
先判断条件 条件为 True(真),执行一次循环体执行完再判断条件 条件为 False(假),退出循环
重要:如果一开始条件就不成立,循环体一次都不会执行。
3. Do...Loop While 的写法
Do ' 先执行一次代码Loop While 条件区别:
Do While...Loop:先判断,再执行(可能一次都不执行)Do...Loop While:先执行,再判断(至少执行一次)
4. 一定要让条件能变成 False
这是新手最容易踩的坑。如果条件永远为真,程序就会陷入"死循环",停不下来。
所以循环体里通常要有一个能改变条件的语句,比如:
rowNum = rowNum + 1如果没有这一行,程序就会一直卡在那里。
实战案例
案例 1:从 1 开始累加,直到总和超过 100(简单)
功能说明:从 1 开始,依次加上 2、3、4……直到总和首次超过 100,把最终结果写在 A1。
Sub 累加直到超过100() Dim i As Integer Dim total As Integer i = 1 total = 0 Do While total <= 100 total = total + i i = i + 1 Loop Range("A1").Value = total MsgBox "从1加到" & (i - 1) & ",总和首次超过100,结果是:" & totalEnd Sub操作步骤:
按 Alt + F11打开 VBA 编辑器插入一个新模块 把上面的代码粘贴进去 把光标放在代码内部,按 F5运行查看 A1,里面就是超过 100 的最小总和
案例 2:从 A 列第一行往下找,遇到空单元格就停止(中等)
功能说明:A 列已经有一些数据,从 A1 开始逐行读取,把每个数值乘以 2 写到 B 列,遇到第一个空单元格就停下来。
Sub 遇到空单元格就停止() Dim rowNum As Integer rowNum = 1 Do While Range("A" & rowNum).Value <> "" Range("B" & rowNum).Value = Range("A" & rowNum).Value * 2 rowNum = rowNum + 1 Loop MsgBox "已处理到第" & (rowNum - 1) & "行,第" & rowNum & "行是空的"End Sub操作步骤:
在 Excel 的 A1:A5 区域手动输入一些数字,例如 10、20、30、40、50 把代码粘贴到 VBA 编辑器的新模块中 按 F5运行观察 B 列,每个数字都是 A 列对应数字的两倍 试着在 A 列增加或减少几行数据,再运行一次,看看程序会不会自动调整
案例 3:批量计算销售金额,直到数据结束(实用小案例)
功能说明:假设 A 列是产品名称,B 列是数量,C 列是单价。从第 2 行开始,自动计算每个产品的金额(数量 × 单价),写到 D 列,直到某行的 A 列为空。
Sub 自动计算销售金额() Dim rowNum As Integer Dim qty As Integer Dim price As Double Dim amount As Double rowNum = 2 Do While Range("A" & rowNum).Value <> "" qty = Range("B" & rowNum).Value price = Range("C" & rowNum).Value amount = qty * price Range("D" & rowNum).Value = amount rowNum = rowNum + 1 Loop MsgBox "已自动计算" & (rowNum - 2) & "条销售记录的金额"End Sub操作步骤:
在 Excel 中准备如下数据:
把代码粘贴到 VBA 编辑器 按 F5运行检查 D 列,是否已经自动填好金额 再增加几行数据,再次运行,看程序能不能自动处理新增的行
这个案例用到了
Double类型(带小数的数字),因为单价和金额常常不是整数。
本篇小结
Do While适合"不知道循环多少次,但知道停止条件"的场景Do While...Loop:先判断条件,条件为真才执行Do...Loop While:先执行一次,再判断条件循环体里必须有能改变条件的语句,否则会变成死循环 处理 Excel 表格时,常用 Range("A" & rowNum).Value <> ""来判断数据是否结束
下一篇内容预告
第10篇:工作表操作——新建、重命名、复制、删除工作表
学会了操作单元格和循环,接下来我们要学习如何操作 Excel 的"工作表"本身。比如一键新建 12 个月的工作表、批量重命名、自动复制模板表等。我们下一篇见!
夜雨聆风