函数简介
TAKE 和 DROP 是 Excel 365 新增的数组裁剪函数,可以从数组的任意一端提取(TAKE)或移除(DROP)指定数量的行或列。它们是处理动态数组结果的利器,让数据提取变得前所未有的简单。
函数版本:Excel 365(Microsoft 365)及 Excel 2021 支持。Excel 2019 及更早版本 不支持。
语法结构
TAKE — 从数组中提取指定行/列
=TAKE(数组,行数,[列数])
DROP — 从数组中移除指定行/列
=DROP(数组,行数,[列数])
场景一:基础用法 — 提取 Top N 行(排行榜)
TAKE 最经典的用法:从排序后的数据中提取 Top N 条记录。
数据:销售表,按工资降序排列
公式:
=TAKE(SORT(A2:D100,4,-1),5)
效果:自动提取工资最高的前5名员工,无需手动筛选!
💡 这就是 TAKE + SORT 的黄金组合——动态排行榜的核心公式。
场景二:提取 Bottom N 行(倒数排名)
TAKE 的负值参数:从底部取。
=TAKE(SORT(A2:D100,4,1),3)
效果:提取工资最低的3名员工(升序后取前3 = 最小的3个)。
场景三:提取最后 N 行(DROP 的妙用)
DROP 的正/负值决定方向:
=DROP(A2:D20,5) ← 从顶部移除5行,返回第6行到最后=DROP(A2:D20,-5) ← 从底部移除5行,返回第1行到倒数第6行
实战:保留数据范围,去掉表头行:
=DROP(A2:D100,1) ← 去掉第1行(表头),返回纯数据
场景四:提取指定列(只取部分列)
TAKE/DROP 的第二参数控制列:
=TAKE(A2:D100,5) ← 取前5行,所有列=TAKE(A2:D100,5,2) ← 取前5行,只取前2列=TAKE(A2:D100,5,-2) ← 取前5行,只取最后2列
实战:提取数据表的前5行和最后2列:
=TAKE(数据区域,5,-2)
场景五:删除指定的行或列(DROP 负值)
DROP 的负值从数组末尾开始操作:
=DROP(A2:D100,1) ← 删除第1行(顶部),保留第2行到最后=DROP(A2:D100,-1) ← 删除最后1行(底部),保留第1行到倒数第2行=DROP(A2:D100,,1) ← 删除第1列(左侧),保留第2列到最后=DROP(A2:D100,,-1) ← 删除最后1列(右侧),保留第1列到倒数第2列
💡 第二参数用 , 占位表示跳过行数参数,直接控制列数。
场景六:保留指定范围,去掉表头和合计行
DRO P最适合的实战场景:保留中间数据,去掉首尾行。
假设第1行是表头,第100行是合计行:
=DROP(A2:D100,-1) ← 去掉最后1行(合计行),保留纯数据
配合 VSTACK 追加合计行:
=VSTACK(DROP(合并数据,-1), ← 去掉原有合计行 {"合计", "", SUM(工资列)} ← 追加新的合计行)
场景七:从右侧取列(TAKE 负列数)
TAKE 的列数也可以是负值,从右侧取:
=TAKE(A1:D100,5,-1) ← 取前5行,只取最后1列=TAKE(A1:D100,3,-2) ← 取前3行,只取最后2列
实战:从员工表中提取最后2列(工资和城市):
=TAKE(A2:D100,,-2) ← 取所有行,只取最后2列
场景八:删除右侧列(DROP 负列数)
=DROP(A2:D100,,-2) ← 删除最后2列,保留其他列
实战:去掉"备注"列,只保留主要数据:
=DROP(全表数据区域,,-1)
场景九:TAKE + FILTER — 先筛选再取 Top N
=TAKE(SORT(FILTER(A2:D100,C2:C100="销售部"),4,-1),5)
效果:先筛选销售部员工,按工资降序,取前5名(该部门 Top 5)。
场景十:TAKE + SEQUENCE — 动态序号提取
=TAKE(SEQUENCE(100),10) ← 取前10个序号=TAKE(SEQUENCE(100),-5) ← 取最后5个序号
配合其他函数:
=TAKE(SORT(数据,列,-1), COUNTA(条件区域)) ← 取所有满足条件的记录
场景十一:结合 UNIQUE 去重后取样本
=TAKE(SORT(UNIQUE(A2:A100)),10)
效果:从去重后的列表中取前10个样本。
场景十二:DROP 删除前N行(批量处理)
DROP 最常见的用法:去掉数据表的前几行(如标题行、说明行):
=DROP(A5:D100,3) ← 去掉前3行,从第4行开始保留=DROP(A1:D100,1) ← 去掉第1行(常见于含表头的情况)
结合 VSTACK 重组数据:
=VSTACK( {"姓名","部门","工资"}, ← 插入新表头 DROP(原始数据, 1) ← 去掉旧表头后的数据)
场景十三:TAKE + VSTACK 构建动态报表
=VSTACK( {"姓名","部门","工资","排名"}, TAKE(SORT(员工表,3,-1), 10), ← Top 10 {"","","合计",SUM(Take(员工表,,3))})
效果:自动生成 Top 10 排行榜,带合计行。
场景十四:DROP 处理二维数组
TAKE/DROP 对二维数组都有效:
原始数据: 10行×5列=TAKE(数据,5) → 10行×5列 → 前5行×全部列=TAKE(数据,5,3) → 10行×5列 → 前5行×前3列=DROP(数据,2) → 10行×5列 → 后8行×全部列=DROP(数据,,2) → 10行×5列 → 10行×后3列=DROP(数据,2,-2) → 10行×5列 → 后8行×前3列
场景十五:DROP 与其他函数的组合
| | |
|---|
| =DROP(UNIQUE(A:A), 1) | |
| =DROP(FILTER(A:D, B:B="销售"), -1) | |
| =DROP(TOCOL(A1:E10), 1) | |
| =TAKE(WRAPCOLS(A:A, 5), 1) | |
| =DROP(VSTACK(表1,表2), -1) | |
常见问题与注意事项
Q1:TAKE / DROP 支持哪些 Excel 版本?
- ✅ Excel 365(Microsoft 365 订阅版)— 完全支持
Q2:TAKE(DROP(...)) 是什么意思?
嵌套使用:先 DROP 删除一些行/列,再用 TAKE 提取指定数量。 例如:=TAKE(DROP(数据, 3), 5) = 去掉前3行后,再取前5行(相当于取原数组的第4~8行)。
Q3:为什么出现 #CALC! 错误?
TAKE/DROP 请求的行/列数超过了数组的实际大小。例如:对只有3行的数组用 TAKE(..., 10),超过部分返回空值而非错误。但如果用 DROP 删除的行数超过总行数,则会返回 #CALC! 错误。
Q4:负值参数怎么理解?
Q5:TAKE 和 INDEX 切片有什么优势?
- DROP:专门用于"去掉"操作,比 INDEX 更直观
速查表
| | |
|---|
| =TAKE(数据, 5) | =DROP(数据, -5) |
| =TAKE(数据, -5) | =DROP(数据, ROWS(数据)-5) |
| =TAKE(数据, , 3) | =DROP(数据, , -3) |
| =TAKE(数据, , -3) | =DROP(数据, , COLUMNS(数据)-3) |
| =TAKE(数据, 5, 2) | |
| | =DROP(数据, 3) |
| | =DROP(数据, -1) |
| =TAKE(SORT(数据, 列, -1), N) | |
| | =DROP(数据, 1) |
| | =DROP(数据, -1) |
总结
TAKE 和 DROP 是 Excel 365 数组处理的"裁剪双雄",核心优势:
- 语法简洁:比 INDEX 切片更直观,需要的参数更少
- 完美搭档:与 SORT、FILTER、UNIQUE、VSTACK 无缝组合
- 动态结果:配合动态数组函数,实现自动更新的数据提取
- 数组通吃:同时支持行和列的裁剪,处理二维数据得心应手
掌握 TAKE 和 DROP,让你的 Excel 数据提取效率翻倍!