学习资源:《Excel VBA从入门到进阶》第四讲 循环语句 by蓝色幻想
一、语句句式
1.For … Next 语句
For 循环变量=初值 to 终值 step 步长
…
Next 循环变量
2.For Each ... in ...语句
For Each 循环变量 in 变量区间
…
Next 循环变量
3.Do ... Loop 语句
Do
...
Loop 逻辑表达式(停止循环的条件)
4.Do While ... Loop 语句
Do While 逻辑表达式(开始循环的条件)
...
Loop
5. offset函数
6. 单元格的表示方法
range("A1") 或 cells(行,列)
二、案例分析:
1.单元格连续
根据单价和数量求出金额:
解题思路:
D2=B2*C2
D3=B3*C3
D4=B4*C4
...
D18=B18*C18
非常有规律的公式,符合循环语句的使用。
① For … Next 语句
Option Explicit
Sub 计算金额1()
'定义变量x为整数,变量默认值是整数,可省略不写
Dim x As Integer
'让x从2到18每循环一次递增1,自动默认值就是step 1,可省略不写
For x = 2 To 18 Step 1
Range("D" & x) = Range("B" & x) * Range("C" & x)
Next x
End Sub
② For Each ... in ...语句
Sub 计算金额2()
Dim r As Range
'定义r为单元格
'让每个在D2:D18里面的单元格的值,等于它的左两格和左一格相乘
For Each r In Range("D2:D18")
r = r.Offset(0, -1) * r.Offset(0, -2)
Next r
End Sub
③ Do ... Loop 语句
Sub 计算金额3()
Dim x
x = 1
'每次循环,x加1,直至x超过18停止
Do
x = x + 1
Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
Loop Until x = 18
End Sub
④ Do While ... Loop 语句
Sub 计算金额4()
Dim x
x = 1
'x不大于18,x加1,执行语句
Do While x < 18
x = x + 1
Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
Loop
End Sub
2.单元格不连续
解题思路:
单元格位置不连续,但依然有规律,在特定区域挑出空单元格。
不使用VBA的话,可以用定位批量选中并输入0。(按住Ctrl选中两块区域→Ctrl+G→定位条件→空值→输入0→Ctrl+Enter)
Sub 把空格填为0()
'定义rg为单元格
Dim rg As Range
'选中区域,判断其中的单元格值为空就填写0。
For Each rg In Range("B2:C8,F2:G6")
If rg = "" Then
rg = 0
End If
Next rg
End Sub
3. 找出断点(在循环条件结束前终止循环)
Sub 找出断点()
Dim x As Integer
x = 1
Do
x = x + 1
'如果单元格的值加1不等于它下一个单元额的值,就标记该单元格为黄色,并终止循环。若没有断点,则继续运行循环直至遇到空单元格。
If Cells(x + 1, 1) <> Cells(x, 1) + 1 Then
Cells(x, 1).Interior.Color = 65535
Exit Do
End If
Loop Until Cells(x, 1) = ""
End Sub
四. 小结
循环语句最怕遇到死循环,所以条件一定要设置好。
遇到死循环,可以按Ctrl+Pause强制停止运行。