WPS FILTER()函数的用法(附带实例)
FILTER 函数可以对一个单元格区域或数组进行指定条件筛选,返回满足条件的数据数组,函数语法格式如下:
【实例 1】单条件按行筛选。在 F7 单元格输入公式:

图 1 单条件按行筛选
FILTER 函数的第 1 个参数引用 B5:D10 单元格区域,第 2 个参数筛选条件为姓名所在列,C5:C10 单元格区域等于 G4 单元格,把姓名为“飞鱼”筛选出来。
【实例 2】多条件按行筛选(多条件同时满足)。在 F18 单元格输入公式:

图 2 多条件按行筛选(多条件同时满足)
当需要对多个条件进行筛选时,因计算顺序问题,需要把每个条件加个括号,如果需要多个条件同时满足时,将每个条件之间用 * 运算符计算,当多个条件同时满足时,数据才会被筛选出来。
【实例 3】多条件按行筛选(满足任意一个条件)在 F28 单元格输入公式:

图 3 多条件按行筛选(满足任意一个条件)
如果只需满足任何一个条件时,将每个条件之间用 + 运算符计算,当多个条件中有任意一个条件满足时,数据就会被筛选出来。
【实例 4】多条件按行筛选,添加“全部”条件。在 F38 单元格输入公式:

图 4 多条件按行筛选,添加“全部”条件
在设置多个条件时,添加一个规则,如果任意一个条件输入了“全部”,则筛选这个条件的全部数据,在设置条件公式时,可以在每个条件后添加一个并且条件,条件列等于筛选值或筛选值等于“全部”,这样无论是正常的筛选值还是“全部”,都可以筛选出指定条件的数据。
在设置多个条件时,需要注意括号的位置及数量,可以先写好一组条件,测试条件正确后再依次添加多个条件,设置条件语法如下:
【实例 5】多条件按行筛选,筛选后根据“金额”降序排序。在 F51 单元格输入公式:

图 5 多条件按行筛选,筛选后根据“金额”降序排序
使用 FILTER 函数筛选后,可以使用SORT函数对结果中的一个或多个字段进行排序。
【实例 6】按行对多个值进行筛选。在 H59 单元格输入任意一个公式:

图 6 按行对多个值进行筛选
在对多个值进行筛选时,可以使用 MATCH 函数查找“条件列”每一个值在多个筛选值中的位置,如果“条件列”的值在多个筛选值中,MATCH 函数将返回大于 0 的整数,否则返回错误值 #N/A,最后使用 IFNA 函数把错误值 #N/A 转换为 0 即可。
在处理错误值 #N/A 时,使用 IFNA、IFERROR、ISNA 函数都是可以的。
【实例 7】按行对多个值进行筛选,并按筛选值顺序返回筛选结果。在 H69 单元格输入公式:

图 7 按行对多个值进行筛选,并按筛选值顺序返回筛选结果
使用 FILTER 函数筛选前,使用 SORTBY 函数先将要筛选的单元格区域根据筛选值进行排序,然后再使用 FILTER 函数筛选即可。
或使用 FILTER 函数筛选后,使用 SORTBY 函数排序,在 H69 单元格输入公式:

图 8 使用FILETR函数筛选后,使用SORTBY函数排序
【实例 8】按列筛选“数量”字段。在 D86 单元格输入公式:

图 9 按列筛选“数量”字段
使用 FILTER 函数时,当第 2 个参数的条件区域是一行时,函数可以筛选指定条件列,使用 LEFT 函数从左截取 2 位,判断是否等于“数量”,即可把所有“数量”字段列筛选出来。

图 10 第1个参数的数组与第2个参数的条件数组行数或列数不同
第 1 个参数引用 B5:D10 单元格区域,此单元格区域大小为 6 行 3 列,第 2 个参数条件单元格区域为 C5:C11,7 行 1 列,因为与第 1 个参数 6 行不同,所以函数返回错误值 #VALUE!。
2) 当第 2 个参数引用多行或多列时,函数返回错误值 #VALUE!。在 F17 单元格输入公式:

图 11 第2个参数引用多行或多列
FILTER 函数的第 2 个参数只接受单行或单列的数组条件,因为参数引用了 C15:D20 单元格区域,此单元格区域为 6 行 2 列,所以函数返回错误值 #VALUE!。
当有多行或多列条件时,可以使用 * 或 + 运算符,把多行或多列的数组通过计算转换为单行或单列,或使用 BYROW、BYCOL、MAP 循环类函数也可以将多行或多列的数组转换为单行或单列。
3) 当条件数组所有数据都没有满足条件时,函数会返回空的数组,对应错误值为 #CALC!。在 F27 单元格输入公式:

图 12 返回空的数组
因为 FILTER 函数的第 2 个参数条件数组中没有等于“飞小鱼”的值,所以函数返回空的数组,显示错误值 #CALC!。
可以通过指定第 3 个参数,将错误值 #CALC! 显示成指定值。在 F27 单元格输入公式:

图 13 将空的数组显示成指定值
4) 当条件数组包含错误值时,需要使用 IFERROR 函数将错误值转换为非错误值的任意值。在 F37 单元格输入公式:

图 14 条件数组包含错误值
使用 IFERROR 函数将条件数组中的错误值转换为空文本,否则 FILTER 函数返回条件数组中的第一个错误值。
【实例 1】单条件按行筛选。在 F7 单元格输入公式:
=FILTER(B5:D10,C5:C10=G4)如下图所示:

图 1 单条件按行筛选
FILTER 函数的第 1 个参数引用 B5:D10 单元格区域,第 2 个参数筛选条件为姓名所在列,C5:C10 单元格区域等于 G4 单元格,把姓名为“飞鱼”筛选出来。
【实例 2】多条件按行筛选(多条件同时满足)。在 F18 单元格输入公式:
=FILTER(B15:D20,(B15:B20=G14)*(C15:C20=G15))如下图所示:

图 2 多条件按行筛选(多条件同时满足)
当需要对多个条件进行筛选时,因计算顺序问题,需要把每个条件加个括号,如果需要多个条件同时满足时,将每个条件之间用 * 运算符计算,当多个条件同时满足时,数据才会被筛选出来。
【实例 3】多条件按行筛选(满足任意一个条件)在 F28 单元格输入公式:
=FILTER(B25:D30,(B25:B30=G24)+(C25:C30=G25))如下图所示:

图 3 多条件按行筛选(满足任意一个条件)
如果只需满足任何一个条件时,将每个条件之间用 + 运算符计算,当多个条件中有任意一个条件满足时,数据就会被筛选出来。
【实例 4】多条件按行筛选,添加“全部”条件。在 F38 单元格输入公式:
=FILTER(B35:D40,((B35:B40=G34)+(G34="全部"))*((C35:C40=G35)+(G35="全部")))如下图所示:

图 4 多条件按行筛选,添加“全部”条件
在设置多个条件时,添加一个规则,如果任意一个条件输入了“全部”,则筛选这个条件的全部数据,在设置条件公式时,可以在每个条件后添加一个并且条件,条件列等于筛选值或筛选值等于“全部”,这样无论是正常的筛选值还是“全部”,都可以筛选出指定条件的数据。
在设置多个条件时,需要注意括号的位置及数量,可以先写好一组条件,测试条件正确后再依次添加多个条件,设置条件语法如下:
=FILTER(数组,((条件列1 = 条件1) + (条件1 = "全部")) *((条件列2 = 条件2) + (条件2 = "全部")))
【实例 5】多条件按行筛选,筛选后根据“金额”降序排序。在 F51 单元格输入公式:
=SORT(FILTER(B48:D53,((B48:B53=G47)+(G47="全部"))*((C48:C53=G48)+(G48="全部"))),3,-1)如下图所示:

图 5 多条件按行筛选,筛选后根据“金额”降序排序
使用 FILTER 函数筛选后,可以使用SORT函数对结果中的一个或多个字段进行排序。
【实例 6】按行对多个值进行筛选。在 H59 单元格输入任意一个公式:
=FILTER(B59:D64,IFNA(MATCH(C59:C64,F59:F60,0),0)) =FILTER(B59:D64,IFERROR(MATCH(C59:C64,F59:F60,0),0)) =FILTER(B59:D64,ISNA(MATCH(C59:C64,F59:F60,0))=FALSE) =FILTER(B59:D64,NOT(ISNA(MATCH(C59:C64,F59:F60,0))))如下图所示:

图 6 按行对多个值进行筛选
在对多个值进行筛选时,可以使用 MATCH 函数查找“条件列”每一个值在多个筛选值中的位置,如果“条件列”的值在多个筛选值中,MATCH 函数将返回大于 0 的整数,否则返回错误值 #N/A,最后使用 IFNA 函数把错误值 #N/A 转换为 0 即可。
在处理错误值 #N/A 时,使用 IFNA、IFERROR、ISNA 函数都是可以的。
【实例 7】按行对多个值进行筛选,并按筛选值顺序返回筛选结果。在 H69 单元格输入公式:
=LET(arr,SORTBY(B69:D74,MATCH(C69:C74,F69:F70,0)),FILTER(arr,IFNA(MATCH(CHOOSECOLS(arr,2),F69:F70,0),0)))如下图所示:

图 7 按行对多个值进行筛选,并按筛选值顺序返回筛选结果
使用 FILTER 函数筛选前,使用 SORTBY 函数先将要筛选的单元格区域根据筛选值进行排序,然后再使用 FILTER 函数筛选即可。
或使用 FILTER 函数筛选后,使用 SORTBY 函数排序,在 H69 单元格输入公式:
=LET(arr,FILTER(B69:D74,IFNA(MATCH(C69:C74,F69:F70,0),0)),SORTBY(arr,MATCH(CHOOSECOLS(arr,2),F69:F70,0)))如下图所示:

图 8 使用FILETR函数筛选后,使用SORTBY函数排序
【实例 8】按列筛选“数量”字段。在 D86 单元格输入公式:
=FILTER(D78:K84,LEFT(D78:K78,2)="数量")如下图所示:

图 9 按列筛选“数量”字段
使用 FILTER 函数时,当第 2 个参数的条件区域是一行时,函数可以筛选指定条件列,使用 LEFT 函数从左截取 2 位,判断是否等于“数量”,即可把所有“数量”字段列筛选出来。
FILTER函数注意事项
1) 当第 1 个参数的数组与第 2 个参数的条件数组行数或列数不同时,函数返回错误值 #VALUE!。在 F7 单元格输入公式:=FILTER(B5:D10,C5:C11=G4)如下图所示:

图 10 第1个参数的数组与第2个参数的条件数组行数或列数不同
第 1 个参数引用 B5:D10 单元格区域,此单元格区域大小为 6 行 3 列,第 2 个参数条件单元格区域为 C5:C11,7 行 1 列,因为与第 1 个参数 6 行不同,所以函数返回错误值 #VALUE!。
2) 当第 2 个参数引用多行或多列时,函数返回错误值 #VALUE!。在 F17 单元格输入公式:
=FILTER(B15:D20,C15:D20=G14)如下图所示:

图 11 第2个参数引用多行或多列
FILTER 函数的第 2 个参数只接受单行或单列的数组条件,因为参数引用了 C15:D20 单元格区域,此单元格区域为 6 行 2 列,所以函数返回错误值 #VALUE!。
当有多行或多列条件时,可以使用 * 或 + 运算符,把多行或多列的数组通过计算转换为单行或单列,或使用 BYROW、BYCOL、MAP 循环类函数也可以将多行或多列的数组转换为单行或单列。
3) 当条件数组所有数据都没有满足条件时,函数会返回空的数组,对应错误值为 #CALC!。在 F27 单元格输入公式:
=FILTER(B25:D30,C25:C30=G24)如下图所示:

图 12 返回空的数组
因为 FILTER 函数的第 2 个参数条件数组中没有等于“飞小鱼”的值,所以函数返回空的数组,显示错误值 #CALC!。
可以通过指定第 3 个参数,将错误值 #CALC! 显示成指定值。在 F27 单元格输入公式:
=FILTER(B25:D30,C25:C30=G24,"无数据")如下图所示:

图 13 将空的数组显示成指定值
4) 当条件数组包含错误值时,需要使用 IFERROR 函数将错误值转换为非错误值的任意值。在 F37 单元格输入公式:
=FILTER(B35:D40,IFERROR(C35:C40,"")=G34)如下图所示:

图 14 条件数组包含错误值
使用 IFERROR 函数将条件数组中的错误值转换为空文本,否则 FILTER 函数返回条件数组中的第一个错误值。