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