Excel中的VLookup宏

时间:2015-04-04 15:11:52

标签: excel excel-vba vba

我有一个带有两个工作表的excel工作簿。工作表A中包含多个名称,每个名称位于不同的列中,而工作表B包含工作表A中的相同名称和包含日期的第二列。 例如:

Worksheet A.       Worksheet B.

Name.              Name.     Dates
Sean               Jake      11/13/15
Jake               Sean      10/11/14
Tom.               Chris     12/12/15

我要做的是设置一个调用VLookup的宏,并将工作表A中名称列中的名称作为工作表B上的搜索参数传递。一旦在工作表B上找到该名称,它就会返回日期。目前,我通过在工作表A的一列中对以下vlookup进行硬编码来手动获取此数据。

=VLOOKUP(A2,'Worksheet B'!A:B,2,FALSE)

非常感谢任何建议和帮助。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以在VBA中使用工作表函数。这个宏通过将它们发现的值返回到适当的单元格来利用它们。

Sub auto_VLOOKUP()
    Dim rw As Long, wsB As Worksheet
    Set wsB = Worksheets("Worksheet B")
    With Worksheets("Worksheet A")
        For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If CBool(Application.CountIf(wsB.Columns(1), .Cells(rw, 1).Value)) Then
                ' VLOOKUP is typically used to return data from the right of the lookup column
                .Cells(rw, 2) = Application.VLookup(.Cells(rw, 1).Value, wsB.Columns("A:B"), 2, False)
                ' INDEX/MATCH function pairs are used to wider scope
                .Cells(rw, 3) = Application.Index(wsB.Columns("N"), Application.Match(.Cells(rw, 1).Value, wsB.Columns("A"), 0))
            End If
        Next rw
        .Cells(2, 2).Resize(rw - 2, 1).NumberFormat = "m/d/yyyy"
    End With
    Set wsB = Nothing
End Sub

您必须编辑工作表名称并调整与示例数据中提供的列不同的任何列。

答案 1 :(得分:0)

这不是vlookup,但它会得到你想要的结果。

Sub Button1_Click()
    Dim ws As Worksheet, sh As Worksheet
    Dim Rws As Long, Rng As Range
    Dim c As Range, FndC As Range, shRng As Range


    Set ws = Sheets("Sheet1")
    Set sh = Sheets("Sheet2")
    Set shRng = sh.Range("A:A").SpecialCells(xlCellTypeConstants, 23)
    With ws
        Rws = .Cells(Rows.Count, "A").End(xlUp).Row
        Set Rng = .Range(.Cells(1, 1), .Cells(Rws, 1))
    End With
    For Each c In Rng.Cells

        Set FndC = shRng.Find(what:=c, lookat:=xlWhole)

        If Not FndC Is Nothing Then
            c.Offset(0, 1) = FndC.Offset(0, 1)
        Else: c.Offset(0, 1) = "Not Found"
            Exit Sub
        End If
    Next c
End Sub