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确认并复制到
我正在使用 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确认并复制到