FREQUENCY函数是一个较难掌握的Excel工作表函数,这篇文章收集整理了一组运用FREQUENCY函数的公式,用来统计不同值、唯一值和连续值的数量,希望能够帮助有兴趣的朋友更进一步熟悉掌握FREQUENCY函数。
先回顾一下FREQUENCY函数的语法:
FREQUENCY(data_array,bins_array)
其中:
注意:
统计不同值
仅数值
如下图1所示,在单元格区域B4:B12中有一列数值,我们想要知道有多少个不同值。
图1
很显然,在列表中的不同数值是1、2、3、7,共4个,使用的公式是:
=SUM(--(FREQUENCY(B4:B12,B4:B12)>0))
下面对这个公式进行解析,以帮助理解。
首先,使用单元格值来代替单元格引用。注意,这个公式不是数组公式。
=SUM(--(FREQUENCY({1;2;3;1;7;2;2;1;1},{1;2;3;1;7;2;2;1;1})>0))
这里的关键是:
因此,公式解析为:
=SUM(--({4;3;1;0;1;0;0;0;0}>0))
数组中的第1个数字4表明在列表中有4个1,第2个数字3表明列表中有3个2,依此类推。
现在,我们对列表中有多少个1、2等不感兴趣,只是对它们中至少有一个感兴趣。我们使用>0比较数组中的每个元素,从而为我们提供一个逻辑值数组。
=SUM(--{TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE})
接下来,两个一元减号运算符将TRUE值强制转换为1,将FALSE值强制转换为0。必须这样做,因为SUM函数不能对数组或引用中的逻辑值求和,但它可以对数字求和。
=SUM({1;1;1;0;1;0;0;0;0;0})
最终返回结果4。
文本和/或数值
如果想要在包含文本值的数据中获得不同值的数量,那么就会变得更加复杂,因为FREQUENCY函数会忽略文本值。
如下图2所示,在单元格区域B4:B12中包含一系列数值/文本数据,想要统计不同的数据数量。
图2
下面是使用的数组公式:
=SUM(--(FREQUENCY(IF(B4:B12<>"",MATCH("~"&B4:B12,B4:B12&"",0)),ROW(B4:B12)-ROW(B4)+1)>0))
如果数据中只包含数字,这个公式也能正常工作,但这个公式对于更多的数据明显会比前面的公式慢。
下面对这个数组公式进行解析。
于是,MATCH函数返回每个值第一次出现的位置:
{1;2;3;3;5;6;7;8;8}
结合上述情形,公式中的IF部分解析为:
IF({TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE},{1;2;3;3;5;6;7;8;8})
进一步返回:
{1;2;3;3;5;FALSE;7;8;8}
其中的FALSE值对应那个空单元格。
接下来,公式的ROW(B4:B12)-ROW(B4)+1部分返回一个连续整数数组,例如{1;2;3;4;5;6;7;8;9}。
因此,公式解析为:
=SUM(--(FREQUENCY({1;2;3;3;5;FALSE;7;8;8},{1;2;3;4;5;6;7;8;9})>0))
进一步得到:
=SUM(--({1;1;2;0;1;0;1;2;0;0}>0))
评估为:
=SUM(--{TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;TRUE;FALSE;FALSE})
得到:
=SUM({1;1;1;0;1;0;1;1;0;0})
返回结果:
6
统计唯一值
“唯一值”与“不同值”的区别在于,这些值仅出现1次。
仅数值
如下图3所示,想要获得单元格区域B4:B12中的唯一值的数量。
图3
很显然,列表中唯一出现1次的数值是3和7,即有2个数值。使用公式:
=SUM(--(FREQUENCY(B4:B12,B4:B12)=1))
我们仅想得到只出现1次的数值的数量,因此公式中使用=1。
文本和/或数值
如下图4所示,想要获得单元格区域B4:B12中的唯一值的数量。
图4
很显然,列表中唯一出现1次的数值是1、2、e和b,共4个。使用数公式:
=SUM(--(FREQUENCY(IF(B4:B12<>"",MATCH("~"&B4:B12,B4:B12&"",0)),ROW(B4:B12)-ROW(B4)+1)=1))
这个公式的原理与上文第2个公式相同,只是将原公式中的>0修改为=1。