跳转至

CHOOSEROWS 函数

函数概述

CHOOSEROWS 用于从一个数组或区域中按行号选取指定的行,并返回由这些行组成的新数组。它非常适合在动态数组场景下做“抽行”“重排行”“取首尾几行”等操作,常与 FILTER、SORT、TAKE、DROP、CHOOSECOLS 等函数配合使用。

适用场景示例:

  • 从明细表中提取第 1/2/5 行组成新表
  • 取前 N 行或后 N 行(配合 SEQUENCE / 负数行号)
  • 按指定顺序重排行(如 3、1、2)

说明:CHOOSEROWS 属于动态数组函数家族,返回结果会“溢出”到相邻单元格区域。

基础语法

=CHOOSEROWS(array, row_num1, [row_num2], ...)

参数说明

参数 必填 含义 规则要点
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 行。

=CHOOSEROWS(A2:D7, 1, 3, 5)

返回结果会由第 1/3/5 行组成一个新数组。

示例2:按自定义顺序重排

需求:按“第 3 行 → 第 1 行 → 第 2 行”的顺序返回。

=CHOOSEROWS(A2:D7, 3, 1, 2)

这相当于对行做了“指定顺序的重排”。

示例3:取最后两行

需求:取末尾 2 行(倒数第 2 行与倒数第 1 行)。

=CHOOSEROWS(A2:D7, -2, -1)

负数行号让“取尾部”非常直观。

示例4:动态取前 N 行

需求:N 写在 F2,从 A2:D7 取前 N 行(N 变化时结果自动更新)。

=CHOOSEROWS(A2:D7, SEQUENCE(F2))

说明:

  • SEQUENCE(F2) 会生成 1..N 的行号序列
  • CHOOSEROWS 按该序列取行,实现动态“取前 N 行”

示例5:从筛选结果中再抽行

需求:先筛选出“类别=饮品”的行,再从筛选结果中取第 1 行与最后 1 行。

1
2
3
4
=LET(
  x, FILTER(A2:D7, B2:B7="饮品"),
  CHOOSEROWS(x, 1, -1)
)

思路:

  1. FILTER 得到子表 x
  2. CHOOSEROWS 对子表再抽取行

示例6:重复某行做对照

需求:返回第 2 行两次(比如做对照或拼接展示)。

=CHOOSEROWS(A2:D7, 2, 2)

你会得到包含两行且内容相同的新数组。

总结

  • CHOOSEROWS 的核心是:对数组/区域按“行号列表”进行抽取与重排
  • 行号既支持正数也支持负数,因此“取头/取尾”都很方便。
  • 搭配 SEQUENCE 可实现“动态取前 N 行/指定步长取行”等变化需求。
  • 搭配 FILTER、SORT、LET 能把“先得到结果集,再精确抽行”这类操作写得很清晰、可维护。