我需要一些宏/ vlookup的帮助。最初,我记录了宏,只是手动思考VLOOKUP总是有效。最近,它没有正常运行(我不确定为什么除了可能的列不时总是在同一个地方)。有没有办法写出这个宏,以便它每次都能工作?
这是我正在尝试做的事情:
我有一个主电子表格和空缺电子表格。主电子表格包含我需要移动到空缺电子表格的信息。并非主电子表格中的每个人都在空缺电子表格中列出(反之亦然),也不是按指定顺序列出。我已经有一个宏,它将我需要的列名添加到空缺电子表格中,以便设置。我只需要在那里获取信息。
我想要做以下事情: 从空缺电子表格中获取员工编号并在主电子表格中搜索,然后将特定列名称(在主电子表格之外)的信息复制到空缺电子表格中的列(同名)
Ex:员工编号12345在空缺电子表格中。宏在主电子表格中搜索员工编号12345,然后将信息(在主电子表格内)从类别,中心名称,作业,位置,代码,跟踪,原因,薪水等列移动到相同名称的列上。空缺电子表格。
我需要更多列来获取信息,但这是一个抽样。这些电子表格非常庞大,有数万行数据。我们非常感谢您提供的任何帮助!
我希望这一切都有道理。
答案 0 :(得分:1)
根据工作簿文件示例进行编辑
在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行,第1页。
下一个参数使用MATCH()函数在主活动工作簿的第A列中查找员工编号的行#,第1页。
下一个参数使用MATCH()函数在主活动工作簿的第1行中查找列标签的列#。
因此,通过这种方式,我们可以引用包含Master Active工作簿中所有数据的范围,并动态识别员工编号所在的ROW以及列标签所在的COLUMN。然后,Index函数返回此交集的值。
原始答案
VLOOKUP
函数需要三个带有可选第四个参数的参数。
lookup_value
table_array
内为此列#返回匹配行中的值。False
。您需要做的是根据其他一些标准使Column_#
成为动态值。您可以使用MATCH()
函数执行此操作。
以下示例使用工作表函数约定,但很容易转换为VBA。
=VLOOKUP("steve", "A:C", 3, False)
将从列A中找到“steve”的行返回第3列中的值。
但是假设您的数据并不总是在第3列......我们假设您正在寻找“类别”,它可能在任何列中,但您知道ccolumn标签将在第1行。然后,相反VLOOKUP...
公式中的“3”,您可以这样做:
匹配(“类别”,“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
的{{1}}的第一列中查找Lookup_Value
。如果数据结构已更改,并且lookup_value
不再位于FIRST列中,则VLOOKUP
不适合使用。在这种情况下,可能需要使用INDEX()
和MATCH()
函数的组合,因为VLOOKUP
将不起作用。