使用列标题的Vlookup宏

时间:2013-12-13 08:34:56

标签: excel excel-vba vlookup vba

我有2个工作表。我将有一个宏来处理Sheet1中的Vlookup。 Sheet2将是存储的数据。但是,每个术语的数据列不相同,因此我必须检查列名。

这是工作表1.我将输入'会员ID'然后执行Vlookup到工作表2以获得'会员名'& '备注'。

enter image description here

这是第2页,其中存储了所有数据。

enter image description here

这是Vlookup代码。

With Sheets("Sheet1")
.Range("G2:G" & .Cells(.Rows.Count, "F").End(xlUp).Row).Formula = "=VLOOKUP(RC[-1],Sheet2!C[-3]:C[-2],2,FALSE)"
End With
With Sheets("Sheet1")
.Range("H2:H" & .Cells(.Rows.Count, "F").End(xlUp).Row).Formula = "=VLOOKUP(RC[-2],Sheet2!C[-4]:C,5,FALSE)"
End With

我通过搜索Column标头尝试Vlookup。但我不知道该怎么做。

Worksheets("Sheet2").Activate
' Map Account name
Rows("1:1").Select
Set cell = Selection.Find(What:="Member ID", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

If cell Is Nothing Then
    MsgBox "Column 'Member ID' could not be found.", vbCritical, "No such column"
    Cancel = True
Else
    'Vlookup here

1 个答案:

答案 0 :(得分:1)

这里不需要VBA!你可以一直用公式做到这一点。两个选项:

<强> 1。使用INDEX / MATCH

在G2中使用以下公式:=INDEX(Sheet2!E:E,MATCH(F2,Sheet2!D:D,0)。在下一栏中将E:E替换为H:H

您现在可以根据自己的喜好调整第2页中列的顺序。

<强> 2。使用VLOOKUP和MATCH

如果你事先不知道订单,你也可以先找到列号 - 然后再建立VLOOKUP:

  • 在Sheet1中,在标题上方添加一行。将以下公式放在F1中(并复制到H1):=MATCH(F2,Sheet2!1:1,0)。这将返回每个标题的列号。
  • 现在将以下公式放在G3中并将其向下复制到H列:=VLOOKUP($F3,Sheet2!$D:$Z,G$1-F$1+1,0)

希望有所帮助!