应用场景
查找符合多个条件的单元格,并复制出来
知识要点
1: Rng.find \ findnext Range.Find 方法 在区域中查找特定信息。
2:Do Loop While 查找 知道附合某个条件时终止
3:sheets.add 新建工作表
Sub 一次罗列表中三省员工的姓名() 'find循环法
Dim rng As Range, tngtemp As Range, firstaddress As String
Dim i As Byte, findcell As Range, shtname As String, sht As Worksheet
'将待查找的目标区域C2列到C列最后一个非空单元格赋予对象变量
Set rng = Range([c2], Cells(Rows.Count, "C").End(xlUp))
'将四川、湖南、湖北省转化为数组,然后循环数组每个元素,数组的基数默认为0,从0递增
For i = 0 To UBound(Array("四川省", "湖南省", "湖北省"))
'开始查找数据,按值精确查找,不区分大小写
Set rngtemp = rng.Find(what:=Array("四川省", "湖南省", "湖北省")(i), LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
If Not rngtemp Is Nothing Then '如果变量rngtemp不再是nothing,即找到目标值
firseaddress = rngtemp.Address '记录第一个目标的地址
'只要找到单元格的地址不等于刚刚记录的地址,就一致循环下去
'如果变量firstcell未初始化则将查找结果赋予它,否则合并变量到查找到的单元格
Do
If findcell Is Nothing Then Set findcell = rngtemp Else Set findcell = Union(findcell, rngtemp)
Set rngtemp = rng.FindNext(rngtemp)
Loop While rngtemp.Address = firstaddress
End If
Next i
If Not findcell Is Nothing Then '如果变量findcell已经初始化,就选择所有目标的正行,否则提升退出程序
findcell.EntireRow.Select
Else
MsgBox "无符合条件的数据"
Exit Sub
End If
On Error Resume Next
shtname = ActiveSheet.Name '记录当前的工作表名称
Set sht = Sheets("查询结果")
If err.Number <> 0 Then
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "查询结果"
Else
Sheets(Sheets.Count).Cells.Clear
End If
Sheets(shtname).Select
Selection.Copy Sheets(Sheets.Count).[a1]
End Sub