乐于分享
好东西不私藏

Excel 365 新函数 CHOOSECOLS / CHOOSEROWS 完全指南 — 精准摘取数组行列

Excel 365 新函数 CHOOSECOLS / CHOOSEROWS 完全指南 — 精准摘取数组行列

这两个函数很多人听说过,但不知道它们能解决多少实际问题。今天系统讲清楚。

一、这两个函数是什么

CHOOSECOLS — 按列号精准提取数组中的某些列 CHOOSEROWS — 按行号精准提取数组中的某些行

=CHOOSECOLS(数组, 列号1, [列号2], ...)=CHOOSEROWS(数组, 行号1, [行号2], ...)

支持负数:负数 = 从数组末尾倒数计数(-1 = 最后一列/行,-2 = 倒数第二列/行)


二、适用版本

函数
支持版本
CHOOSECOLS / CHOOSEROWS
Excel 365

(2021 及以上)
替代方案(老版本)
INDEX + COLUMN / ROW 手动构建

三、15 个实战场景

场景 1:提取特定列(CHOOSECOLS 基础)

从员工表中只提取「姓名」和「工资」两列(假设它们在第1列和第3列):

=CHOOSECOLS(A1:D100, 1, 3)

✅ 以前要靠 INDEX + COLUMN 构建复杂公式,现在一行搞定。


场景 2:提取最后 N 列(负数用法)

=CHOOSECOLS(A1:Z100, -1)         ← 提取最后一列=CHOOSECOLS(A1:Z100, -3, -2, -1) ← 提取最后三列

负数从末尾倒数,用起来非常直观!


场景 3:奇偶列筛选

=CHOOSECOLS(A1:D100, 1, 3, 5, ...)  ← 只取奇数列=CHOOSECOLS(A1:D100, 2, 4, 6, ...)  ← 只取偶数列

结合 SEQUENCE 自动生成奇偶列号:

=CHOOSECOLS(数据, SEQUENCE(, COLUMNS(数据)/2, 1, 2))  ← 奇数列=CHOOSECOLS(数据, SEQUENCE(, COLUMNS(数据)/2, 2, 2))  ← 偶数列

场景 4:CHOOSEROWS 提取特定行

=CHOOSEROWS(A1:D100, 1, 5, 10)    ← 提取第1、5、10行=CHOOSEROWS(A1:D100, 2)           ← 提取第2行

场景 5:提取最后 N 行

=CHOOSEROWS(A1:D100, -1)           ← 最后一行=CHOOSEROWS(A1:D100, -5)           ← 最后5行=CHOOSEROWS(A1:D100, -10, -5, -1)  ← 倒数第10、5、1行

场景 6:去掉首列或末列

=CHOOSECOLS(A1:D100, -2)           ← 去掉最后一列,保留其他=CHOOSECOLS(A1:D100, -COLUMNS(A1:D100))  ← 只去掉第一列

结合 DROP 更强大(去掉前 N 行/列后,再取特定列):

=DROP(CHOOSECOLS(A4:D100, 1, 3), 1)

场景 7:与 VSTACK/HSTACK 组合 — 精准重建表格

从多个数据源按需拼接列:

=VSTACK(  CHOOSECOLS(表1, 1, 3),  CHOOSECOLS(表2, 1, 3))

只取两个表中的姓名和工资列,合并成新表。


场景 8:与 FILTER 组合 — 筛选后精准取列

=CHOOSECOLS(FILTER(A1:D100, B1:B100="销售部"), 1, 3)

FILTER 先筛选销售部员工,再用 CHOOSECOLS 只取姓名和工资。


场景 9:与 SORT 组合 — 排序后取 Top N 行

=CHOOSEROWS(SORT(A1:D100, 3, -1), SEQUENCE(5))

按工资降序排序,取前 5 名员工(Top 5)。


场景 10:与 XLOOKUP 组合 — 精准定位后提取整行

=CHOOSEROWS(数据, XLOOKUP("张三", A:A, ROW(A:A)))

找到”张三”的行号,直接提取该行数据。


场景 11:倒序提取列(负数列号)

=CHOOSECOLS(A1:D100, -1, -2, -3)   ← 倒序取最后3列

用于快速将表格列顺序反转,或提取最近 N 列数据。


场景 12:指定范围提取(行号范围)

=CHOOSEROWS(A1:D100, SEQUENCE(10, 1, 5, 1))

从第 5 行开始,提取连续 10 行(5~14行)。

结合 CHOOSECOLS 只取部分列:

=CHOOSECOLS(CHOOSEROWS(A1:D100, SEQUENCE(10, 5)), 1, 3)

场景 13:结合 UNIQUE — 去重列

=CHOOSECOLS(UNIQUE(A1:D100), 1, 3)

对去重后的数据,只保留姓名和工资列。


场景 14:动态表头生成

=HSTACK(CHOOSECOLS(数据, 1), {"新增列A", "新增列B"})

保留原始数据第一列,追加新的表头列。


场景 15:CHOOSEROWS 配合 TOCOL/TOROW 降维

=TOCOL(CHOOSEROWS(A1:D10, 1))

提取第一行,降维成一列,配合其他函数生成下拉列表。


四、常见错误处理

错误
原因
解决方法
#VALUE!
列/行号超出数组范围
确保选择的列号 ≤ 实际列数
#SPILL!
溢出区域有阻挡
清理溢出区域的合并单元格或内容
#CALC!
选择了不存在的行/列
检查 SEQUENCE 生成的数字是否超范围

五、版本说明

CHOOSECOLS 和 CHOOSEROWS 仅在 Excel 365(订阅版)和 Excel 2021 中可用。

Excel 2019 及以下版本不支持。

如果需要在老版本使用类似功能,可借助 INDEX 函数构建等价公式:

老版本取第1、3列:=INDEX(A:D, , {1,3})  (数组公式,需 Ctrl+Shift+Enter)

六、核心公式速查

需求
公式
取第1列和第3列
=CHOOSECOLS(数据, 1, 3)
取最后1列
=CHOOSECOLS(数据, -1)
取最后3列
=CHOOSECOLS(数据, -3, -2, -1)
去掉最后一列
=CHOOSECOLS(数据, -COLUMNS(数据))
取第1行和第5行
=CHOOSEROWS(数据, 1, 5)
取最后3行
=CHOOSEROWS(数据, -3)
Top 5 行
=CHOOSEROWS(SORT(数据, 列, -1), SEQUENCE(5))
奇数列
=CHOOSECOLS(数据, SEQUENCE(, COLUMNS(数据)/2, 1, 2))

总结: CHOOSECOLS 和 CHOOSEROWS 是精准数据提取的利器。配合 SORT、FILTER、VSTACK、HSTACK、SEQUENCE 等函数,可以构建强大的动态数据管道。比传统的 INDEX + COLUMN / ROW 方案简洁得多,代码可读性大幅提升。

如果你觉得这篇有用,欢迎转发给需要的朋友!