VBA 实践(3)——查找第一个数据(逻辑变量控制流程)
昨天学习了杨洋老师的《全民一起VBA》提高篇的第6课,对其中所提到的查找第一个数据的例子进行了思考与探索。
下面自己找的一份数据,放在了工作簿的sheet3里面。
仿照视频中的例子,查找状态列中第一个“申请中”数据,代码如下。代码主要就是一个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
运行结果如下:
查找前两个数据
代码修改如下:
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
运行结果如下:
查找倒数第二个数据
修改代码如下:
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
运行结果如下:
以上是我学习《全民一起VBA》提高篇第6课的一些思考和探索。