Excel 用vba编写VLOOKUP函数
我试图在vba代码中使用VLOOKUP函数在表格数组中的电子表格上查找值。我不知道如何正确地写 以下是正常的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
=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