Vlookup使用2列来引用另一个

我想在先姓的情况下做一个虚拟的查找来获得一个年龄。 这将在列A和列B中完成。如果在列A中find,则继续到列B,如果在列B中find,则将来自列C的J3中的年龄放入“无”。

这里是一个例子:

J1 = John J2 = Doe J3 = =VLOOKUP J1 & J2,A1:C50,3,FALSE) 

J3是我到目前为止。 我需要嵌套一个Vlookup检查列A,然后列B以获得年龄?

以下是表格列表的一个例子:

 ABC Jeff Vel 80 John Fly 25 Jake Foo 20 John Doe 55 

J3 = 55。

很多方法:

  1. 处理号码回报:

如果您的返回值是数字并且匹配是唯一的(在数据中只有一个John Doe),或者如果有多个数字,则要求返回的总和,那么使用SUMIFS是最快的方法。

 =SUMIFS(C:C,A:A,J1,B:B,J2) 

在这里输入图像描述


  1. 用非数字返回

如果返回值不是数字或有多个,那么有两种方法可以获得列表中的第一个匹配项:

一个。 帮手列:

在第四栏中提出以下公式:

 =A1&B1 

并抄下列表

在这里输入图像描述

然后使用INDEX / MATCH:

 =INDEX(C:C,MATCH(J1&J2,D:D,0)) 

在这里输入图像描述

湾 数组公式:

如果你不想或者不能创build第四列然后使用数组types公式:

 =INDEX(C:C,AGGREGATE(15,6,ROW($A$1:$A$4)/(($A$1:$A$4=J1)*($B$1:$B$4=J2)),1)) 

数组types公式需要将数据的大小限制为数据集。

在这里输入图像描述

如果您的数据集定期更改大小,我们可以通过添加更多的INDEX / MATCH来将上面的单元格修改为dynamic,以返回数据的最后一个单元格:

 =INDEX(C:C,AGGREGATE(15,6,ROW($A$1:INDEX($A:$A,MATCH("ZZZ",A:A)))/(($A$1:INDEX($A:$A,MATCH("ZZZ",A:A))=J1)*($B$1:INDEX($B:$B,MATCH("ZZZ",A:A))=J2)),1)) 

这将允许数据集增大或缩小,公式将只遍历数据而不是整列。

上述方法按照Best-Better-Good的顺序设置。


  1. 在一个单元格中获得多个答案

如果你不想总结,或者返回值是文本,并且有多个John Doe实例,并且你想要在一个单元格中返回所有的值,那么:

一个。 如果您有Office 365 Excel,则可以使用TEXTJOIN的数组forms:

 =TEXTJOIN(",",TRUE,IF(($A$1:$A$4=J1)*($B$1:$B$4=J2),$C$1:$C$4,"")) 

作为一个数组公式,在退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认。 如果正确完成,则Excel将在公式周围放置{}

像上面的AGGREGATE公式一样,它需要被限制在数据集中。 INDEX / MATCHfunction也可以使范围dynamic化。

在这里输入图像描述

湾 如果没有Office 365 Excel,则将此代码添加到附加到工作簿的模块中:

 Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0 If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function 

然后如上所述使用TEXTJOIN()公式。