Excel VBA 编程基础 -- 语句(九)- 循环语句(二)
- 2026-11-10 02:12:19
Excel VBA 编程基础 -- 语句(九)- 循环语句(二)前面我们讨论了 For 循环语句。For 循环主要用于初始值和终止值都已知的情况。今天我们讨论 Do While 循环语句。 还是从例子入手。 例1. 为单元格填色
图1 表格填色 以右边的图例为左边的表格填色。因为是为若干行的单元格填色,很自然第就会想到使用循环语句。假如我们不知道这个销售报表的第一个数据单元格的地址,怎么办? 从表格中可以看出,“奉止”为第一个数据单元格,但不知道“奉止”单元格所在的行列位置,如何确定该单元格的位置? 幸运的是,VBA 为我们提供了一个强有力的 Find 函数,我们可以用这个函数来找到值为“奉止”的单元格: 找到值为“奉止”的单元格(cell)之后,cell.Row 就是该单元格所在的行,cell.Column 即为该单元格的列。有了第一个数据单元格的行与列,我们就可以遍历这个销售报表,根据图例来填色了。 通过 Find 找到的 cell 在 姓名 列,cell.Column + 1 则是 区域列,Cells(row, col) 则是 区域 列的第一个数据单元格(值为“华东”)。 我们这里用到的循环语句是 Do While ... Loop 结构。这个结构的一般形式是: 这个循环的执行流程是:只要 condition 为 True,则执行其中的 statements。注意:其中的 statements 都位于 [ ] 中,说明 Do While ... Loop 可以没有要执行的语句,最极端的死循环语句为: 这个循环语句什么也不干,只是一味地循环——死循环! 回到我们的例子。表达式 Cells(row, col).Value <> "" 的意思是:检查单元格的值是否为空,如果不为空,就一直循环。 在循环体中,我们使用昨天学过的 Select Case 语句来检查单元格的具体值,根据单元格的值设置它的背景色。 下面的赋值语句用来控制循环步进,一次一行,直到空白行,此时 单元格的值为空,Cells(row, col).Value <> "" 条件变为 False,退出循环。 完整的代码如下图所示: 
图2 完整的示例代码 Do While 循环有一个中途退出机制,那就是 Exit Do 语句。我们可以设置一个条件,在循环过程中检测这个条件,如果条件满足,则执行 Exit Do 语句退出 Do While 循环。利用这个退出机制重写上面的 Do While 循环,如下: 这段代码中,If v = "" Then Exit Do 就成了结束循环的出口。 与确定初始值和终止值的区间循环的 For 语句不同,Do While 语句是根据条件测试结果来进行循环的。如果条件测试一开始就不为 True,则 Do While 循环也就不会执行。但如果条件测试一直为 True,那么 Do While 就会一直循环下去。所以,在循环体中一定要有改变条件测试结果的语句,才能确保 Do While 循环能够终止。如上面代码中的 row = row + 1,这是确保 Do While 循环终止的语句。 这段示例代码还是有潜在风险的:如果单元格中一直有值怎么办? 相关阅读 Excel VBA 编程基础 -- 语句(八)- 循环语句
![]() | ![]() |
Dim cell AsRangeSet cell = Cells.Find(What := "奉止", LookIn := xlValues)
Dim rowAsIntegerDim col AsIntegerrow= cell.Rowcol = cell.Column +1Do While Cells(row, col).Value<> ""SelectCase Cells(row, col).ValueCase "东北"cell.Interior.Color = RGB(166, 166, 166)Case "西北"...EndSelectrow=row+1Loop
Do While condition[ statements ][ Exit Do ][ statements ]Loop
DoWhile TrueLoop

...v = Cells(row, col).ValueDo While TrueIf v = "" Then Exit DoSelectCase vCase "东北"Cells(row, col).Interior.Color = RGB(162, 162, 162)...EndSelectrow=row+1v = Cells(row, col).ValueLoop
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。

