Поиск Excel vba в массиве

#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."