Excel 2010:具有多个结果

时间:2016-04-22 14:27:34

标签: excel vba vlookup

我有以下数据:

示例

    A             B               C
EmployeeID   EmployeeName   EmployeeSalary
-------------------------------------------
E101         JAK            20000
E102         SAM            25000
E103         John           20000
E104         Shawn          30000

我有一个单元格H1,其中我输入了员工的工资,而下面的单元格是单元格H2, I2, J2,应该根据单元格中给定的工资列出员工详细信息{{1 }}

我已经使用了H1函数。

对于细胞H2:

VLOOKUP

对于单元格I2:

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

对于细胞J2:

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

注意:以上效果可以显示单个结果,但是当我输入=IFERROR(VLOOKUP(H1,C2:C4,3,FALSE),"EmployeeSalary not found") 时,它只显示单个记录,而不是所有符合给定条件的记录。

2 个答案:

答案 0 :(得分:1)

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

首先是公式:

我设置了这样的字段,这将通过另一种方法变得明显:

enter image description here

所以在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))找到包含数据的最后一个单元格,并将其设置为结束引用。

第一个IFERROR()包装器允许将公式复制下来,而不是列表将返回并避开#N/A。在图片中,公式占据前8行。

enter image description here

其次我们使用高级过滤器:

首先我们设置H1周围的区域:

enter image description here

然后我们导航到“数据”选项卡上的“高级过滤器”。此窗口弹出:

enter image description here

然后我们输入信息:

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

enter image description here

然后点击好了。

enter image description here

第三个是模仿高级过滤器的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

每个都有其缺点:

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

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

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

答案 1 :(得分:0)

我同意@Scott Craner的评论,即autofilter在这里很棒,可以根据标准找到多个值。不幸的是(也许有人可以填补这一点:))为此目的,我不太了解vba中的自动过滤器(仅使用一次或两次)

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

<强>格式:

INDEX(&#34;要返回的值列&#34; ,MATCH(&#34;查找值&#34; &#34;列找到查找值&#34; ,0))

所以在您的单元格H2示例中,您可以使用:

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

注意&#34; 0&#34;在公式中找到一个完全匹配!