使用列标题的Vlookup的macros

我有2个工作表。 我将有一个macros来做Sheet1中的Vlookup。 Sheet2将被存储的数据。 然而,每一项的数据列不会相同,因此我将不得不检查列名。

这是表1,我将input'会员ID'然后做Vlo​​okup到表2获得'会员名'和'备注'。

在这里输入图像说明

这是工作表2,其中存储了所有的数据。

在这里输入图像说明

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

我试图通过search列标题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 

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

1.使用INDEX / MATCH

在G2中使用以下公式: =INDEX(Sheet2!E:E,MATCH(F2,Sheet2!D:D,0) 。用下面的H:H代替E:E

您现在可以将表2中列的顺序转换为您喜欢的。

2.使用VLOOKUP和MATCH

如果您事先不知道订单,您也可以先查找列号,然后构buildVLOOKUP:

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

希望有所帮助!