Excel中的VLookup宏

Excel中的VLookup宏,excel,vba,Excel,Vba,我有一个excel工作簿和两张工作表。工作表A中有几个名称,每个名称在不同的列中,工作表B包含与工作表A中相同的名称,第二列包含日期。 例如: 我试图做的是设置一个宏,该宏调用VLookup,并将工作表a中“名称”列中的名称作为搜索参数传递给工作表B。一旦在工作表B中找到名称,它将返回日期。目前,我正在通过在工作表a的一列中硬编码以下vlookup来手动提取这些数据 =VLOOKUP(A2,'Worksheet B'!A:B,2,FALSE) 非常感谢您的任何建议和帮助 谢谢。您可以在VBA中

我有一个excel工作簿和两张工作表。工作表A中有几个名称,每个名称在不同的列中,工作表B包含与工作表A中相同的名称,第二列包含日期。 例如:

我试图做的是设置一个宏,该宏调用VLookup,并将工作表a中“名称”列中的名称作为搜索参数传递给工作表B。一旦在工作表B中找到名称,它将返回日期。目前,我正在通过在工作表a的一列中硬编码以下vlookup来手动提取这些数据

=VLOOKUP(A2,'Worksheet B'!A:B,2,FALSE)
非常感谢您的任何建议和帮助


谢谢。

您可以在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

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

这不是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

谢谢你们两位的帮助!下面的代码非常有效。我唯一的问题是,如果要返回值的单元格位于工作表的另一端,该怎么办。在下面的代码中,日期将在第2列中返回,但是如果我希望在第14列中返回该值呢?当返回值位于查找列的右侧时使用。要从查找列左侧的列返回值,请使用与成对的。请参阅下面的“我的编辑”以获取示例。再次感谢您为我提供了一个有效的解决方案!这很好用。
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