Я не уверен, где именно вы сидите на решении этого, поскольку похоже, что вопрос со временем изменился. Исходя из того, что я понимаю, вопрос должен быть, вы хотите найти все строки в столбце A, соответствующие вашему поисковому запросу, а затем ТОЛЬКО искать эти строки в столбце B для другого поискового запроса. Так, например:
A B
Apple Cobbler
Cherry Cobbler
Peach Pie
Apple Pie
Apple iPad
Если 2 условия поиска были «Apple» и «пирог», он будет возвращать Row 4.
Я бы сделать это с помощью объекта Collection.
Dim myCol As New Collection
Dim r As Integer
Dim FirstSearchTerm As String
Dim SecondSearchTerm As String
For r = 1 To Sheet1.UsedRange.Rows.Count
If Sheet1.Cells(r, 1) = FirstSearchTerm Then
myCol.Add r, Sheet1.Cells(r, 2)
End If
Next
MsgBox myCol.Item(SecondSearchTerm) 'Returns 4
Конечно, это также предполагает, что Apple Pie не появляется дважды. Например:
A B
Apple Cobbler
Cherry Cobbler
Peach Pie
Apple Pie
Apple iPad
Apple Pie
Нарушение этого кода.
Edit: Ответ на комментарий
Итак, теперь вы хотите найти что-то вроде этого?
A B C D
Apple Cobbler Joe Blow
Cherry Cobbler Joe DiMaggio
Peach Pie Sally Sparrow
Apple Pie Jane Goodall
Apple iPad Ivan Terrible
Apple Pie Sally Sparrow
Apple Pie Jane Seymour
И быть в состоянии вернуть строку 4, если у вас есть 4 отдельные поисковые термины «Яблоко», «Pie», «Джейн», и «Гудолл»?
На данный момент вы можете подумать о реструктуризации ваших данных! J/K: D
Итак, вместо добавления значения ячейки в объект Collection мы добавим строку в объект Collection. Затем мы должны продолжать цикл через нашу коллекцию, пока у нас не будет Highlander (может быть только один!). По сути, мы продолжаем манипулировать назад и четвертый отсеивать плохие данные, пока мы не останемся только с хорошим. Я уверен, что есть способ сделать это рекурсивно, но его 5 часов.
Dim myFirstCol As New Collection
Dim mySecCol As New Collection
Dim x As Integer 'Switching to x so its not as confusing
Dim FirstSearchTerm As String
Dim SecondSearchTerm As String
Dim ThirdTerm As String
Dim FourthTerm As String
FirstSearchTerm = "Apple"
SecondSearchTerm = "Pie"
ThirdTerm = "Jane"
FourthTerm = "Seymour"
'First, get all rows matching our first term
For x = 1 To Sheet1.UsedRange.Rows.Count
If Sheet1.Cells(x, 1) = FirstSearchTerm Then
myFirstCol.Add x 'Just save the row number
End If
Next
'now loop through that collection search for our second term
'Item(x) contains the row number for rows that matched our search terms
For x = 1 To myFirstCol.Count
If Sheet1.Cells(myFirstCol.Item(x), 2) = SecondSearchTerm Then
mySecCol.Add myFirstCol.Item(x)
End If
Next
'And loop through again for the 3rd term
Set myFirstCol = New Collection 'Reuse it
For x = 1 To mySecCol.Count
If Sheet1.Cells(mySecCol.Item(x), 3) = ThirdTerm Then
myFirstCol.Add mySecCol.Item(x)
End If
Next
'And fourth
Set mySecCol = New Collection 'Reuse it
For x = 1 To myFirstCol.Count
If Sheet1.Cells(myFirstCol.Item(x), 4) = FourthTerm Then
mySecCol.Add myFirstCol.Item(x)
End If
Next
msgbox mySecCol.Item(1) 'Which is the row number matching all our terms
Это хороший вопрос, но ответ не очевиден. Я рекомендую вам прочитать это: http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/ У меня немного отличающаяся версия, сильно вдохновленная Сидом, которую я могу вам дать , но я не уверен, понял ли я первое предложение вашего вопроса. Если вы это разъясните, это поможет! (О порядке, в котором вы хотите найти) –
@DavidGM эта ссылка очень помогла. Я внес соответствующее изменение в свой код, но теперь я застрял на чем-то другом. Было бы проще связаться с вами через прямое сообщение или мне просто переписать мой пост здесь? – user3242614
Переделайте, возможно, кто-то еще может вам помочь! Если это не связано, тогда задайте новый вопрос. –