用于执行VLOOKUP的宏,用于搜索特定列名以输入特定信息

时间:2013-03-19 17:39:33

标签: excel excel-vba vlookup vba

我需要一些宏/ vlookup的帮助。最初,我记录了宏,只是手动思考VLOOKUP总是有效。最近,它没有正常运行(我不确定为什么除了可能的列不时总是在同一个地方)。有没有办法写出这个宏,以便它每次都能工作?

这是我正在尝试做的事情:

我有一个主电子表格和空缺电子表格。主电子表格包含我需要移动到空缺电子表格的信息。并非主电子表格中的每个人都在空缺电子表格中列出(反之亦然),也不是按指定顺序列出。我已经有一个宏,它将我需要的列名添加到空缺电子表格中,以便设置。我只需要在那里获取信息。

我想要做以下事情: 从空缺电子表格中获取员工编号并在主电子表格中搜索,然后将特定列名称(在主电子表格之外)的信息复制到空缺电子表格中的列(同名)

Ex:员工编号12345在空缺电子表格中。宏在主电子表格中搜索员工编号12345,然后将信息(在主电子表格内)从类别,中心名称,作业,位置,代码,跟踪,原因,薪水等列移动到相同名称的列上。空缺电子表格。

我需要更多列来获取信息,但这是一个抽样。这些电子表格非常庞大,有数万行数据。我们非常感谢您提供的任何帮助!

我希望这一切都有道理。

1 个答案:

答案 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函数需要三个带有可选第四个参数的参数。

  1. Lookup_Value - 这是您要搜索的值
  2. Table_Array - 这是您要搜索lookup_value
  3. 的范围/表格
  4. Column_# - 公式将在table_array内为此列#返回匹配行中的值。
  5. Range_lookup(可选) - 告诉Excel是返回近似匹配还是完全匹配。我从来不需要使用近似匹配,因此我总是将其设置为False
  6. 您需要做的是根据其他一些标准使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将不起作用。