CHOOSEROWS 函数¶
函数概述¶
CHOOSEROWS 用于从一个数组或区域中按行号选取指定的行,并返回由这些行组成的新数组。它非常适合在动态数组场景下做“抽行”“重排行”“取首尾几行”等操作,常与 FILTER、SORT、TAKE、DROP、CHOOSECOLS 等函数配合使用。
适用场景示例:
- 从明细表中提取第 1/2/5 行组成新表
- 取前 N 行或后 N 行(配合 SEQUENCE / 负数行号)
- 按指定顺序重排行(如 3、1、2)
说明:CHOOSEROWS 属于动态数组函数家族,返回结果会“溢出”到相邻单元格区域。
基础语法¶
参数说明¶
| 参数 | 必填 | 含义 | 规则要点 |
|---|---|---|---|
| array | 是 | 要选取行的源数组/区域 | 可以是区域(如 A2:D10)或数组运算结果 |
| row_num1 | 是 | 第一个要选取的行号 | 从 1 开始计数,表示 array 的第 1 行 |
| [row_num2], ... | 否 | 其他要选取的行号 | 可写多个;顺序决定返回顺序 |
补充规则(很常用):
- 正数行号:从上往下数第 n 行(1 表示第 1 行)。
- 负数行号:从下往上数第 n 行(-1 表示最后 1 行,-2 表示倒数第 2 行)。
- 可重复同一行号,实现“重复行”。
基础用法示范¶
下面用同一份数据源来演示。假设数据源为 A2:D7(含表头可自行调整),示例数据如下:
| 产品 | 类别 | 数量 | 金额 |
|---|---|---|---|
| 苹果 | 水果 | 12 | 36 |
| 香蕉 | 水果 | 8 | 20 |
| 牛奶 | 饮品 | 5 | 45 |
| 咖啡 | 饮品 | 3 | 60 |
| 面包 | 烘焙 | 10 | 50 |
| 饼干 | 零食 | 6 | 18 |
示例1:选取指定行¶
需求:从 A2:D7 中取第 1、3、5 行。
返回结果会由第 1/3/5 行组成一个新数组。
示例2:按自定义顺序重排¶
需求:按“第 3 行 → 第 1 行 → 第 2 行”的顺序返回。
这相当于对行做了“指定顺序的重排”。
示例3:取最后两行¶
需求:取末尾 2 行(倒数第 2 行与倒数第 1 行)。
负数行号让“取尾部”非常直观。
示例4:动态取前 N 行¶
需求:N 写在 F2,从 A2:D7 取前 N 行(N 变化时结果自动更新)。
说明:
SEQUENCE(F2)会生成 1..N 的行号序列- CHOOSEROWS 按该序列取行,实现动态“取前 N 行”
示例5:从筛选结果中再抽行¶
需求:先筛选出“类别=饮品”的行,再从筛选结果中取第 1 行与最后 1 行。
思路:
FILTER得到子表 xCHOOSEROWS对子表再抽取行
示例6:重复某行做对照¶
需求:返回第 2 行两次(比如做对照或拼接展示)。
你会得到包含两行且内容相同的新数组。
总结¶
- CHOOSEROWS 的核心是:对数组/区域按“行号列表”进行抽取与重排。
- 行号既支持正数也支持负数,因此“取头/取尾”都很方便。
- 搭配 SEQUENCE 可实现“动态取前 N 行/指定步长取行”等变化需求。
- 搭配 FILTER、SORT、LET 能把“先得到结果集,再精确抽行”这类操作写得很清晰、可维护。