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
给定的工资列出雇员的详细信息。
我已经使用VLOOKUP
function。
对于单元格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完全匹配!