Написание функции VLOOKUP в vba - PullRequest
27 голосов
/ 06 апреля 2011

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

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

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

Ответы [ 6 ]

44 голосов
/ 06 апреля 2011

Вы пробовали:

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)
17 голосов
/ 06 апреля 2011

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

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

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

6 голосов
/ 20 февраля 2013

Пожалуйста, найдите код ниже для 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
3 голосов
/ 16 мая 2018

Как Тим Уильямс предложил , использование 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
0 голосов
/ 08 декабря 2016
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
0 голосов
/ 31 октября 2016
        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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...