Как объяснено в комментариях, когда вы устанавливаете диапазон в значение, вы создаете 2-мерный массив, который Match
не будет поддерживать.Вместо этого перепишите ваш код следующим образом:
Dim ListNameArr As Range, LookupRow As Long, ListNameValue As String
ListNameValue = "ListABC"
Set ListNameArr = wsData.Range("DataListName")
LookupRow = Application.WorksheetFunction.Match(ListNameValue, ListNameArr, 0)
Вот как вы можете использовать Find
для столбца C и вернуть строку.Надеемся, что вы можете настроить при необходимости, если вы хотите изменить диапазон поиска.
LookupRow = ListNameArr.Cells.Find(What:=ListNameValue, _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False).Row
Вот еще несколько примеров использования функции поиска, которые могут оказаться полезными:
Sub Find_Example_WithLoop()
Dim CL As Range, FirstFoundAddress As String
Dim WS As Worksheet: Set WS = ActiveSheet
'FIND SYNTAX By PGCodeRider
'LOOKIN: xlFormulas , xlValues , or xlNotes
'LookAT: xlWhole or XlPart
'SearchOrder: xlByRows or xlByColumns
'SearchDirection: xlNext or xlPrevious
'MatchCase: True or False
'FindNext - Continues a search that was begun with the Find method. Finds the next cell that matches those same conditions.
' Find first instance on sheet
Set CL = WS.Cells.Find(What:="BOOOOM", _
After:=WS.Cells(1, 1), _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not CL Is Nothing Then
' if found, remember location, else ends if-statement
FirstFoundAddress = CL.Address
Do
'DO SOMETHING!!
' find next instance
Set CL = WS.Cells.FindNext(After:=CL)
' repeat until finds original cell
Loop Until FirstFoundAddress = CL.Address
End If
Next
End Sub
Вот пример соответствия, используемого с методом для обработки ошибок, если ничего не найдено:
Sub matchExample()
Dim text2match As String: text2match = "matchME"
Dim rng2Match As Range: Set rng2Match = Range("A:A")
'should return an integer
On Error GoTo notGOOD
MsgBox Application.WorksheetFunction.Match(text2match, rng2Match, 0)
On Error GoTo 0
Exit Sub
notGOOD:
MsgBox "Couldn't find " & text2match
End Sub