0

是否可以在 range.find 中放置和 OR 函数?我有这个功能,但我希望它寻找两个值中的任何一个

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 时,Excel 对我很生气

4

3 回答 3

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
于 2013-07-26T21:27:36.630 回答
1

Range.Find方法模拟与您在 Excel 中键入 CTRL+F 时相同的窗口。由于您不能在该窗口中同时搜索 2+ 值,我不相信您可以通过 VBA 同时搜索 2+ 值。不幸的是,我认为您必须执行两次该方法。

如果我错了,我很想知道该怎么做;它会很有用。所以请随时证明我错了:)

根据我的测试,该Range.Find方法不支持数组或超过 1 个单元格的范围。所以这些都出来了。

此外,尝试使用OR将无法正常工作,因为OR检查 TRUE/FALSE 并返回 TRUE/FALSE。

于 2013-07-26T20:36:16.487 回答
0

您需要遍历范围内的所有单元格并使用该Like函数或InStrIf语句中使用Or.

于 2014-09-23T13:02:26.877 回答