Excel 用vba编写VLOOKUP函数

Excel 用vba编写VLOOKUP函数,excel,vba,Excel,Vba,我试图在vba代码中使用VLOOKUP函数在表格数组中的电子表格上查找值。我不知道如何正确地写 以下是正常的VLOOKUP公式和所有参考: =VLOOKUP(DATA!AN2,DATA!AA9:AF20,5,FALSE) 您是否尝试过: Dim result As String Dim sheet As Worksheet Set sheet = ActiveWorkbook.Sheets("Data") result = Application.WorksheetFunction.VL

我试图在vba代码中使用VLOOKUP函数在表格数组中的电子表格上查找值。我不知道如何正确地写

以下是正常的VLOOKUP公式和所有参考:

=VLOOKUP(DATA!AN2,DATA!AA9:AF20,5,FALSE)
您是否尝试过:

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

以上信息基于此答案->如果您需要此语句的一部分是动态的,该怎么办?例如,AF20可以是AF99或AF10。通常,对于字符串,您可以使用类似于“VLOOKUP(DATA!AN2,DATA!AA9:AF”&lastrow&“5,FALSE)”的内容。使用方括号时,这似乎不起作用。@Noah我认为,如果你脑子里想的是动态的东西,那么接受的答案就是你所需要的。如果查找失败,它将抛出一个错误:但是如果你删除“WorksheetFunction”,它将不起作用,但是你可以使用IsError(结果)测试结果。不过,您需要将结果声明为变体。这对我来说非常有效,因为VLOOKUP问题困扰了我几个小时。这也适用于在其他工作表上查找,谢谢分享!
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
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