是否可以在一个range.find中放置和OR功能?我有这个功能,但我希望它能找到2个值中的任何一个
With Worksheets("Term").Range("A:A")
Set rng = .Find(What:=Worksheets("Term and Discipline").Range("K7"), _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
Application.Goto rng, True
End With
在你提供它所寻找的内容的行中我试图输入一个OR语句但是当我尝试运行它时Excel会生我的气氛
答案 0 :(得分:3)
我认为最接近的等价物是并行(有效)执行搜索并使用MIN()
选择找到的第一个单元格。
Sub FindingNemor()
Dim rngFoo As Range
Dim rngBar As Range
Set rngFoo = Cells.Find(What:="foo", After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
Set rngBar = Cells.Find(What:="bar", After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
If Not rngFoo Is Nothing And Not rngBar Is Nothing Then
Range("A1").Cells(Application.Min(rngFoo.Row, rngBar.Row)).Select
End If
End Sub
如果只有rngFoo或rngBar中的一个是Nothing,则需要额外的检查。
已添加检查Nothing
- ness会让它变得更加混乱:
Sub FindingNemor()
Dim rngFoo As Range
Dim rngBar As Range
Set rngFoo = Cells.Find(What:="foo", After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
Set rngBar = Cells.Find(What:="bar", After:=Range("A1"), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
If Not rngFoo Is Nothing And Not rngBar Is Nothing Then
Range("A1").Cells(Application.Min(rngFoo.Row, rngBar.Row)).Select
ElseIf rngFoo Is Nothing Then
If rngBar Is Nothing Then
MsgBox "Neither found."
Else
Range("A1").Cells(rngBar.Row).Select
End If
Else
Range("A1").Cells(rngFoo.Row).Select
End If
End Sub
答案 1 :(得分:1)
Range.Find
方法模拟与在Excel中键入CTRL + F时相同的窗口。由于您无法在该窗口中同时搜索2+值,因此我认为您不能通过VBA同时搜索2+值。不幸的是,我认为你必须做两次这个方法。
如果我错了,我很想知道如何做到这一点;它会非常有用。所以请随意证明我错了:)
从我的测试来看,Range.Find
方法不支持数组或超过1个单元格的范围。所以那些都出来了。
此外,尝试使用OR
将无法正常工作,因为OR
检查为TRUE / FALSE并返回TRUE / FALSE。
答案 2 :(得分:0)
您需要循环浏览范围内的所有单元格,并使用Like
函数或InStr
语句中的If
Or.