在Range.Find VBA中使用Or函数

时间:2013-07-26 19:59:38

标签: excel vba excel-vba

是否可以在一个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会生我的气氛

3 个答案:

答案 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.