#arrays #excel #vba #ms-access #search
#массивы #excel #vba #ms-access #Поиск
Вопрос:
Мне нужен поиск в массиве
Sub f()
Dim myArray As Variant
myArray = Worksheets("QQ").Range("D:F")
Dim searchTerm As String
searchTerm = "927614*"
'Check if a value exists in the Array
If UBound(Filter(myArray, searchTerm)) >= 0 And searchTerm <> "" Then
MsgBox "Your string match value from F column is " amp; myArray(Application.Match(searchTerm, myArray, False),3)
Else
MsgBox ("Search Term could NOT be located in the Array")
End If
End Sub
Но я получаю несоответствие типа ошибки. Итак, как найти значение с помощью * в массиве?
Комментарии:
1. Вы создаете ДВУМЕРНЫЙ массив, фильтр принимает только ОДНОМЕРНЫЙ массив. Если вы хотите выполнить поиск по одному значению, вы можете использовать что-то вроде: Worksheets («QQ»). Диапазон («D: F»).найти («927614 *», lookin:= xlValues). строка в конечном итоге FindNext …
2. но поиск происходит очень медленно, так как мне нужен поиск 10000 значений поискового термина
3. одномерный массив также выдает ошибку
4. Как вы создали одномерный массив? Вы также можете использовать VLOOKUP для каждого столбца (3) и после прочитать это в VBA или ответ ниже…
Ответ №1:
Просто перебирайте массив и используйте Like
.
Непроверенный код:
Dim matchFound As Boolean
matchFound = False
For i = 1 To UBound(myArray, 1)
For j = 1 To UBound(myArray, 2)
If myArray(i, j) Like searchTerm Then
MsgBox "Found match at (" amp; i amp; "," amp; j amp; ") : " amp; myArray(i, j)
matchFound = True
Exit For
End If
Next j
If matchFound Then Exit For
Next i
If Not matchFound Then MsgBox "No match found."