functionVLOOKUP的Excel问题

我知道这可能不是问一个纯粹的问题的最好的地方,但是。 我有一个包含以下标题的表:数字,date,名称。 在另一个文件中,我需要链接数字和名称。 它不总是在相同的顺序,因此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是数据所在的位置。 接下来,我需要通过链接到文件名来获取文件中的date。 我知道我可以把它和数字联系起来,但是这是工作的一部分,它们的排列方式是不同的,从最老的到最新的不同的date,不一样的。 Excel中的Date函数在我看来是非常愚蠢的。 所以我用了这个公式

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

并通过用4replace1来重复它。它不断返回N / A。 即使我将date的格式更改为常规,它仍然不会返回任何内容。 我没有得到我在这里做错了什么。

VLOOKUP语法:

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

VLOOKUP函数将始终在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

当您要返回date时,VLOOKUP将工作在Sheet1的D列名称的右侧,但它不能从名称上的Lookup_value返回Sheet1的列B中的date。 你将需要一个INDEX / MATCH函数对。 另外,检索第二个和第三个与名称匹配的date集比INDEX / MATCH比VLOOKUP更容易。

INDEX和MATCH语法:

INDEX ( 数组,row_num,column_num

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

如果您要使用从Sheet1的列C检索到的名称从Sheet1的列B返回date,则必须使用INDEX / MATCH对。 由于我们使用这一个date,所以它可以用于另一个date,尽pipe严格地说,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中的名称匹配的第二个和第三个date,请将目标工作表的C1和D1更改为使用了小函数的这些公式,然后使用ROW函数和COUNTIF函数生成附加date。

对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查找返回的名称匹配的所有可能date。 你的结果应该看起来像,

VLOOKUP vs INDEX / MATCH

您可能会注意到我对Sheet1上的相同date进行了sorting以演示该方法。 IFERROR函数用于显示一个空string(例如“”)而不是错误信息(如上面示例图像中的C4和D4所示)。

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

我假设B1拥有这个人的名字。 在这种情况下,您需要调整查找表的范围,以便在具有名称的列中开始,即

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

编辑:将列更改为2以获取date

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