ARTICLE · 1119717
Excel的UNIQUE、SORT、TAKE、DROP、GROUPBY函数用法
先说一句:这些基本都是 动态数组函数,公式只写在一个单元格,回车后自动“溢出”结果;如果出现
#SPILL!,说明下方或右侧有东西挡路了。版本提醒:
UNIQUE / SORT / TAKE / DROP 在 Microsoft 365、Excel 2021 里基本都有;GROUPBY 比较新,旧版 Excel 或部分 WPS 可能没有。一、先准备一张示例数据
咱们统一用这张销售明细表,放在 A1:E11:
| 日期 | 地区 | 产品 | 销售员 | 销售额 |
|---|---|---|---|---|
| 2026/1/1 | 华东 | 手机 | 张三 | 1200 |
| 2026/1/1 | 华南 | 电脑 | 李四 | 5600 |
| 2026/1/2 | 华东 | 电脑 | 王五 | 4300 |
| 2026/1/2 | 华北 | 手机 | 赵六 | 900 |
| 2026/1/3 | 华南 | 手机 | 张三 | 1500 |
| 2026/1/3 | 华东 | 平板 | 李四 | 2200 |
| 2026/1/4 | 华北 | 电脑 | 王五 | 6100 |
| 2026/1/4 | 华南 | 平板 | 赵六 | 1800 |
| 2026/1/5 | 华东 | 手机 | 张三 | 1300 |
| 2026/1/5 | 华北 | 手机 | 李四 | 950 |
下面所有例子,都围着这张表转。
1. UNIQUE:去重,提取唯一值
函数作用
UNIQUE 用来把重复内容去掉,返回唯一值或唯一行。比如提取不重复的地区、不重复的产品、不重复的“地区+产品”组合。
=UNIQUE(array, [by_col], [exactly_once])
array:必填,要去重的区域或数组。by_col:可选。省略或
FALSE:按行比较,返回唯一行。TRUE:按列比较,返回唯一列。exactly_once:可选。省略或
FALSE:返回所有不同项。TRUE:只返回“只出现过一次”的项目。
示例 1:提取不重复地区
=UNIQUE(B2:B11)
结果:
| 地区 |
|---|
| 华东 |
| 华南 |
| 华北 |
它会按首次出现的顺序,把重复的“华东、华南、华北”只保留一次。
示例 2:提取“地区+产品”的唯一组合
=UNIQUE(B2:C11)
结果:
| 地区 | 产品 |
|---|---|
| 华东 | 手机 |
| 华南 | 电脑 |
| 华东 | 电脑 |
| 华北 | 手机 |
| 华南 | 手机 |
| 华东 | 平板 |
| 华北 | 电脑 |
| 华南 | 平板 |
注意,这里不是单列去重,而是把“地区+产品”当成一个整体组合去重。后面重复出现的“华东+手机”“华北+手机”就不会再出现。
2. SORT:排序,返回新数组
函数作用
SORT 可以对一个区域或数组排序,返回排序后的结果,但不会改动原数据。它是“生成一份排好序的副本”。
=SORT(array, [sort_index], [sort_order], [by_col])
array:必填,要排序的区域或数组。sort_index:可选,按第几列或第几行排序,省略默认第 1 列/行。sort_order:可选。1或省略:升序。-1:降序。by_col:可选。省略或
FALSE:按行排序,也就是我们最常见的“按某列排序”。TRUE:按列排序。
示例 1:按销售额降序排序
=SORT(A2:E11,5,-1)
解释:对 A2:E11 排序,按第 5 列“销售额”降序。
结果:
| 日期 | 地区 | 产品 | 销售员 | 销售额 |
|---|---|---|---|---|
| 2026/1/4 | 华北 | 电脑 | 王五 | 6100 |
| 2026/1/1 | 华南 | 电脑 | 李四 | 5600 |
| 2026/1/2 | 华东 | 电脑 | 王五 | 4300 |
| 2026/1/3 | 华东 | 平板 | 李四 | 2200 |
| 2026/1/4 | 华南 | 平板 | 赵六 | 1800 |
| 2026/1/3 | 华南 | 手机 | 张三 | 1500 |
| 2026/1/5 | 华东 | 手机 | 张三 | 1300 |
| 2026/1/1 | 华东 | 手机 | 张三 | 1200 |
| 2026/1/5 | 华北 | 手机 | 李四 | 950 |
| 2026/1/2 | 华北 | 手机 | 赵六 | 900 |

示例 2:多条件排序,先按地区升序,再按销售额降序
=SORT(A2:E11,{2,5},{1,-1})
解释:第 2 列地区升序,第 5 列销售额降序。
结果大致如下,具体地区中文顺序会受你的 Excel 排序语言设置影响:
| 日期 | 地区 | 产品 | 销售员 | 销售额 |
|---|---|---|---|---|
| 2026/1/4 | 华北 | 电脑 | 王五 | 6100 |
| 2026/1/5 | 华北 | 手机 | 李四 | 950 |
| 2026/1/2 | 华北 | 手机 | 赵六 | 900 |
| 2026/1/2 | 华东 | 电脑 | 王五 | 4300 |
| 2026/1/3 | 华东 | 平板 | 李四 | 2200 |
| 2026/1/5 | 华东 | 手机 | 张三 | 1300 |
| 2026/1/1 | 华东 | 手机 | 张三 | 1200 |
| 2026/1/1 | 华南 | 电脑 | 李四 | 5600 |
| 2026/1/4 | 华南 | 平板 | 赵六 | 1800 |
| 2026/1/3 | 华南 | 手机 | 张三 | 1500 |
这个写法很实用,做多关键字排序特别方便。
3. TAKE:从开头或末尾取行/列
函数作用
TAKE 就是从数组或区域里“拿一部分出来”。可以从开头拿,也可以从末尾拿;可以拿行,也可以拿列。
=TAKE(array, rows, [columns])
array:必填,数据区域。rows:必填。正数:从开头取几行。
负数:从末尾取几行。
columns:可选。正数:从开头取几列。
负数:从末尾取几列。
省略:取所有列。
示例 1:取前 3 行
=TAKE(A2:E11,3)
结果:
| 日期 | 地区 | 产品 | 销售员 | 销售额 |
|---|---|---|---|---|
| 2026/1/1 | 华东 | 手机 | 张三 | 1200 |
| 2026/1/1 | 华南 | 电脑 | 李四 | 5600 |
| 2026/1/2 | 华东 | 电脑 | 王五 | 4300 |
示例 2:取最后 2 行、最后 3 列
=TAKE(A2:E11,-2,-3)
解释:-2 表示从末尾取 2 行,-3 表示从末尾取 3 列。原区域是 A:E,最后 3 列就是 C、D、E,也就是产品、销售员、销售额。
结果:
| 产品 | 销售员 | 销售额 |
|---|---|---|
| 手机 | 张三 | 1300 |
| 手机 | 李四 | 950 |
TAKE 经常和 SORT 搭配,比如 TAKE(SORT(...),3) 就是“排序后取前三名”。
4. DROP:从开头或末尾删除行/列
函数作用
DROP 和 TAKE 像一对反义词。TAKE 是取一部分,DROP 是删掉一部分,返回剩下的内容。
=DROP(array, rows, [columns])
array:必填,数据区域。rows:必填。正数:从开头删几行。
负数:从末尾删几行。
0:不删行。columns:可选。正数:从开头删几列。
负数:从末尾删几列。
0或省略:不删列。
示例 1:去掉表头
=DROP(A1:E11,1)

解释:从 A1:E11 开头删掉 1 行,也就是删掉表头,返回纯数据区。
结果就是原来的 A2:E11:
| 日期 | 地区 | 产品 | 销售员 | 销售额 |
|---|---|---|---|---|
| 2026/1/1 | 华东 | 手机 | 张三 | 1200 |
| 2026/1/1 | 华南 | 电脑 | 李四 | 5600 |
| 2026/1/2 | 华东 | 电脑 | 王五 | 4300 |
| 2026/1/2 | 华北 | 手机 | 赵六 | 900 |
| 2026/1/3 | 华南 | 手机 | 张三 | 1500 |
| 2026/1/3 | 华东 | 平板 | 李四 | 2200 |
| 2026/1/4 | 华北 | 电脑 | 王五 | 6100 |
| 2026/1/4 | 华南 | 平板 | 赵六 | 1800 |
| 2026/1/5 | 华东 | 手机 | 张三 | 1300 |
| 2026/1/5 | 华北 | 手机 | 李四 | 950 |
示例 2:去掉最后一列“销售额”
=DROP(A2:E11,0,-1)
解释:0 表示不删行,-1 表示从末尾删 1 列,也就是删掉 E 列销售额。
结果:
| 日期 | 地区 | 产品 | 销售员 |
|---|---|---|---|
| 2026/1/1 | 华东 | 手机 | 张三 |
| 2026/1/1 | 华南 | 电脑 | 李四 |
| 2026/1/2 | 华东 | 电脑 | 王五 |
| 2026/1/2 | 华北 | 手机 | 赵六 |
| 2026/1/3 | 华南 | 手机 | 张三 |
| 2026/1/3 | 华东 | 平板 | 李四 |
| 2026/1/4 | 华北 | 电脑 | 王五 |
| 2026/1/4 | 华南 | 平板 | 赵六 |
| 2026/1/5 | 华东 | 手机 | 张三 |
| 2026/1/5 | 华北 | 手机 | 李四 |
DROP 很适合做数据清洗,比如去表头、去合计列、去辅助列。
5. GROUPBY:分组聚合,类似“函数版数据透视表”
函数作用
GROUPBY 可以按一个或多个字段分组,然后对值字段做求和、计数、平均、最大、最小等聚合。你可以把它理解成“不用拖数据透视表,直接用公式生成汇总表”。
=GROUPBY(row_fields, values, function, [field_headers], [total_depth], [sort_order], [filter_array], [field_relationship])
常用参数解释:
row_fields:分组字段,可以是一列,也可以是多列。比如按地区分组,或者按地区+产品分组。values:要聚合的值字段,比如销售额。function:聚合方式,比如SUM、AVERAGE、COUNT、MAX、MIN、PERCENTOF等。field_headers:标题处理方式。0:没有标题。1:有标题但不显示。2:没有标题但自动生成。3:有标题且显示。
咱们的示例数据带表头,所以常用3。total_depth:总计/小计控制。0:不要总计。1:底部显示总计。
其他层级不同版本略有差异,日常先用0或1。sort_order:排序方式。正数升序,负数降序,数字代表结果中的第几列。比如-3表示按第 3 列降序。filter_array:筛选数组,可选。field_relationship:多分组字段时的关系模式,可选,日常先不用深究。
示例 1:按地区汇总销售额
=GROUPBY(B1:B11,E1:E11,SUM,3)
解释:按 B 列地区分组,对 E 列销售额求和,3 表示有标题且显示。

结果:
| 地区 | 销售额 |
|---|---|
| 华东 | 9000 |
| 华南 | 8900 |
| 华北 | 7950 |
验算一下:
华东 = 1200 + 4300 + 2200 + 1300 = 9000
华南 = 5600 + 1500 + 1800 = 8900
华北 = 900 + 6100 + 950 = 7950
示例 2:按地区+产品汇总销售额,并按销售额降序
=GROUPBY(B1:C11,E1:E11,SUM,3,0,-3)
解释:
B1:C11:按地区和产品两列分组。E1:E11:对销售额求和。3:有标题且显示。0:不显示总计。-3:按结果第 3 列,也就是销售额,降序排序。
结果:
| 地区 | 产品 | 销售额 |
|---|---|---|
| 华北 | 电脑 | 6100 |
| 华南 | 电脑 | 5600 |
| 华东 | 电脑 | 4300 |
| 华东 | 手机 | 2500 |
| 华东 | 平板 | 2200 |
| 华北 | 手机 | 1850 |
| 华南 | 平板 | 1800 |
| 华南 | 手机 | 1500 |
这个公式特别像数据透视表,但它是动态的。源数据一改,结果自动更新。
最后给你几个组合套路
取销售额前 3 名
=TAKE(SORT(A2:E11,5,-1),3)
提取唯一地区,并按地区排序
=SORT(UNIQUE(B2:B11))
按地区汇总销售额,并按销售额降序
=GROUPBY(B1:B11,E1:E11,SUM,3,0,-2)
去掉表头,再取前 5 行
=TAKE(DROP(A1:E11,1),5)
记住一句话:UNIQUE 负责去重,SORT 负责排序,TAKE 负责取,DROP 负责删,GROUPBY 负责分组汇总。
这几个函数一旦组合起来,做动态报表会非常爽。