根据工作簿文件示例进行编辑
在 SAMPLE Milestone Report.xlsx 文件的 M 列中,放置以下公式:
=INDEX('[SAMPLE Master Active.xlsx]Sheet1'!$1:$4,MATCH($A2,'[SAMPLE Master Active.xlsx]Sheet1'!$A:$A,FALSE),MATCH(M$1,'[SAMPLE Master Active.xlsx]Sheet1'!$1:$1,FALSE))
然后,您可以将此公式复制并粘贴到其余的行/列中。其中一些将返回#N/A
,因为列标签不完全匹配。如果找不到员工编号,则会返回类似的错误。
索引函数引用主活动工作簿的第 1:4 行,工作表 1。
下一个参数使用 MATCH() 函数在主活动工作簿第 1 页的 A 列中查找员工编号的行号。
下一个参数使用 MATCH() 函数在 Master Active 工作簿的第 1 行,工作表 1 中查找列标签的列 #。
所以通过这种方式,我们可以引用包含您的 Master Active 工作簿中所有数据的范围,并动态识别员工编号所在的 ROW 以及列标签所在的 COLUMN。Index 函数然后返回此交集的值。
原始答案
该VLOOKUP
函数需要三个参数和一个可选的第四个参数。
- Lookup_Value - 这是您要搜索的值
- Table_Array - 这是您要搜索的范围/表格
lookup_value
- Column_# - 公式将返回匹配行中的值,对于此列 #,在
table_array
.
- Range_lookup(可选)- 告诉 Excel 是返回近似匹配还是完全匹配。我从来不需要使用近似匹配,所以我总是将它设置为
False
.
您需要做的是Column_#
根据其他一些标准使值成为动态值。您可能可以使用该MATCH()
功能执行此操作。
以下示例使用工作表函数约定,但应该很容易转换为 VBA。
=VLOOKUP("steve", "A:C", 3, False)
将从 A 列中找到“steve”的行返回第 3 列中的值。
但是假设您的数据并不总是在第 3 列中......假设您正在寻找“类别”并且它可能在任何列中,但您知道 ccolumn 标签将在第 1 行中。然后,而不是“3 " 在VLOOKUP...
公式中,你会这样做:
匹配(“类别”,'Vacancy_Sheet_Name'!1:1,假)
所以你最终得到的公式是:
=VLOOKUP("steve", "A:C", Match("Category",'Vacancy_Sheet_Name'!1:1, False), False)
在 vba 中,这将是:
= Application.WorksheetFunction.Vlookup("steve", "A:C", Application.Match("Category",Sheets("Vacancy_Sheet_Name").Range("1:1"),False), False)
重要说明:VLOOKUP
总是在第一列中Table_Array
查找Lookup_Value
. 如果您的数据结构发生了变化,并且lookup_value
不再位于 FIRST 列中,VLOOKUP
则不适合使用该函数。在这种情况下,可能需要使用INDEX()
和MATCH()
函数的组合,因为VLOOKUP
它不起作用。