Excel 2010:具有多个结果的VLOOKUP

我有以下数据:

例如

ABC EmployeeID EmployeeName EmployeeSalary ------------------------------------------- E101 JAK 20000 E102 SAM 25000 E103 John 20000 E104 Shawn 30000 

我有单元格H1 ,其中我input雇员的工资,在单元格H2, I2, J2下面的单元格中应该按照单元格H1给定的工资列出雇员的详细信息。

我已经使用VLOOKUPfunction。

对于单元格H2:

 =IFERROR(VLOOKUP(H1,C2:A5,1,FALSE),"EmployeeID not found") 

对于单元格I2:

 =IFERROR(VLOOKUP(H1,C2:B4,2,FALSE),"EmployeeName not found") 

对于单元格J2:

 =IFERROR(VLOOKUP(H1,C2:C4,3,FALSE),"EmployeeSalary not found") 

注意 :上述工作正常单个结果显示,但是当我input20000 ,它将只显示单个logging不是所有符合给定标准。

有三种方法可以解决这个问题:

首先是公式:

我设置了这个字段,用另一种方法将会变得很明显:

在这里输入图像说明

所以在J4中我把下面的公式:

 =IFERROR(AGGREGATE(14,6,$C$2:INDEX(C:C,MATCH(1E+99,C:C))/($C$2:INDEX(C:C,MATCH(1E+99,C:C))=$H$2),ROW(1:1)),"") 

在H4我把:

 =IF($J4<>"",INDEX(A$2:INDEX(A:A,MATCH(1E+99,$C:$C)),AGGREGATE(15,6,(ROW($C$2:INDEX($C:$C,MATCH(1E+99,$C:$C)))-1)/($C$2:INDEX($C:$C,MATCH(1E+99,$C:$C))=$J4),COUNTIF($J$4:$J4,$J4))),"") 

然后我拖到I4。 然后拖动所有三个公式,直到您确定已经覆盖了所有可能的结果。

这是一个非CSE数组公式。 数组公式计算是指数式的,所以我们需要将参考范围限制在最小需要的范围内。 所有的INDEX($C:$C,MATCH(1E+99,$C:$C))find数据的最后一个单元格并将其设置为结束引用。

第一个IFERROR()包装允许将公式复制下来比列表将返回并避免#N/A 图中公式占据前8行。

在这里输入图像说明


其次,我们使用高级filter:

首先我们在H1周围设置这个区域:

在这里输入图像说明

然后我们导航到“数据”选项卡上的“高级filter”。 这个窗口popup:

在这里输入图像说明

然后我们input信息:

将副本标记到其他位置。 列表范围是$A$1:$C$5标准范围是$A$1:$C$5复制到范围是$H$3:$J$3

在这里输入图像说明

然后打好。

在这里输入图像说明


第三个是模拟高级filter的vba:

 Sub atfilt() Dim ws As Worksheet Dim rng As Range Dim critrng As Range Dim cpytorng As Range Dim lstrow As Long Set ws = Sheets("Sheet9") lstrow = ws.Range("A" & ws.Rows.Count).End(xlUp).row Set rng = ws.Range("A1:C" & lstrow) Set critrng = ws.Range("H1:H2") Set cpytorng = ws.Range("H3:J3") rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=critrng, CopyToRange:=cpytorng, Unique:=False End Sub 

各有其缺点:

公式:如果数据集大(1000行或更多),计算将会很长。

高级filter:每次需要新的filter时,每个步骤都必须重做。 这不是自动的。

VBA:这是VBA,需要一定的了解如何使用它。

我同意@Scott Craner的评论:自动filter在这里会很棒,可以让你根据标准find多个值。 不幸的是(也许有人可以填补这一点:))我不太了解vba中的自动filter(仅用于一次或两次)

我可以用INDEX(MATCH())告诉你左边的查找,它应该代替你的VLOOKUPS。

格式:

INDEX( “要返回值的列” ,MATCH( “lookup value” “column to find lookup value” ,0))

所以在你的H2的例子中,你可以使用:

 =IFERROR(INDEX($A:$A,MATCH(H1,$C:$C,0)),"EmployeeID not found") 

注意公式中的“0”是find完全匹配!