for in range语句_VBA学习笔记3:循环语句

c825bacf88113616773eeaf5440e4b44.png

学习资源:《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函数

4daeaf4545cf75b648c0c25bcaf204ef.png

6. 单元格的表示方法

range("A1") 或 cells(行,列)

二、案例分析:

1.单元格连续

根据单价和数量求出金额:

3633bbc6329c103844f49d58bd72e6ee.png

解题思路:

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.单元格不连续

633af2ab6ec93b22ccd089883160061c.png

解题思路:

单元格位置不连续,但依然有规律,在特定区域挑出空单元格。

不使用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. 找出断点(在循环条件结束前终止循环)

c93fa4ef20f885b637f4afee0c8d4899.png
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强制停止运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值