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

Return Top 10 Values from a List (with Specific Conditions!)

我有一个 table,其中包含一长串姓名和信息。我想按 1、2、... 10 的顺序调用某个参数的最高值的十个名称。我已经从过去的互联网搜索中提取了一个公式,它完全符合我的需要,并且它很好用。就是这样:

=INDEX(Salaries[Name],MATCH(1,INDEX((Salaries[Income]=LARGE(Salaries[Income],ROWS(C:C3)))*(COUNTIF(C: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 列中调出相应的年龄和收入。

现在,我对这最后一部分挂断了电话。我想要一个用户定义的年龄限制来控制 "Top 10" 结果。 (示例:用户定义的最大年龄为 35 岁,并且列表中填充了收入最高的前十名且年龄也在 35 岁及以下的人的姓名。)

我知道这可以在 table 本身上轻松完成,只需对收入列进行排序并在年龄列上设置过滤器即可,但我希望这个十人名单由公式驱动。有没有人对我现有的公式有任何建议的编辑或完全不同的方法?

File Download Link

我没有太多时间,但我想我可以用我的公式让你上路 :

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

F 将 return "Name",G 将 return "Age",H 将 return "Income".

我还假设数据将从您的 "All Salaries" Table 中提取,从 C17 开始并转到 C28

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

G2 中,使用与上面相同的公式,但将第一个 C:C 更改为 D:D,因为那是年龄范围。在 H2 中,使用 E 而不是 D

应该可以。如果您可以在您的 OP 中粘贴一些示例数据,我可以测试并仔细检查。

所以把你的第一个方程改成这样:

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

这是一个数组公式,因此请按 Ctrl-Shift-Enter 确认