Excel 2007 - 使用公式而不是 AGGREGATE 在 SUBTOTAL 中查找前 10 名

Excel 2007 - Find the top 10 in a SUBTOTAL with a formula, not with AGGREGATE

我正在使用 Excel 2007,我已经看到 AGGREGATE 函数可以完成我想要的功能,唉,它在 2007 中不存在。

我使用以下公式获取数据集中排名前 10 位的产品。

=INDEX($A:$W389,MATCH(LARGE($V:$V389,BO1),$V:$V389,0),1)

BO1:BX1 是一个从 1 到 10 的列表(给出 k 个结果)。

这很好用,直到列表被放入小计。然后它 returns ""(好吧,0)因为它发现 MAX 值作为小计之一。

如何获得忽略 SUBTOTAL 的前 10 名?

这是我的想法.... From MrExcel <-- 这很好地省略了空白的单元格,但是 return 将它们一一放入列表中。我想我需要在公式中 return 这个数组,但我就是想不通。

如果您过滤了数据,这里有一种按排序顺序列出所有可见值的方法:

假设我们从:

开始

我们在 C 中添加一个 "helper" 列,因此在 C2 中输入:

=IF(SUBTOTAL(3,A2:A2)=0,MIN($C:C1)-1,SUBTOTAL(3,$A:$A2))

然后抄下来。我们现在过滤只看到 "blues".

无论我们如何过滤,列 C 都将是一个简单的顺序列表,标记可见项。

D21中输入:

=IFERROR(INDEX($B:$B,MATCH(ROWS(:1),$C:$C,0)),"")

D 表示列 B 项目中的可见项目按其出现顺序排列。在 E21 中输入:

=IFERROR(RANK(D21,$D:$D,0)+COUNTIF(D:D21,D21)-1,"")

然后抄下来。列 E 对列 D 中的每个项目应用唯一排名。最后在G21中输入:

=IFERROR(INDEX($D:$D,MATCH(ROWS(:1),$E:$E,0)),"")

然后抄下来。 G 列表示 D 列中的项目,按自上而下的顺序排列。

如果 A 列值(产品)在 "subtotal" 行中始终为空白,如果您没有 any,则使用此版本应该足够了V 列中的重复项:

=INDEX($A:$A389,MATCH(LARGE(IF($A:$A389<>"",$V:$V389),BO1),$V:$V389,0))

已通过 CTRL+SHIFT+ENTER

确认

...但假设 V 列中可能存在重复值(在值本身之间或值与小计之间)在第一个单元格中使用此公式(BO2?)

=INDEX($A:$A389,MATCH(LARGE(IF($A:$A389<>"",$V:$V389),BO1),IF($A:$A389<>"",$V:$V389),0))

......然后在BP2中使用这个版本:

=INDEX($A:$A389,MATCH(LARGE(IF($A:$A389<>"",$V:$V389),BP1),IF(ISNA(MATCH($A:$A389,$BO2:BO2,0)),IF($A:$A389<>"",$V:$V389)),0))

也用CTRL+SHIFT+ENTER确认并复制到