choosecols的作用是从整块表格里按列号提取指定列,最常用的写法是 =choosecols(数据区域,列号1,列号2,...)。比如你想从销售明细里只留「订单号、客户、销售额」三列,直接输入 =choosecols(a1:g7,1,3,6),回车之后结果会自动溢出生成一张新表。
当前操作软件:Microsoft Excel。软件版本:16.93。示例里A到G列是原始销售明细,I列右侧的空白区域用来展示CHOOSECOLS返回的结果。这个函数很适合做临时报表、整理导出列,还能搭配FILTER或者SORT快速调整字段顺序。
先理清楚源表的字段位置,本次例子里A到G列总共7列,分别对应订单号、销售日期、客户、城市、商品、销售额、负责人。后面写列号的时候,选中的区域内部从左往右数,A列是第1列,C列是第3列,F列是第6列。注意列号是按你选中的区域内部计算的,不是按工作表自带的绝对列标来算。
选中空白单元格I2,输入 =CHOOSECOLS(A1:G7,1,3,6)。按回车之后,Excel会自动把A1:G7里的第1、3、6列提取到右侧,表头和下面的明细数据一起出结果。要注意公式所在单元格的右边和下方得留够空白,不然会弹出溢出错误。
要是你想把销售额放到最前面,根本不用复制粘贴原表,直接把参数里的列号顺序改成 =CHOOSECOLS(A1:G7,6,3,1) 就行。CHOOSECOLS完全跟着你写的列号顺序输出内容,第一个参数填6,生成的结果第一列就会显示销售额;同一个列号还能重复写,临时复制某一列很方便。
源区域A1:G7总共只有7列,要是你把公式写成 =CHOOSECOLS(A1:G7,8),不存在的第8列会让Excel返回 #VALUE! 错误。如果列号没写错却弹出 #SPILL!,基本都是输出区域里已经填了别的内容,把公式右边和下方的单元格清空之后重新计算就好。
完整语法是 =CHOOSECOLS(array,col_num1,[col_num2],...)。其中 array 是你要提取列的数组或者单元格区域,col_num1 是必填的第一个列序号,后面可以继续加更多要提取的列序号。
| 参数 | 是否必填 | 说明 | 本例 |
|---|---|---|---|
array |
必填 | 要从中提取列的区域或数组 | A1:G7 |
col_num1 |
必填 | 第一个要返回的列序号 |
1 返回订单号 |
[col_num2] |
选填 | 继续指定更多列,顺序就是输出顺序 |
3,6 返回客户和销售额 |
| 负数列号 | 可用 | 从数组右侧倒数取列 |
-1 返回最后一列负责人 |
CHOOSECOLS属于Microsoft 365的动态数组函数,本次示例在16.93版本的Excel上验证通过。永久授权的旧版Excel大概率没有这个函数,打开带这个公式的文件会显示 _xlfn.CHOOSECOLS 或者名称错误。如果使用 WPS 或旧版 Excel,需要先确认是否支持该函数。
#VALUE! 大多是列号写错了,比如源区域只有7列你填了个8;#SPILL! 就是结果要展开的位置被别的内容占了;#NAME? 基本是当前Excel版本不支持CHOOSECOLS,或者你把函数名拼错了。还有个很容易踩的坑:要是你把选中的区域从 A1:G7 改成 B1:G7,列号会重新从B列开始算第1位,不会接着按原来A列的序号数。
只想提取最后一列的负责人信息,可以写 =CHOOSECOLS(A1:G7,-1);想把销售额和负责人放到报表最前面,可以写 =CHOOSECOLS(A1:G7,6,7,1,3);如果要先筛选出负责人是「林晓」的所有记录,再提取订单号、客户、销售额三列,公式可以写成 =CHOOSECOLS(FILTER(A1:G7,G1:G7="林晓"),1,3,6)。实际做报表的时候,先用FILTER筛选行,再用CHOOSECOLS精简列,比反复复制粘贴要稳得多,处理速度也更快。