Excel 动态数组函数 #
函数概览 #
动态数组函数是 Excel 365/2019 引入的新功能,可以自动溢出结果到相邻单元格。
text
┌─────────────────────────────────────────────────────────────┐
│ 动态数组函数一览 │
├─────────────────────────────────────────────────────────────┤
│ │
│ FILTER 筛选数据 =FILTER(范围, 条件) │
│ SORT 排序数据 =SORT(范围) │
│ SORTBY 按列排序 =SORTBY(范围, 排序列) │
│ UNIQUE 唯一值 =UNIQUE(范围) │
│ SEQUENCE 序列 =SEQUENCE(行, 列) │
│ RANDARRAY 随机数组 =RANDARRAY(行, 列) │
│ │
└─────────────────────────────────────────────────────────────┘
FILTER 函数 #
语法 #
excel
=FILTER(array, include, [if_empty])
参数:
- array: 要筛选的范围
- include: 筛选条件(布尔数组)
- if_empty: 无结果时返回的值(可选)
基本用法 #
excel
=FILTER(A1:C10, B1:B10>1000)
筛选B列大于1000的行
=FILTER(A1:C10, A1:A10="销售")
筛选A列等于"销售"的行
=FILTER(A1:C10, B1:B10>1000, "无数据")
带默认值
多条件筛选 #
excel
AND 条件:
=FILTER(A1:C10, (A1:A10="销售")*(B1:B10>1000))
同时满足两个条件
OR 条件:
=FILTER(A1:C10, (A1:A10="销售")+(A1:A10="技术"))
满足任一条件
实际示例 #
text
数据:
A B C
1 部门 员工 销售额
2 销售 张三 5000
3 技术 李四 3000
4 销售 王五 8000
5 技术 赵六 4000
筛选销售部:
=FILTER(A2:C5, A2:A5="销售")
→ 销售 张三 5000
销售 王五 8000
筛选销售额大于4000:
=FILTER(A2:C5, C2:C5>4000)
→ 销售 张三 5000
销售 王五 8000
筛选销售部且销售额大于4000:
=FILTER(A2:C5, (A2:A5="销售")*(C2:C5>4000))
→ 销售 张三 5000
销售 王五 8000
嵌套使用 #
excel
筛选后排序:
=SORT(FILTER(A1:C10, B1:B10>1000), 3, -1)
筛选后取唯一值:
=UNIQUE(FILTER(A1:A10, B1:B10>1000))
SORT 函数 #
语法 #
excel
=SORT(array, [sort_index], [sort_order], [by_col])
参数:
- array: 要排序的范围
- sort_index: 排序列号(默认为1)
- sort_order: 排序顺序(1=升序,-1=降序)
- by_col: 是否按列排序(FALSE=按行,TRUE=按列)
基本用法 #
excel
=SORT(A1:C10) 按第一列升序排序
=SORT(A1:C10, 2) 按第二列升序排序
=SORT(A1:C10, 3, -1) 按第三列降序排序
=SORT(A1:C10, {1, 2}, {1, -1}) 按第一列升序、第二列降序
实际示例 #
text
数据:
A B C
1 产品 销量 金额
2 产品A 100 1000
3 产品B 200 1500
4 产品C 150 1200
按销量升序:
=SORT(A2:C4, 2)
→ 产品A 100 1000
产品C 150 1200
产品B 200 1500
按金额降序:
=SORT(A2:C4, 3, -1)
→ 产品B 200 1500
产品C 150 1200
产品A 100 1000
SORTBY 函数 #
语法 #
excel
=SORTBY(array, by_array1, [sort_order1], [by_array2, sort_order2], ...)
参数:
- array: 要排序的范围
- by_array: 排序依据的范围
- sort_order: 排序顺序
基本用法 #
excel
=SORTBY(A1:C10, B1:B10, 1) 按B列升序排序
=SORTBY(A1:C10, B1:B10, -1) 按B列降序排序
=SORTBY(A1:C10, B1:B10, 1, C1:C10, -1) 多列排序
SORT vs SORTBY #
excel
SORT:按列号排序
=SORT(A1:C10, 2, -1)
SORTBY:按范围排序
=SORTBY(A1:C10, B1:B10, -1)
SORTBY 更灵活,可以使用任意范围作为排序依据
UNIQUE 函数 #
语法 #
excel
=UNIQUE(array, [by_col], [exactly_once])
参数:
- array: 要提取唯一值的范围
- by_col: 是否按列比较(FALSE=按行,TRUE=按列)
- exactly_once: 是否只返回出现一次的值
基本用法 #
excel
=UNIQUE(A1:A10) 提取唯一值
=UNIQUE(A1:C10) 提取唯一行
=UNIQUE(A1:A10, , TRUE) 只返回出现一次的值
实际示例 #
text
数据:
A
1 产品
2 产品A
3 产品B
4 产品A
5 产品C
6 产品B
提取唯一值:
=UNIQUE(A2:A6)
→ 产品A
产品B
产品C
只返回出现一次的值:
=UNIQUE(A2:A6, , TRUE)
→ 产品C
统计唯一值个数 #
excel
=COUNTA(UNIQUE(A1:A10))
统计唯一值的数量
SEQUENCE 函数 #
语法 #
excel
=SEQUENCE(rows, [columns], [start], [step])
参数:
- rows: 行数
- columns: 列数(默认为1)
- start: 起始值(默认为1)
- step: 步长(默认为1)
基本用法 #
excel
=SEQUENCE(10) 1到10的序列
=SEQUENCE(5, 3) 5行3列的序列
=SEQUENCE(10, 1, 0, 2) 0, 2, 4, ..., 18
=SEQUENCE(5, 1, 100, -10) 100, 90, 80, 70, 60
实际应用 #
excel
生成日期序列:
=SEQUENCE(7, 1, TODAY(), 1)
生成月份序列:
=SEQUENCE(12, 1, DATE(2024, 1, 1), 31)
生成工作日序列:
=WORKDAY(SEQUENCE(10, 1, TODAY(), 1)-1, 1)
实际示例 #
text
生成序号:
=SEQUENCE(10)
→ 1
2
3
...
10
生成日期:
=TEXT(SEQUENCE(7, 1, TODAY()), "yyyy-mm-dd")
→ 2024-01-15
2024-01-16
...
RANDARRAY 函数 #
语法 #
excel
=RANDARRAY([rows], [columns], [min], [max], [integer])
参数:
- rows: 行数(默认为1)
- columns: 列数(默认为1)
- min: 最小值(默认为0)
- max: 最大值(默认为1)
- integer: 是否为整数(FALSE=小数,TRUE=整数)
基本用法 #
excel
=RANDARRAY() 0到1的随机数
=RANDARRAY(5, 3) 5行3列的随机数
=RANDARRAY(10, 1, 1, 100, TRUE) 1到100的随机整数
实际应用 #
excel
随机排序:
=SORTBY(A1:A10, RANDARRAY(10))
随机抽样:
=INDEX(A1:A100, RANDARRAY(10, 1, 1, 100, TRUE))
随机分配:
=INDEX({"A组", "B组", "C组"}, RANDARRAY(10, 1, 1, 3, TRUE))
函数组合应用 #
筛选排序 #
excel
=SORT(FILTER(A1:C10, B1:B10>1000), 3, -1)
先筛选,再按第三列降序排序
唯一值排序 #
excel
=SORT(UNIQUE(A1:A10))
提取唯一值并排序
条件唯一值 #
excel
=UNIQUE(FILTER(A1:A10, B1:B10>1000))
筛选后提取唯一值
动态报表 #
excel
=SORT(UNIQUE(FILTER(A1:C100, A1:A100=部门)))
根据部门动态生成唯一产品列表
实战案例 #
案例1:动态筛选报表 #
text
数据:
A B C D
1 日期 部门 产品 销售额
筛选某部门的数据:
=FILTER(A2:D100, B2:B100=H1)
筛选某日期范围:
=FILTER(A2:D100, (A2:A100>=开始日期)*(A2:A100<=结束日期))
案例2:排行榜 #
text
数据:
A B
1 员工 销售额
2 张三 5000
3 李四 8000
4 王五 6000
销售排行榜(前3名):
=INDEX(SORT(A2:B4, 2, -1), SEQUENCE(3), {1, 2})
→ 李四 8000
王五 6000
张三 5000
案例3:随机抽样 #
text
从100条数据中随机抽取10条:
=INDEX(A1:A100, RANDARRAY(10, 1, 1, 100, TRUE))
小结 #
动态数组函数是 Excel 365 的强大新功能:
| 函数 | 用途 | 示例 |
|---|---|---|
| FILTER | 筛选数据 | =FILTER(A:C, B:B>1000) |
| SORT | 排序数据 | =SORT(A:C, 2, -1) |
| SORTBY | 按范围排序 | =SORTBY(A:C, B:B, -1) |
| UNIQUE | 唯一值 | =UNIQUE(A:A) |
| SEQUENCE | 序列 | =SEQUENCE(10) |
| RANDARRAY | 随机数组 | =RANDARRAY(5, 3) |
接下来,让我们学习 条件统计与求和,掌握高级统计技巧。
最后更新:2026-04-11