功能VLOOKUP的Excel问题

时间:2015-06-04 00:10:59

标签: excel excel-formula

我知道这可能不是提出纯粹问题的最佳地点,但是。我有一个包含以下标题的表:数字,日期,名称。在另一个文件中,我需要将数字与名称相关联。它并不总是以相同的顺序,因此VLOOKUP公式。以下是数据。

1   15-Nov  Allen   15-Nov  
10  15-Nov  Allen   15-Nov  
19  15-Nov  Allen   15-Nov  
6   5-Mar   Avalon  5-Mar  
15  5-Mar   Avalon  5-Mar  
24  5-Mar   Avalon  5-Mar  
9   15-Nov  Burg    15-Nov  
18  15-Nov  Burg    15-Nov  
27  15-Nov  Burg    15-Nov  
8   1-Sep   Fischer 1-Sep  
17  1-Sep   Fischer 1-Sep  
26  1-Sep   Fischer 1-Sep  
3   14-Oct  Kiser   14-Oct  
12  14-Oct  Kiser   14-Oct  
21  14-Oct  Kiser   14-Oct  
2   15-Oct  Remmert 15-Oct  
11  15-Oct  Remmert 15-Oct  
20  15-Oct  Remmert 15-Oct  
4   1-Sep   Roos    1-Sep  
13  1-Sep   Roos    1-Sep  
22  1-Sep   Roos    1-Sep  
7   6-Feb   Tomo    6-Feb  
16  6-Feb   Tomo    6-Feb  
25  6-Feb   Tomo    6-Feb  
5   1-Jan   Wash    1-Jan  
14  1-Jan   Wash    1-Jan  
23  1-Jan   Wash    1-Jan  

所以让我们假设它的标题是A,B,C,D列。所以在新文件中为了从数字中获取名称我使用了公式:

=VLOOKUP(A1,[Workbook1]Sheet1!$A$1:$D$27,3,FALSE)

Workbook1和Sheet1是数据的位置。接下来,我需要通过将其链接到名称来从文件中获取日期。我知道我可以将它与数字联系起来,但它是一个工作的东西,它们的安排方式是从最旧到最新的不同日期,不像这一样。在我看来,excel中的Date函数非常愚蠢。所以我使用了公式

=VLOOKUP(B1,[Workbook1]Sheet1!$A$1:$D$27,1,FALSE)

并通过将4替换为4来迭代它。它一直返回N / A.即使我将Date的格式更改为General,它仍然不会返回任何内容。我不知道我在这里做错了什么。

3 个答案:

答案 0 :(得分:1)

我认为B1持有该人的姓名。在这种情况下,您需要调整查找表的范围,以便它从名称中的列开始,即

=VLOOKUP(B1,[Workbook1]Sheet1!$C$1:$D$27,2,FALSE)

已编辑:将列更改为2以获取日期

答案 1 :(得分:1)

VLOOKUP语法:

  

VLOOKUP lookup_value,table_array,col_index_num,(可选)[range_lookup]

VLOOKUP function将始终在 table_array 的第一列中查找 lookup_value 。然后,它尝试返回 table_array 中相应行的 col_index_num 中的值。 range_lookup 告诉VLOOKUP是要查找精确匹配还是近似匹配。在您的情况下,您将寻找完全匹配。

VLOOKUP决不会在列的左侧的 table_array 中返回一个值,该值与 lookup_value 相匹配。 lookup_value 总是在第一列中查找,VLOOKUP在右侧的列中返回一个值。

根据A栏中的ID号查找名称的公式适用于此。

=VLOOKUP(A1, [Workbook1]Sheet1!$A$1:$D$27, 3, FALSE)

在A1中使用 8 ,上述公式在B1中返回 Fischer

VLOOKUP vs INDEX/MATCH

当您要返回日期时,VLOOKUP将适用于Sheet1列D中名称右侧的那个,但它不能从Sheet1的列B返回基于 lookup_value 的日期名字。您需要INDEX / MATCH函数对。此外,使用INDEX / MATCH检索与名称匹配的第二个和第三个日期集比VLOOKUP更容易。

INDEX和MATCH语法:

  

INDEX array,row_num,column_num

     

MATCH lookup_value,lookup_array,(可选)[match_type]

如果您希望使用刚从Sheet1的C列中检索到的名称从Sheet1的B列返回日期,则必须使用INDEX / MATCH对。由于我们将这个用于一个日期,因此可以将它用于另一个日期,但严格来说,VLOOKUP 可以用于此。

在C1和D1中使用这两个公式。

=INDEX([Workbook1]Sheet1!B:B, MATCH(B1, [Workbook1]Sheet1!C:C, 0))
=INDEX([Workbook1]Sheet1!D:D, MATCH(B1, [Workbook1]Sheet1!C:C, 0))

将单元格格式化为 d-mmm 的自定义数字格式。您的结果应与以下内容类似。

VLOOKUP vs INDEX/MATCH

如果您想要返回Sheet1中与B列中的名称匹配的第二个和第三个日期,请将目标工作表的C1和D1更改为使用SMALL function togewther与ROW function的公式并COUNTIF function生成其他日期。

对B1中的公式进行微调,以便可以填充,然​​后为C1和D1提供接下来的两个公式。

=VLOOKUP(A$1, [Workbook1]Sheet1!$A$1:$D$27, 3, FALSE)
=IFERROR(INDEX([Workbook1]Sheet1!B$1:B$999, SMALL(INDEX(ROW($1:$999)+([Workbook1]Sheet1!C$1:C$999<>B$1)*1E+99, , ), COUNTIF(B$1:B1, B1))), "")
=IFERROR(INDEX([Workbook1]Sheet1!B$1:B$999, SMALL(INDEX(ROW($1:$999)+([Workbook1]Sheet1!C$1:C$999<>B$1)*1E+99, , ), COUNTIF(B$1:B1, B1))), "")

填充B1:D1向下以捕获Sheet1中与原始ID查找返回的名称匹配的所有可能日期。您的结果应该如下,

VLOOKUP vs INDEX/MATCH

您可能会注意到我在Sheet1上对相同日期进行了排序以演示该方法。当您用完值时,IFERROR function用于显示空字符串(例如“”)而不是错误消息(如上面示例图像中的C4和D4)。

总之,使用VLOOKUP function将值返回到所寻求的值的右侧;使用INDEX / MATCH函数对从匹配列的任意一侧检索值。

答案 2 :(得分:0)

您需要使用以下格式格式化日期:
Date format
这是我为解决问题所做的总体工作。 Overall