所有床单上的VLOOKUP

时间:2017-04-27 12:16:47

标签: excel-vba excel-2010 vba excel

我有一个" Master"在A栏中有部件编号,在B列中有位置的工作表。我有大约200张只有A部分编号的工作表。如何将VLOOKUP应用到所有工作表中,以便每张工作表上的每个部件编号都在B列中有我的位置?手动完成需要永远。感谢

2 个答案:

答案 0 :(得分:0)

以下是从Master工作表中查找数据的一种方法,假设包含查找值的起始单元格为A2。这也假定所有工作表都在同一个工作簿中:

=VLOOKUP(A2,Master!$A$2:$B$11,2)

解释每个参数从左到右的作用:

  • A2 - 包含200张其中一张的查找值的单元格。 (这可以是包含查找值的任何单元格。)
  • Master是包含要查找的数据的工作表的名称。
  • $A$2是要在Master工作表中查找的表数据的左上角单元格,我们要使用$ sign,因为查找表左上角的单元格应该是固定的。
  • $B$11是表格在Master表单中查找的右下方单元格,我们希望使用$ sign,因为查找表右下角的单元格应该是固定的。
  • 2,这是列索引,其中包含您希望为成功查找返回的值。列索引从1开始并向右增加。索引1处的列包含查找值。在您的方案中,索引1是A列,指定索引2将索引列B

要处理表中未找到的空白单元格或单元格,您可以像这样扩展此公式:

=IF(ISNA(VLOOKUP(A2,Master!$A$2:$B$11,2)),"",VLOOKUP(A2,Master!$A$2:$B$11,2))

此公式将执行查找,如果找不到它要查找的值,则会将单元格留空,否则会使用找到的数据填充单元格。

您现在可以复制并粘贴到单元格A2(或用起始单元替换A2),然后将列中的公式拖到数据中需要VLOOKUP的最后一个单元格Master表格中的表格。对于每一行X,它将更新相应查找值的查找返回数据。

您需要复制公式然后拖动它以填充每200张纸的整个B列,这有点单调乏味。另一种方法是编写一个循环遍历工作簿中每个工作表的宏,并使用主工作表中的查找结果填充相应的列。

VLOOKUP在查找值位于某个列X中时起作用,而要返回的值(数据)位于X的右侧。

如果要返回的数据位于查找值的左侧,则必须使用MATCHINDEX的组合,这稍微复杂一些。

要在不同的工作簿中查找数据,您需要在两个工作簿之间创建链接this article explains how to do so.

答案 1 :(得分:0)

考虑将所有数据更改为单页。你可以试试这个自制功能:

Function AllSheetVLookup(ByVal lookup_value, ByVal search_col As Long, ByVal return_col As Long, Optional book_rng As Range)
    Dim ws As Worksheet, r As Long
    On Error Resume Next
    For Each ws In IIf(book_rng Is Nothing, Application.Caller, book_rng).Worksheet.Parent.Worksheets
        r = Application.WorksheetFunction.Match(lookup_value, ws.Columns(search_col), 0)
        If r Then AllSheetVLookup = ws.Cells(r, return_col): Exit Function
    Next
    AllSheetVLookup = CVErr(2042) 'Not found, #N/A! returned
End Function

lookup_value - 要搜索的值,在VLOOKUP中有; search_col - 工作表中要搜索值的列号 return_col - 用于匹配匹配的返回值的列号 book_rng - 可选。如果要搜索另一本书,则在另一本书中单元格。如果省略,则使用预订函数调用的地方。

示例:

=AllSheetVLookup("part_number", 1, 2)

将搜索价值" part_number"在当前书的所有工作表中的A列(第1列)中,以及B列(第2列)的返回值。