谷歌表格MODE函数排除多值问题:获取次众数失败求助
解决谷歌表格中获取第二高频次数值的问题
我懂你现在的困扰——已经用=ARRAYFORMULA(mode(ifs(A2:A50<>0;A2:A50)))拿到了排除0后的最高频次数值,但想获取第二高的时候公式不管用,还是返回同一个结果对吧?这其实是MODE函数的特性导致的,它默认只会返回出现次数最多的第一个值,要拿到第二高的,我们得先把已经找到的最高频次值排除掉,再重新计算。
方法一:基于MODE函数的嵌套写法
你可以直接用这个嵌套公式,一次性完成排除0和最高频次值的操作:
=ARRAYFORMULA(MODE(IFS(A2:A50<>0; A2:A50<>MODE(IFS(A2:A50<>0; A2:A50)); A2:A50<>0; A2:A50)))
这个公式的逻辑很清晰:
- 内层的
MODE(IFS(A2:A50<>0; A2:A50))先算出排除0后的最高频次数值 - 外层的
IFS同时设置两个条件:排除0,并且排除刚才得到的最高频次数值 - 最后对剩下的数值用
MODE,就能得到第二高频次的结果了
如果你觉得嵌套公式看着复杂,也可以把最高频次值单独存到一个单元格(比如B1):
# B1单元格的公式 =ARRAYFORMULA(mode(ifs(A2:A50<>0;A2:A50)))
然后在其他单元格用这个简化版公式获取第二高值:
=ARRAYFORMULA(MODE(IFS(A2:A50<>0; A2:A50<>B1; A2:A50<>0; A2:A50)))
方法二:更灵活的频次排序法(适合存在并列最高的情况)
如果你的数据里有多个数值频次相同且都是最高(比如两个数都出现了5次),那MODE只会返回第一个,这时候用排序法会更可靠:
=INDEX(SORT(UNIQUE(FILTER(A2:A50; A2:A50<>0)); COUNTIF(A2:A50; UNIQUE(FILTER(A2:A50; A2:A50<>0))); FALSE); 2)
这个方法的步骤是:
FILTER(A2:A50; A2:A50<>0)先过滤掉所有0值UNIQUE提取出去重后的数值列表COUNTIF统计每个数值在原数据中的出现频次SORT把数值按照频次从高到低排序INDEX取排序后的第二个值,也就是第二高频次的数值
这个方法不管有没有并列的最高频次,都能准确拿到你想要的第二高结果。
内容的提问来源于stack exchange,提问作者Renato Dimas




