如何用公式灵活提取降序排序后指定排名区间的数值?
问题描述
现有表格如下:
| A | B | |
|---|---|---|
| 1 | 100 | 60 |
| 2 | 50 | 50 |
| 3 | 80 | 40 |
| 4 | 10 | |
| 5 | 20 | |
| 6 | 70 | |
| 7 | 30 | |
| 8 | 90 | |
| 9 | 40 | |
| 10 | 60 |
需求:
- 将A列(A1:A10)的数值降序排序;
- 在B列仅显示降序后排名第5、6、7位的数值。
目前已通过公式 =TAKE(SORT(A1:A10;;-1);5) 实现降序并取前5位,但需要能灵活指定排名区间的公式。
解决方案
以下两种方法都能满足灵活指定区间的需求:
方法1:DROP + TAKE 组合
利用DROP剔除区间前的元素,再用TAKE提取需要的数量,公式如下:
=TAKE(DROP(SORT(A1:A10;;-1);4);3)
SORT(A1:A10;;-1):对A列数值降序排序,得到完整排序后的数组;DROP(...,4):移除排序数组的前4个元素,从第5位开始保留;TAKE(...,3):提取接下来的3个元素,对应第5、6、7位。
灵活调整说明
如果需要提取第N到第M位:
- 将
DROP的第二个参数改为N-1(剔除前N-1个元素); - 将
TAKE的第二个参数改为M-N+1(提取M-N+1个元素)。
示例:提取第3-6位时,公式为 =TAKE(DROP(SORT(A1:A10;;-1);2);4)
方法2:INDEX + SEQUENCE 组合
用SEQUENCE生成指定区间的行号,再通过INDEX从排序数组中取值,公式如下:
=INDEX(SORT(A1:A10;;-1);SEQUENCE(3;1;5))
SEQUENCE(3;1;5):生成从5开始的3个连续整数(即5、6、7),对应目标排名的位置;INDEX(...,上述序列):从排序后的数组中取出对应位置的数值。
灵活调整说明
如果需要提取第N到第M位:
- 将
SEQUENCE的第一个参数改为M-N+1(生成的数字数量); - 将
SEQUENCE的第三个参数改为N(起始数字)。
示例:提取第2-5位时,公式为 =INDEX(SORT(A1:A10;;-1);SEQUENCE(4;1;2))
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

