我需要一些宏/vlookup的帮助。最初,我记录了宏,只做了VLOOKUP手动思考,这将始终工作。最近,它一直没有正常工作(我也不知道为什么,除了可能的列有时并不总是在同一个地方)。有没有办法把这个宏写出来,以便每次都能正常工作?
以下是我要做的事:
我有一个主电子表格和一个空缺电子表格。主电子表格中有我需要移动到空缺电子表格的信息。并非主电子表格上的每个人都列在空缺电子表格上(反之亦然),也不是按指定的顺序排列。我已经有了一个宏,它将我需要的列名添加到空缺电子表格中,这样就可以设置了。我只需要把信息放进去。
我需要做以下工作:从空缺电子表格中获取员工编号并在主电子表格中搜索,然后将特定列名(从主电子表格中)中的信息复制到空缺电子表格上的列(同名)中
员工编号12345在空缺电子表格上。宏在主电子表格中搜索员工编号12345,然后将信息(在主电子表格中)从“类别”、“中心名称”、“职务”、“位置”、“代码”、“跟踪、原因、薪资”移动到空缺电子表格中同名的列中。
有更多的列,我需要的信息,但这是抽样。这些电子表格很大,有数万行数据。如果您能提供任何帮助,我们将不胜感激!
我希望这一切都有意义。
发布于 2013-03-19 18:31:48
基于工作簿文件示例的编辑
在示例里程碑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,因为列标签不完全匹配。如果找不到员工编号,将返回类似的错误。
Index函数引用主活动工作簿( sheet 1 )中的第1:4行。
下一个参数使用MATCH()函数在主Active Workbook第1页的A列中查找员工编号的行#。
下一个参数使用MATCH()函数在主活动工作簿第1行的工作表1中找到列标签的列#。
因此,我们可以引用主活动工作簿中包含所有数据的范围,并动态标识员工号所在的行和列标签所在的列。索引函数然后返回这个交集的值。
原始答案
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的第一列中查找Lookup_Value。如果数据的结构发生了变化,并且lookup_value不再在第一列中,则VLOOKUP不是要使用的适当函数。在这种情况下,可能需要使用INDEX()和MATCH()函数的组合,因为VLOOKUP不能工作。
https://stackoverflow.com/questions/15506620
复制相似问题