在VBA上使用HLOOKUP导入数据

时间:2018-10-08 13:21:40

标签: excel vba excel-vba import vlookup

我正在尝试使用VBA将工作表中的某些数据传输到另一个工作表中,但是我被代码卡住了。基本上,在Sheet1中,我有以下几列来完成Sheet2中的数据:

       A    B   C        D      E        F
1   Month   ID  Country  Name   Surname  Email
2   
3
4

在Sheet2中,我有输入:

       A     B     C        D          E         F    G
1   Month    ID    Address  Telephone  Surname   Name Email
2   04-2018  2131  ***      ***        ***       ***  ***
3   04-2018  2133  ***      ***        ***       ***  ***
4   04-2018  2411  ***      ***        ***       ***  ***

在excel上,我将使用位于A2单元格中的以下函数:

=HLOOKUP(A$1,Sheet2!$A$1:$G$5,ROW(), FALSE)

效果很好。但是,在VBA上,以下函数报告错误:

Function hlookup()

Range("A2").Value = Application.hlookup(Range("A1"), Sheet2.Range("a1").End(xlDown).Select, 2, False)

End Function
  

运行时错误“ 1004”:

     

无法获取Range类的Select属性。

我知道问题出在范围内,但我找不到使它起作用的方法。

我是VBA的新手,我试图使其简洁明了,因此任何有关如何改进代码的建议都将被接受。

1 个答案:

答案 0 :(得分:0)

如果您只想对列进行重新排序,则无需查找每一行。

Option Explicit

Public Sub CopyData()
    Dim wsDest As Worksheet
    Set wsDest = ThisWorkbook.Worksheets("Sheet1")

    Dim wsSrc As Worksheet
    Set wsSrc = ThisWorkbook.Worksheets("Sheet2")

    Dim LastRow As Long
    LastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row

    Dim DestHeader As Range
    Set DestHeader = wsDest.Range(wsDest.Range("A1"), wsDest.Cells(1, wsDest.Columns.Count).End(xlToLeft))

    Dim SrcHeader As Range
    Set SrcHeader = wsSrc.Range(wsSrc.Range("A1"), wsSrc.Cells(1, wsSrc.Columns.Count).End(xlToLeft))

    Dim FoundCell As Range
    Dim Cell As Range
    For Each Cell In DestHeader
        Set FoundCell = Nothing
        On Error Resume Next
        Set FoundCell = SrcHeader.Find(What:=Cell.Value, LookAt:=xlWhole)
        On Error GoTo 0

        If Not FoundCell Is Nothing Then
            Cell.Offset(1).Resize(LastRow - 1).Value = FoundCell.Offset(1).Resize(LastRow - 1).Value
        End If

    Next Cell
End Sub