返回列表中的前10个值(具有特定条件!)

时间:2015-12-08 20:57:47

标签: excel sorting indexing limit

我有一个包含很长名单和信息列表的表。我想用一个参数的最高值来调用十个名字,按顺序为1,2,... 10.我已经从过去的互联网搜索中删除了一个完全符合我想要的公式,并且它很棒。就是这样:

=INDEX(Salaries[Name],MATCH(1,INDEX((Salaries[Income]=LARGE(Salaries[Income],ROWS(C$3:C3)))*(COUNTIF(C$3:C3,Salaries[Name])=0),),0))

此公式从C4复制并通过C13粘贴。

然后我使用=VLOOKUP($C4,Salaries,COLUMNS(Salaries[[#Headers],[Name]:[Age]]),FALSE)=VLOOKUP($C4,Salaries,COLUMNS(Salaries[[#Headers],[Name]:[Income]]),FALSE)分别在D列和E列中显示相应的年龄和收入。

Screenshot

现在,我在这最后一部分上挂了。我希望有一个用户定义的年龄限制来控制“前10名”结果。 (示例:用户定义的最大年龄为35岁,列表中填入了收入最高的十个人的姓名,并且年龄也在35岁以下。)

我知道这可以通过简单地对收入列进行排序并在年龄列上设置过滤器来轻松地在表格上完成,但我希望这个十人列表是公式驱动的。有没有人对我现有的公式进行任何推荐的编辑,或采用完全不同的方式进行此操作?

File Download Link

2 个答案:

答案 0 :(得分:1)

所以将你的第一个等式改为:

 =INDEX(Salaries[Name],MATCH(1,INDEX((Salaries[Income]=LARGE(IF(Salaries[Age]<= $A$3,Salaries[Income]),ROWS(C$3:C3)))*(COUNTIF(C$3:C3,Salaries[Name])=0),),0))

这是一个数组公式,所以请按Ctrl-Shift-Enter

确认

答案 1 :(得分:0)

我没有太多时间,但我想我可以通过公式used elsewhere来帮助你:

假设您希望在F,G,H列(从第2行开始)中获得经过特殊过滤的数据。

F将返回&#34;名称&#34;,G将返回&#34;年龄&#34;,H将返回&#34; ;收入及#34;

我还假设数据将来自您的所有工资&#34;从C17开始并转到C28

的表格

F2中,=IFERROR(INDEX(C$17:C$28,SMALL(IF(D$17:D$28>=35,ROW(C$17:C$28)-ROW(C$1)+1),ROWS(C$1:C1))),"")作为数组( CTRL + SHIFT + ENTER )。

G2中,使用上面相同的公式,但将第一个C$17:C$28更改为D$17:D$28,因为这是年龄范围。在H2中,使用E代替D

那应该有用。如果您可以在OP中粘贴一些样本数据,我可以对此进行测试并仔细检查。