Написание функции VLOOKUP в VBA

Я пытаюсь найти значение в электронной таблице в массиве таблиц, используя функцию VLOOKUP в моем коде VBA. Я не знаю, как правильно написать.

Вот обычная формула VLOOKUP со всеми ссылками:

=VLOOKUP(DATA!AN2,DATA!AA9:AF20,5,FALSE)

6 ответов

Решение

Ты пытался:

Dim result As String 
Dim sheet As Worksheet 
Set sheet = ActiveWorkbook.Sheets("Data") 
result = Application.WorksheetFunction.VLookup(sheet.Range("AN2"), sheet.Range("AA9:AF20"), 5, False)

Как насчет просто использовать:

result = [VLOOKUP(DATA!AN2, DATA!AA9:AF20, 5, FALSE)]

Обратите внимание на [ и ].

Пожалуйста, найдите код ниже для Vlookup:

Function vlookupVBA(lookupValue, rangeString, colOffset)
vlookupVBA = "#N/A"
On Error Resume Next
Dim table_lookup As range
Set table_lookup = range(rangeString)
vlookupVBA = Application.WorksheetFunction.vlookup(lookupValue, table_lookup, colOffset, False)
End Function

Как предложил Тим Уильямс, используя 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
        Public Function VLOOKUP1(ByVal lookup_value As String, ByVal table_array As Range, ByVal col_index_num As Integer) As String
        Dim i As Long

        For i = 1 To table_array.Rows.Count
            If lookup_value = table_array.Cells(table_array.Row + i - 1, 1) Then
                VLOOKUP1 = table_array.Cells(table_array.Row + i - 1, col_index_num)
                Exit For
            End If
        Next i

        End Function
Dim found As Integer
    found = 0

    Dim vTest As Variant

    vTest = Application.VLookup(TextBox1.Value, _
    Worksheets("Sheet3").Range("A2:A55"), 1, False)

If IsError(vTest) Then
    found = 0
    MsgBox ("Type Mismatch")
    TextBox1.SetFocus
    Cancel = True
    Exit Sub
Else

    TextBox2.Value = Application.VLookup(TextBox1.Value, _
    Worksheets("Sheet3").Range("A2:B55"), 2, False)
    found = 1
    End If
Другие вопросы по тегам