excel的mode函数专门用来解决一个很实用的问题:一长列数字里,哪个数出现的次数最多。平时统计销售频次、打分结果、到货时长、抽检数据这类表格,完全不用手动排序挨个数,直接用 mode 或 mode.sngl 就能返回单个众数;要是有好几个数出现的次数并列最高,用 mode.mult 就能把所有结果一次性列出来。
本次演示用的软件是Microsoft 365版Excel。最基础的MODE是旧版兼容函数,MODE.SNGL 和 MODE.MULT 是更推荐的写法。要是你用的是WPS或者很多年前的旧版Excel,最好先确认下自己的软件支不支持对应函数。
第一步:整理要统计的数字范围
先把所有要统计的数字放到同一列,或者同一块连续的单元格区域里就行,空白单元格不用删,里面的文本内容Excel会自动忽略,数字0也会正常参与计算。举个例子,我们把每月销量放在C5:C10的区域,找个空白结果单元格输入 =MODE.SNGL(C5:C10),Excel会直接返回出现次数最多的数值。

要是你做的表格要给用旧版Excel的人打开,也可以直接写 =MODE(C5:C10)。平时新建表格优先用 MODE.SNGL 就好,名字写得明明白白,只会返回一个出现频率最高的数字。
第二步:遇到并列结果时选用 MODE.MULT
要是你的数据里有好几个数出现的次数完全一样,都是最高频,MODE.SNGL 只会随便返回其中一个。想把所有并列的众数全列出来,先提前选中一整列连续的空白单元格当结果区,再输入 =MODE.MULT(B2:B10) 就行。用Microsoft 365的话,输完回车公式会自动向下溢出填充所有结果,旧版Excel可能需要按数组公式的确认方式操作才能出全结果。

这步的核心不是公式多难,而是一定要提前给结果留够空白单元格。并列的众数越多,返回的结果条目就越多,要是结果区下面塞了其他内容,365的动态数组版本就会弹出溢出报错。
第三步:检查返回结果是否符合业务含义
公式返回15、32、65这类结果的时候,意思是这几个数出现的次数完全相同,全都是最高频值。别把MODE.MULT返回的多个结果当成排序后的前几名,它根本不看数值大小,只判断出现次数是不是并列最高。要是你只需要一个代表值,直接用回 MODE.SNGL 就行,要把所有并列的高频值都列全,就留着 MODE.MULT 的结果。

MODE 函数语法
| 函数 | 语法 | 返回结果 | 适合场景 |
|---|---|---|---|
MODE |
=MODE(number1,[number2],...) |
一个最常见的数字 | 打开旧版工作簿、保持历史公式不变 |
MODE.SNGL |
=MODE.SNGL(number1,[number2],...) |
一个最常见的数字 | 普通统计里只需要单个众数 |
MODE.MULT |
=MODE.MULT(number1,[number2],...) |
一个或多个最常见的数字 | 需要列出全部并列众数 |
参数怎么填
| 参数 | 是否必填 | 填写方式 | 说明 |
|---|---|---|---|
number1 |
必填 |
B2:B20、A1:C5、12
|
第一组要统计的数字或单元格区域 |
number2... |
选填 |
D2:D20、35
|
追加的数字或区域,最多可继续补充多组参数 |
区域里如果有文本、逻辑值或空白单元格,通常不会参与统计;区域里的0会参与计算。直接写在参数里的错误值,或者无法转换为数字的文本,可能让公式返回错误。
常见错误怎么排查
| 现象 | 原因 | 处理办法 |
|---|---|---|
#N/A |
数据里没有任何重复数字,所以不存在众数 | 先用 COUNTIF 查看是否有数字出现2次以上 |
#VALUE! |
参数里混入无法处理的文本或错误值 | 清理错误单元格,或者只引用纯数字区域 |
| 结果和预期不一致 | 区域选少了、选多了,或包含隐藏的旧数据 | 重新框选数据区域,必要时把空白行和辅助列排除 |
| MODE.MULT 只出现一个结果 | 数据本来只有一个最高频值,或结果区域没有正确展开 | 确认并列频次是否真的相同,并给结果下方留出空白单元格 |
扩展示例
| 需求 | 公式 | 思路 |
|---|---|---|
| 找最常出现的评分 | =MODE.SNGL(C2:C200) |
适合1-5分评价、满意度打分 |
| 找最常见的到货天数 | =MODE.SNGL(F2:F500) |
快速判断订单交付最集中在哪一天数 |
| 列出并列的高频销量 | =MODE.MULT(B2:B100) |
用于发现多个销售量并列出现最多的情况 |
| 按筛选结果求众数 | =MODE.SNGL(FILTER(C2:C200,A2:A200="华东")) |
先筛出华东区域,再统计众数 |
| 没有重复值时给出提示 | =IFERROR(MODE.SNGL(B2:B100),"没有重复数字") |
避免把 #N/A 直接留给阅读报表的人 |
MODE函数天生就适合统计数字类的高频值。要是你想找出现次数最多的文本,比如商品名、地区名、员工姓名这类内容,就得换用 COUNTIF、数据透视表,或者搭配 UNIQUE、SORTBY 这类函数来实现。


















