Использование поиска и поиска в Excel по 2 строкам - PullRequest
0 голосов
/ 30 октября 2018

Мне нужна ваша помощь,

Можно ли искать в таблице Excel по 2 заданным значениям, а не по 1? похож на оператор "И"?

Вот что у меня есть, но я думаю, если вы ищете иголку в стоге сена:

Str = "apples" AND "oranges"

With Sheets(xSheet)

    Set foundCell = .Cells.Find(What:=Str, After:=.Cells(1, 1), _
                    LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
End With

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вот простая альтернатива цикла:

Sub ApplesAndOranges()
    Dim r As Range, fruits As Range
    Set fruits = Nothing
    For Each r In ActiveSheet.UsedRange
        v = r.Value
        If v <> "" Then
            If InStr(v, "apples") <> 0 And InStr(v, "oranges") <> 0 Then
                If fruits Is Nothing Then
                    Set fruits = r
                Else
                    Set fruits = Union(fruits, r)
                End If
            End If
        End If
    Next
    MsgBox fruits.Address(0, 0)
End Sub

enter image description here

Из примера видно, что он возвращает все ячейки, которые содержат обе подстроки.

0 голосов
/ 30 октября 2018

Код ниже возвращает желаемый результат:

Sub TestMe()

    Dim str As String: str = "apples*oranges"
    Dim foundCell As Range

    Dim options As Variant
    options = Array(str, Split(str, "*")(1) & "*" & Split(str, "*")(0))
    Dim myVar As Variant

    For Each myVar In options
        With Worksheets(1)
            Set foundCell = .Cells.Find(What:=myVar, After:=.Cells(1, 1), _
                            LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        End With            
        If Not foundCell Is Nothing Then Exit For        
    Next myVar

    If Not foundCell Is Nothing Then
        Debug.Print foundCell.Address
    End If

End Sub

У нас есть две разные строки, для которых необходимо выполнить печать: "apples*oranges" и "oranges*apples". Раскол и обратное сделано довольно примитивно:

options = Array(str, Split(str, "*")(1) & "*" & Split(str, "*")(0))

И затем, используя For Each Loop с ранним Exit For, .Find() ищет две строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...