VBA学习笔记3:循环语句
学习资源:《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停止
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)
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
x = x + 1
'如果单元格的值加1不等于它下一个单元额的值,就标记该单元格为黄色,并终止循环。若没有断点,则继续运行循环直至遇到空单元格。
If Cells(x + 1, 1) <> Cells(x, 1) + 1 Then