Как Тим Уильямс предложил , использование Application.VLookup
не выдаст ошибку, если значение поиска не найдено (в отличие от Application.WorksheetFunction.VLookup
).
Если вы хотите, чтобы поиск возвращал значение по умолчанию, когда ему не удается найти совпадение, и чтобы избежать жесткого кодирования номера столбца - эквивалент IFERROR(VLOOKUP(what, where, COLUMNS(where), FALSE), default)
в формулах, вы можете использовать следующую функцию:
Private Function VLookupVBA(what As Variant, lookupRng As Range, defaultValue As Variant) As Variant
Dim rv As Variant: rv = Application.VLookup(what, lookupRng, lookupRng.Columns.Count, False)
If IsError(rv) Then
VLookupVBA = defaultValue
Else
VLookupVBA = rv
End If
End Function
Public Sub UsageExample()
MsgBox VLookupVBA("ValueToFind", ThisWorkbook.Sheets("ReferenceSheet").Range("A:D"), "Not found!")
End Sub