两个条件一个为false就运行_VBA 实践(3)——查找第一个数据(逻辑变量控制流程)...

65672ac007ab050737e67a9ec60289aa.png

VBA 实践(3)——查找第一个数据(逻辑变量控制流程)

昨天学习了杨洋老师的《全民一起VBA》提高篇的第6课,对其中所提到的查找第一个数据的例子进行了思考与探索。

下面自己找的一份数据,放在了工作簿的sheet3里面。

885a0f1497b61baf8a622a61e7c97037.png

仿照视频中的例子,查找状态列中第一个“申请中”数据,代码如下。代码主要就是一个do while循环,关键点是:逻辑变量充当开关,在找到第一个数据后,及时退出循环,不再往下查找,节省资源。

Sub 找到第一个数据()
Dim zhao As Boolean, i As Long, works As Worksheet
Set works = Worksheets(3): zhao = False: i = 2:
Do While Not zhao And works.Cells(i, 1) <> ""    '没有找到且数据不为空时进入查找循环
    If InStr(works.Cells(i, 4), "申请中") <> 0 Then
        works.Range(Cells(i, 1), Cells(i, 4)).Interior.Color = vbGreen
        zhao = Not zhao  '找到了第一个数据,布尔变量取反,循环条件不成立,退出循环
    End If
    i = i + 1
Loop
End Sub

进一步的思考与探索

如何查找第二个数据并涂色?前两个数据呢?倒数第二个数据呢?

对于查找第二个数据和前两个数据,只要增加一个计数器,再调整一下退出循环的时机,应该就可以完成;对于查找倒数第二个数据,在增加计数器的基础上,进行逆序查找就可以完成。

查找第二个数据

代码修改如下:

Sub 找到第二个数据()
Dim zhao As Boolean, i As Long, n As Long, works As Worksheet
Set works = Worksheets(3): zhao = False: i = 2: n = 0
Do While Not zhao And works.Cells(i, 1) <> ""   '没有找到且数据不为空时进入查找循环

    '计数器
    If InStr(works.Cells(i, 4), "申请中") <> 0 Then
        n = n + 1
    End If
    '计数器
 
    If n = 2 Then
        works.Range(Cells(i, 1), Cells(i, 4)).Interior.Color = vbGreen
        zhao = Not zhao  '找到了第二个数据,布尔变量取反,循环条件不成立,退出循环
    End If
    i = i + 1
Loop
End Sub

运行结果如下:

ac0323ee70ea1620278b0804670c4d8c.png

查找前两个数据

代码修改如下:

Sub 找到前二个数据()
Dim zhao As Boolean, i As Long, n As Long, works As Worksheet
Set works = Worksheets(3): zhao = False: i = 2: n = 0
Do While Not zhao And works.Cells(i, 1) <> ""   '没有找到且数据不为空时进入查找循环

    '计数器
    If InStr(works.Cells(i, 4), "申请中") <> 0 Then
        works.Range(Cells(i, 1), Cells(i, 4)).Interior.Color = vbGreen
        n = n + 1
    End If
    '计数器
 
    If n = 2 Then
        zhao = Not zhao   '找到了前两个数据,布尔变量取反,循环条件不成立,退出循环
    End If
    i = i + 1
Loop
End Sub

运行结果如下:

b000a5479623cd1e1a655f832e20c504.png

查找倒数第二个数据

修改代码如下:

Sub 找到倒数第二个数据()
Dim zhao As Boolean, i As Long, n As Long, works As Worksheet
Set works = Worksheets(3): zhao = False: n = 0
i = 11   '最后一个数据的行号
Do While Not zhao And works.Cells(i, 1) <> ""  '没有找到且数据不为空时进入查找循环
 
    '计数器
    If InStr(works.Cells(i, 4), "申请中") <> 0 Then
        n = n + 1
    End If
    '计数器
 
    If n = 2 Then
        works.Range(Cells(i, 1), Cells(i, 4)).Interior.Color = vbGreen
        zhao = Not zhao   '找到了倒数第二个数据,布尔变量取反,循环条件不成立,退出循环
    End If
 
    i = i - 1   '逆序步进
Loop
End Sub

运行结果如下:

ac0323ee70ea1620278b0804670c4d8c.png

以上是我学习《全民一起VBA》提高篇第6课的一些思考和探索。

在使用VBA处理数据库时,通常会通过Recordset对象来遍历数据。如果你想在遍历过程中将上一行的某一数据赋值给变量,并且在使用`rs.MoveNext`移动到下一条记录时保持这个变量的值不变,你需要在`rs.MoveNext`之前就将数据赋值给变量。 下面是一个简单的例子,演示如何实现这个需求: ```vba Dim currentData As Variant Dim previousData As Variant ' 假设rs是已经打开的Recordset对象 rs.MoveNext ' 移动到下一条记录 If Not rs.EOF Then ' 先将当前行的数据赋给变量previousData previousData = rs.Fields("你需要的字段名").Value End If ' 然后继续遍历你的数据 While Not rs.EOF ' 在这里处理你的数据... ' 每次循环结束前,将上一行的数据赋给变量currentData currentData = previousData ' 然后移动到下一行 rs.MoveNext ' 更新previousData为当前行的数据,这样currentData就不会变动了 If Not rs.EOF Then previousData = rs.Fields("你需要的字段名").Value End If Wend ' 循环结束后,currentData就是最后一行的数据,previousData是倒数第二行的数据 ``` 这段代码中,我们使用了两个变量`currentData`和`previousData`来分别存储当前行和上一行的数据。在每次循环结束时,将`previousData`赋值给`currentData`,然后移动到下一条记录。这样,即使下一次循环`rs.MoveNext`,`currentData`的值也不会改变,它仍然保存着上一次循环时的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值