Excel 试图通过VBA代码创建Vlookup公式

Excel 试图通过VBA代码创建Vlookup公式,excel,vba,Excel,Vba,我已经创建了一个代码,通过VBA使用Vlookup公式,但我被困在如何修复它。查找一个范围非常简单,但我不知道该怎么做。任何帮助都将不胜感激 Sub Example() Dim value As Range Dim table As Range Dim col_index As Range Dim FinalResult As Variant lRow = Sheet2.Cells(Rows.Count, 2).End(xlUp).Row Set value = Sheet2.Range(&

我已经创建了一个代码,通过VBA使用Vlookup公式,但我被困在如何修复它。查找一个范围非常简单,但我不知道该怎么做。任何帮助都将不胜感激

Sub Example()

Dim value As Range
Dim table As Range
Dim col_index As Range
Dim FinalResult As Variant

lRow = Sheet2.Cells(Rows.Count, 2).End(xlUp).Row
Set value = Sheet2.Range("A2")
Set table = Sheet1.Range("A2:D15")
Set col_index = Sheet2.Range("D2:D" & lRow)

FinalResult = Application.WorksheetFunction.VLookup(value, table, col_index, False)

End Sub
这是一个非常有效的公式

=VLOOKUP(Sheet2!A2,Sheet1!$A$2:$D$15,4,FALSE)
编辑

Sub Example()
Dim value As Range
Dim table As Range
Dim col_index As Range
Dim FinalResult As Variant
lRow = Sheet2.Cells(Rows.Count, 2).End(xlUp).Row
Set value = Sheet2.Range("A2")
Set table = Sheet1.Range("A2:D15")
FinalResult = Application.WorksheetFunction.VLookup(value, table, 4, False)
End Sub
已编辑但仍不工作

Sub Example()
Dim rng As Range
Dim table As Range
Dim col_index As Range
Dim FinalResult As Variant
lRow = Sheet2.Cells(Rows.Count, 2).End(xlUp).Row
Set rng = Sheet2.Range("A2")
Set table = Sheet1.Range("A2:D15")
FinalResult = Application.WorksheetFunction.VLookup(rng, table, 4, False)
rng.value = FinalResult.value
End Sub

假设你有两张桌子

  • 在“
    Sheet1
    ”中显示您的数据表
  • 您希望得到结果的输出表(“
    Sheet2
    ”)
  • 要从数据表(“
    Sheet1
    ”)中获取国家,您可以使用公式(我使用“;”作为分隔符,就像我使用北欧版excel一样):

    因此,在VBA中,这将如下所示:

    Sub Example()
    
    Dim tbl As Range
    Dim col_index As Range
    Dim Lookup_val As Long 'if you use a numerical number as in my example
    'Dim Lookup_val As String 'if you use a text or words + numbers as lookup criteria
    Dim FinalResult As Variant 'I would consider to use string or long... more specific declaration if you know the datatype to be retrieved.
    
    lRow = Sheet2.Cells(Rows.Count, "B").End(xlUp).Row 'End row in the column we should WRTIE the answer from the vlookup function
    EndRow = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row 'End row of the range we would like to MATCH values
    Set tbl = Sheet1.Range("A2:D15") 'Data table range
    
    For i = 2 To EndRow 'What range we should loop through. We want to loop from row 2 until the last row in Column A for Sheet2
        Lookup_val = Sheet2.Cells(i, "A").value 'Value that should be use as lookup value in the "vlookup function"
        FinalResult = Application.WorksheetFunction.VLookup(Lookup_val, tbl, 4, False) 'Perform the vlookup function
        Sheet2.Cells(i, "B").value = FinalResult 'write the result of the vlookup finding
    Next i 'check next row (go to next lookup value)
    End Sub
    

    如果vlookup函数不能匹配表中的值,它将给您一个错误。我通常通过在错误处理行中包装函数来修复它,并且您需要清除每个迭代的
    FinalResult
    值,即:

    For i = 2 To EndRow
        FinalResult = "" 'To clear previous value from loop iteration
        Lookup_val = Sheet2.Cells(i, "A").value
        On Error Resume Next 'ignore error if no value found
        FinalResult = Application.WorksheetFunction.VLookup(Lookup_val, tbl, 4, False)
        On Error GoTo 0 'continue loop anyway
        Sheet2.Cells(i, "B").value = FinalResult
    Next i
    


    列索引是一个数字,而不是一个范围。我相信你想要的是
    4
    而不是
    Sheet2.Range(“D2:D”&lRow)
    确切地说是@Scott Craner,但它在编辑后仍然不起作用@Scott Craner请不要将
    value
    用作变量名。使用其他名称,例如
    rng
    。但是您不使用
    FinalResult
    执行任何操作。你想用它做什么?你对FinalResult什么都不做,结果它被存储在内存中,直到子文件结束,然后它被删除。你需要把价值放在某个地方。谢谢你,你真的很了不起。非常感谢你,我花了将近两个小时来寻找一种方法,但最终你的回答非常棒。非常感谢你的帮助。非常感谢!很高兴这个直观的例子能给你更多的上下文,让你有方向,这样你就能达到你想要的结果。如果你还有其他问题,请告诉我。快乐编码:)!我完全理解你所说的,我也有我的缺点。再次感谢你。我有时也会陷入困境^^^^周围有人会不遗余力地解释:)真是太好了。当然!也谢谢你!=)。是的,你是对的。但我总是在这里发布来寻求帮助,否则我经常花上几天的时间来寻找解决方案。我是一个人在excel上工作,所以这就是为什么没有人能在这个论坛上帮助其他人。谢谢
    For i = 2 To EndRow
        FinalResult = "" 'To clear previous value from loop iteration
        Lookup_val = Sheet2.Cells(i, "A").value
        On Error Resume Next 'ignore error if no value found
        FinalResult = Application.WorksheetFunction.VLookup(Lookup_val, tbl, 4, False)
        On Error GoTo 0 'continue loop anyway
        Sheet2.Cells(i, "B").value = FinalResult
    Next i