0

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

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

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

我想要执行以下操作:从空缺电子表格中获取员工编号并在主电子表格中搜索它,然后将特定列名(从主电子表格中)中的信息复制到列(同名)中空缺电子表格

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

我需要从更多列中获取信息,但这只是一个示例。这些电子表格非常庞大,包含数万行数据。您能提供的任何帮助将不胜感激!

我希望这一切都有意义。

4

1 回答 1

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:4 行,工作表 1。

下一个参数使用 MATCH() 函数在主活动工作簿第 1 页的 A 列中查找员工编号的行号。

下一个参数使用 MATCH() 函数在 Master Active 工作簿的第 1 行,工作表 1 中查找列标签的列 #。

所以通过这种方式,我们可以引用包含您的 Master Active 工作簿中所有数据的范围,并动态识别员工编号所在的 ROW 以及列标签所在的 COLUMN。Index 函数然后返回此交集的值。

原始答案

VLOOKUP函数需要三个参数和一个可选的第四个参数。

  1. Lookup_Value - 这是您要搜索的值
  2. Table_Array - 这是您要搜索的范围/表格lookup_value
  3. Column_# - 公式将返回匹配行中的值,对于此列 #,在table_array.
  4. 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它不起作用。

于 2013-03-19T18:31:48.347 回答