关于本文
本文是通过利用生成式AI的自动化生成流程创建的。我们查阅了 Microsoft 官方的 TAKE、DROP 和 CHOOSECOLS 规范,将其整理为可以从同一个小型表中安全观察“获取”、“排除”和“选择列”之间差异的形式。验证状态:📘 已确认 Microsoft 官方规范・Excel 实机未确认
信息确认基准日:2026年10月5日
当您想从 Excel 表格中提取诸如“仅前2行”、“排除末尾1行”或“仅第1列和第3列”之类的内容时,能够在不删除原始数据的情况下将结果输出到其他位置的工具是 TAKE、DROP、CHOOSECOLS。
这三个函数虽然相似,但角色各不相同。
| 函数 | 指定内容 | 适用用途 |
|---|---|---|
| TAKE | 获取多少行、多少列 | 前 N 项、后 N 项 |
| DROP | 排除多少行、多少列 | 排除标题、排除末尾 |
| CHOOSECOLS | 保留哪几列 | 只提取需要的列 |
在同一个表中尝试这3种方法
在 A1:C4 中输入以下虚拟数据。
| 姓名 | 部门 | 销售额 |
|---|---|---|
| 青木 | 销售 | 120 |
| 伊藤 | 总务 | 80 |
| 佐藤 | 销售 | 150 |
首先,在另一个空单元格中输入以下内容。
=TAKE(A1:C4,2)
前两行将作为新数组返回。原表不会消失。
接下来将其更改为负数。
=TAKE(A1:C4,-2)
根据微软官方规范,如果在 TAKE 函数中为行数或列数指定负数,将从数组末尾开始获取。
DROP 意为“排除”而非“保留”
如果只想返回不包含标题行的数据部分,可以这样做:
=DROP(A1:C4,1)
排除前 1 行。
如果要排除末尾 1 行,则使用负数。
=DROP(A1:C4,-1)
将 TAKE 和 DROP 放在一起比较,就能看出区别。
flowchart LR
A["元の配列"] --> B["TAKE: 指定分を取る"]
A --> C["DROP: 指定分を除く"]
A --> D["CHOOSECOLS: 指定列を選ぶ"]
B --> E["新しい配列"]
C --> E
D --> E
CHOOSECOLS 按列号进行选择
适用于只想获取姓名和销售额、并希望去掉部门列的情况。
=CHOOSECOLS(A1:C4,1,3)
第 1 列和第 3 列将作为新的数组返回。
它与 DROP 的区别在于,它指定的不是“删除几列”,而是“返回哪几列”。
尝试只更改一处
=TAKE(A1:C4,2) 的 2 变为 -2。
这里需要注意的是,正数和负数的基准位置会发生变化。
同样,对于 DROP,
=DROP(A1:C4,1) =DROP(A1:C4,-1)
通过对比,可以确认头部和尾部的区别。
指定 0 会发生什么?
Microsoft Support 解释称,如果在 TAKE 或 DROP 的行数或列数中指定 0 且结果为空数组时,会返回 #CALC!。
有意尝试以下操作。
=TAKE(A1:C4,0)
由于未在真实的 Excel 环境中确认结果,因此显示结果不作为“实际测量”对待。请在实际的工作簿中进行尝试,确认其在你当前使用的 Excel 中是如何显示的。
Microsoft 表示,当 CHOOSECOLS 中列号的绝对值为 0 或超过数组的列数时,将会返回 #VALUE!。
实际工作中应该使用哪一个?
只想确认前 10 条数据
=TAKE(A2:F100,10)
这在需要查看海量数据的前面部分时非常有用。
导入 CSV 后想要去除表头
=DROP(A1:F100,1)
这可以理解为“除去第一行之后的其余部分”。
只想从报表中提取所需的列
=CHOOSECOLS(A1:F100,1,3,6)
通过指定列的顺序可以创建另一个表格。由于不会直接删除原表,因此也很适合用于创建确认用的视图。
预留溢出区域
这些都是动态数组函数。由于结果会扩展到多个单元格,如果输出位置存在现有数据,则无法正常溢出。
在断定“公式出错”之前,请同时检查结果展开的范围内是否还残留着数值。
在工作中应用时的思路
最大的优势在于,无需直接删除或重新排列原始数据,就能在其他区域仅提取所需的部分。
例如:
保持原样保留原始 CSV
使用 TAKE 查看前部样本
使用 DROP 排除表头
使用 CHOOSECOLS 仅提取所需的列
通过这种方式,可以将“原始数据”与“加工后数据”分离。
但是,列号固定的 CHOOSECOLS 会受到源数据列结构更改的影响。如果每月收到的文件列顺序发生变化,可以考虑使用 Power Query 等其他方法。
