按条件提取指定的数据,FILTER和COUNTIF该如何搭配?

1职场实例


小伙伴们大家好,今天我们来解答一个公众号粉丝在后台留言咨询的Excel职场办公疑问如何通过公式的方法,按条件动态的提取指定的数据记录?这个问题小编想要用一个老且经典的函数和一个新且强大的函数,尝试解决它。


如下图所示

A1:C15为数据源区域,是每月各种水果的销量明细数据,A列为月份,B列为水果名称,C列为销量数值。我们想要通过E列给出的水果名称,在G:I列提取出这些名称对应的在数据源中的所有数据。并且我们改变E列的名称条件,G:I列的提取数据结果也会动态的随之变动


2解题思路


我们使用FILTER函数,因为FILTER函数是根据给定的条件筛选出对应的数据。然后我们利用COUNTIF函数指定FILTER函数在什么条件下执行筛选行为,即指定其特定的条件,这样就形成一个简单的解题思路


下面我们就来看一下具体操作方法。


我们在G2单元格输入函数公式

=COUNTIF(E2:E4,B2:B15)


COUNTIF函数 是对指定单元格区域中符合条件的单元格计数的函数。


函数参数

=COUNTIF(range,criteria)

=COUNTIF(要统计的单元格区域,设置的条件)


本例中我们使用COUNTIF函数统计B2:B15区域中的各个水果名称在E2:E4中出现的次数,如E2单元格中的“香蕉”在E2:E4区域中出现的次数非1即0,返回一个内存数组:

{0;1;0;1;1;1;0;1;0;1;0;0;0;0}


我们对COUNTIF函数做一个强制不等于0的判断

=COUNTIF(E2:E4,B2:B15)<>0


其结果会以逻辑值TRUE和FALSE在内存数组中显示出来,也可以理解为E2单元格中的“香蕉”在E2:E4区域中是否出现过,出现过的话用逻辑真值TRUE表示,没有出现过的话用逻辑假值FALSE表示,返回一个内存数组:

{FALSE;TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}


我们用COUNTIF函数作为FILTER函数的第2参数

=FILTER(A2:C15,COUNTIF(E2:E4,B2:B15)<>0)


FILTER函数 的作用是筛选符合条件的单元格。


函数参数

=FILTER(要返回内容的数据区域,指定的条件,[没有记录时返回的内容])


再通俗的说,第1个参数是要筛选的单元格区域或数组,第2个参数是筛选的条件,这2个参数是必须要输入和掌握的,其他参数可以根据实际需求省略或使用。


本例中原理非常好理解,就是用FILTER函数筛选COUNTIF函数作为筛选条件返回的内存数组:

{FALSE;TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE}

中逻辑值为真TRUE值时,筛选出A2:C15中符合条件的记录。


我们改变E列的水果名称条件后,筛选出来的G:I区域数据也会随之发生实时动态的变动。效果如下图所示