总结篇--FREQUENCY函数使用终极帖
来源:Excel应用之家
很多小伙伴们可能是第一次听说FREQUENCY这个函数。FREQUENCY这个函数是EXCEL最重要的函数之一,掌握了它,你就掌握了打开更高水平之门的钥匙。FREQUENCY函数计算数值在某个区域内的出现频率,然后返回一个垂直数组。
分段计频
我们首先选择单元格区域E2:E4,然后输入公式“=FREQUENCY($B$2:$B$10,$D$2:$D$4)”,CTRL+SHIFT+ENTER三键回车,并向下拖曳即可。
请注意,这里需要比分段区域多选择一个单元格,以存放大于最后一个分段的数值的频率。
单个数值计频
和上例相同,我们要比分段区域多选择一个单元格,然后输入下面的公式。
第一种情况:
数值71在分段区间内,FREQUENCY函数在大于等于71的最小值(75)所在的位置计频1
第二种情况:
数值99大于分段计频的所有数值,FREQUENCY函数在多出来的位置计频1
第三种情况:
数值3小于分段计频的所有数值,FREQUENCY函数在大于等于3的最小值(55)位置计频1
提问:如何把计频记在最大值呢?
求最大连续次数
求最大连续次数,在单元格C2中输入“=MAX(FREQUENCY(ROW(1:17),(A1:A16<>A2:A17)*ROW(1:17)))”即可。
思路:
(A1:A16<>A2:A17)*ROW(1:17)得到一个内存数组{1;2;0;0;0;6;0;0;9;0;0;0;0;14;0;16;#N/A}
利用FREQUENCY函数将ROW(1:17)在上述内存数组中计频,得到{1;1;0;0;0;4;0;0;3;0;0;0;0;5;0;2;1}
利用MAX函数求得最大值,即为最大连续次数
求某一数字最大连续次数是,在单元格C5中输入“=MAX(FREQUENCY(ROW(1:17),(A1:A17<>1)*ROW(1:17)))-1”即可。
思路:
思路同上面相似。只是在最后要减去1,原因是计频点的数字不是要求统计的那个数字,因此在计频时多记录了一个,因此要减去。
求不重复个数
下例中我们来求不重复数据的个数。这个问题我们以前也介绍过了很多种方法,利用SUM+COUNTIF可以求得不重复个数,也可以利用INDEX+SMALL+IF+MATCH可以求得不重复的清单。
在单元格D3中输入“=COUNT(0/FREQUENCY($B$2:$B$11,$B$2:$B$11))”即可。
思路:
利用FREQUENCY函数计频只记在大于等于当前数据的最小数据的位置上这一特点,对$B$2:$B$11进行计频,得到{2;1;2;0;1;1;2;0;1;0;0},显示为“0”的表示该位置上的数据由重复了
0/FREQUENCY($B$2:$B$11,$B$2:$B$11)得到{0;0;0;#DIV/0!;0;0;0;#DIV/0!;0;#DIV/0!;#DIV/0!}
利用COUNT函数忽略错误值的特点,统计出“0”的个数,也就是不重复数据的个数了
求某一条件下的最大值
如下例,求A列中绝对值最大的数。
求最大的数时,在单元格C2中输入“=LOOKUP(,0/FREQUENCY(-9^9,0-(A2:A7)^2),A2:A7)”即可。
思路:
0-(A2:A7)^2部分,(A2:A7)^2是处理负数的一种方法。0-(A2:A7)^2部分让其都变成负数
-9^9是一个足够小的负数,利用FREQUENCY函数在0-(A2:A7)^2中最小的那个值的位置上计频
利用LOOKUP函数求得该计频位置上的数值
求最大的整数时,在单元格C7中输入“=LOOKUP(,0/FREQUENCY(-9^9,0-(A2:A7&100)^2),A2:A7)”即可。
思路:
和上面思路大同小异。只需要注意一点:(A2:A7&100)^2,这部分使整数变得更大,小数微小变化,以便能抓取到整数
求某一条件下的第二大值
在单元格C2中输入“=LOOKUP(,0/FREQUENCY(1-MAX((A2:A7&100)^2),0-(A2:A7&100)^2),A2:A7)”即可。
思路:
和上一例相似。1-MAX((A2:A7&100)^2)部分保证了其大于分段区间中的最小值,从而最终可以提取到第二大的值了
查找最接近的值
在单元格C5中输入“=LOOKUP(,0/FREQUENCY(0,(A2:A9-C2)^2),A2:A9)”即可。
思路:
(A2:A9-C2)^2部分,越接近,差值越小
FREQUENCY函数在大于0的最小值的位置上计频
LOOKUP函数取得数值
提取单条件下不重复项
在单元格E2中输入“=LOOKUP(,0/FREQUENCY(1,ISNA(MATCH($B$1:$B$12,$E$1:E1,))*($A$1:$A$12=$D$2)),$B$1:$B$12)”并向下拖曳即可。
思路:
利用MATCH函数查找$B$1:$B$12在E列的位置信息,并利用ISNA函数将结果值转换为逻辑值后和条件$A$1:$A$12=$D$2的逻辑值结果相乘,得到一组内存数组{0;1;1;1;1;1;0;0;0;0;0;0}
FREQUENCY函数计频
LOOKUP函数取得数值
按条件计数
仍旧是上面这个例子。现在我们要求一下供应商A提供了多少种规格的产品。
在单元格F2中输入“=COUNT(0/FREQUENCY(ROW(A:A),MATCH($B$2:$B$12,$B$2:$B$12,)*($A$2:$A$12=D2)))-1”即可。
思路:
MATCH($B$2:$B$12,$B$2:$B$12,)*($A$2:$A$12=D2)部分按条件取得位置信息
FREQUENCY函数计频
COUNT函数统计数量
由于计频时多计频了一位,所以最后要减去1