在数据处理和分析的过程中,经常会需要将满足特定条件的数据提取出来进行研究,除了排序、查找、筛选等直接操作的方法之外,使用公式进行提取也是一种很常用的方法。

提取所有满足条件的数据

某公司部分员工薪资记录如图所示。

Excel使用公式高级筛选(使用公式提取和筛选数据)(1)

要根据此数据表,提取出"市场部"的所有员工编号,可在I2单元格中输入以下公式并向下复制填充:

=IF(ROW(1:1)>COUNTIF(C$2:C$102,"市场部"),"",INDEX(A$1:A$102,SMALL(IF(C$2:C$102="市场部",ROW($2:$102)), ROW(1:1))))

Excel使用公式高级筛选(使用公式提取和筛选数据)(2)

这是一个数组公式,在输入完成时必须同时按下<Ctrl Shif Enter>组合键

分几个部分来理解这个公式:

=ROW(1:1)>COUNTIF(C$2:C$102,"市场部")

此部分通过COUNTIF函数来对C列中的"市场部"进行计数,然后与公式所在的行号ROW进行比较。ROW(1:1)利用了引用的相对性,在公式向下复制的过程中会依次变为 ROW(2:2)、ROW(3:3)等,即返回当前是第几行公式。

Excel使用公式高级筛选(使用公式提取和筛选数据)(3)

这部分公式与 IF 函数相结合,判断公式所在行是否超过了"市场部"数据的个数,如果超出了,整个公式就返回空文本,如果没有超出再进行后面的运算。这是一种常见的容错处理方式,使得公式在向下填充过程中不会出现错误值,不满足条件的单元格统统显示为空文本。

=IF(C$2:C$102="市场部",ROW($2:$102))

Excel使用公式高级筛选(使用公式提取和筛选数据)(4)

这部分公式通过IF函数对C列的数据进行判断,如果是"市场部"就返回该行的行号。这里进行的是数组运算,会同时返回一组结果,即所有满足上述条件的行号都会同时返回在一个数组结果中。

=SMALL(IF(C$2:C$102="市场部",ROW($2:$102)),ROW(1:1))

Excel使用公式高级筛选(使用公式提取和筛选数据)(5)

这部分公式在前面公式的基础上用SMALL函数来依次提取前面得到的数组结果中的各个行号,其中第二个参数ROW(1:1)会随着公式的向下复制而返回一个递增的数值,因此根据公式所在行的增大,这里取得的满足条件的行号也会依次增大,这样就可以毫无遗漏的将所有满足条件的行号逐个取得。

=INDEX(A$1:A$102,SMALL(IF(C$2:C$102="市场部",ROW($2:$102)),ROW(1:1)))

Excel使用公式高级筛选(使用公式提取和筛选数据)(6)

这部分公式用INDEX函数根据前面公式所得的行号来具体定位A列中的员工编号数据。完整公式的运算结果如图所示。

Excel使用公式高级筛选(使用公式提取和筛选数据)(7)

学会了这些函数吗?当前有的通信可能对这些函数特别陌,没关系

点击一下视频可以掌握办公中的常用函数技巧

,