大家好,最近有同学问了一个非常经典的问题:“我想统计每个月的离职人数,离职日期在 A 列,为什么用 MONTH 函数提取月份后,没填离职日期的空格子全都被识别成了‘1月’?这数据全乱套了!”
这其实不是 Excel “中病毒”了,而是我们对 Excel 的日期逻辑还不够了解。今天我们就来拆解一下这个问题的根源,并教大家一个“王炸”公式,一步到位解决这个问题!
案例数据:一张表看懂“离职统计”
为了方便大家理解,我们将所有数据整合在了一张表中。左侧是源数据,右侧是我们的统计结果区。

深度分析:为什么空单元格会变成“1月”?
很多同学看到空格子被识别为 1 月,第一反应是函数写错了。其实,MONTH 函数本身非常诚实,它没有识别错误。
请看上表中的 C 列(错误演示)。在 C3 单元格 和 C6 单元格,因为 B 列对应的离职日期是空的,MONTH 函数却返回了数字 1。

在 Excel 的逻辑中:
空单元格 或者 数字 0,在日期序列中代表的是系统的起始日期:1900年1月0日(或1900年1月1日)。
既然它是“1900年1月”,那么 MONTH 函数提取月份时,自然就提取出了数字 1。
所以,函数没错,是它的“诚实”导致了我们的统计结果出现了一堆虚假的“1月离职”。既然不能怪函数,我们就要想办法“屏蔽”掉这些空格子。
解决方案:IF 函数逻辑判定 + 双负号转换
要解决这个问题,我们需要一套组合拳:先用 IF 把空单元格“按住”,再转换格式进行统计。
第一步:使用 IF 函数屏蔽空值
我们不能直接计算 MONTH,要先加一个判断:如果是空格子,请返回 0;如果不是空格子,再提取月份。
请看 D 列(正确辅助)。以 D3 单元格 为例,我们使用了以下公式:
=IF(B3="", 0, MONTH(B3))
B3="":逻辑判断。问 B3 单元格是不是空的。
0:如果逻辑成立(即 B3 是空的),强制返回 0。
MONTH(B3):如果逻辑不成立(即 B3 有日期),正常计算月份。

这样,空格子就变成了 0(如 D3 和 D6 所示),不会再干扰 1 月的数据了;而有日期的单元格则正常显示月份(如 D2、D4、D5)。
第二步:逻辑判定与双负号转换
现在我们有了修正后的月份数字,下一步是判断它是否等于我们要统计的月份。
请看右侧的统计区。F2 单元格 是我们的目标月份“1”。我们需要知道 D 列里有多少个数字等于 F2。
如果直接判断,Excel 会返回一串 TRUE(真)和 FALSE(假)。为了计算人数,我们需要把这些逻辑值变成 1 和 0。这时候,我们需要请出 Excel 里的“双负号(--)”来转换格式。
第三步:SUM 求和与绝对引用(关键步骤!)
最后,我们不用一行行算,直接用一个数组公式搞定。在 G2 单元格(最终统计人数),我们输入的是“王炸”公式:
=SUM(--(IF($B$2:$B$6="", 0, MONTH($B$2:$B$6))=F2))

这个公式做了什么?
IF($B$2:$B$6="", 0, ...):批量检查 B2 到 B6 区域,把空值变成 0,避免被误判为 1 月。
=F2:判断提取出的月份是否等于 F2 里的目标月份(1月)。
--:将判断结果 TRUE/FALSE 强制转换为数字 1/0。
SUM:将所有的 1 加起来。
结果验证:
G2 单元格 显示为 2。因为只有张三(1月)和赵六(1月)符合条件,李四和钱七虽然被错误识别为 1,但被 IF 函数拦截变成了 0,被成功排除。
G3 单元格 显示为 1。对应王五(2月)。
总结
这个问题的核心在于:
不要被 MONTH 函数的“诚实”误导,空单元格就是 1900年1月。
用 IF 函数做“守门员”,把空值强制变成 0。
用 -- 双负号做“翻译官”,把是/否变成 1/0。
最后用 SUM 加上 F4 绝对引用,一网打尽,统计完毕!
学会这一招,以后处理日期统计再也不怕空单元格捣乱了!赶紧打开 Excel 试一下吧!
刚才我们用 IF + MONTH + SUM + -- 的组合拳,成功解决了“空单元格冒充1月离职”的麻烦。但教程发出去后,后台收到了很多同学的“吐槽”:
“老师,公式确实好用,但每次修改完都要按 Ctrl+Shift+Enter 三键,一不小心忘了,结果就全变成 0 报错了!”
“那个双负号 -- 太烧脑了,我看了半天才理解是把 TRUE 变成 1,这要是教给部门里的新人,他们根本学不会啊!”
同学们的抱怨非常有道理。在实际职场中,我们不仅需要公式能解决问题,更需要它稳健、易读、好移植。今天,我们就引入现代 Excel 更优雅的函数组合,不按三键、不用烧脑的双负号,一步到位把这个问题彻底解决!
案例数据:一张表看懂优雅统计
为了方便大家对照,我们将源数据与统计结果整合在同一张表中。

解法一:SUMPRODUCT —— 不用按三键的数组大师
很多同学一听到“数组公式”就头大,因为老版本 Excel 的数组计算必须依赖三键结束。但 SUMPRODUCT 函数是一个奇葩,它自带数组引擎,天生就能处理数组运算,完全不需要按三键。
请看表中的 D 列统计区。我们在 D2 单元格输入以下公式:
=SUMPRODUCT((B$2:B$6<>"")*(MONTH(B$2:B$6)=C2))

这个公式做了什么?我们拆解来看:
(B$2:B$6<>""):用 <>"" 代替了上篇的 IF 函数。它的意思是“判断 B2 到 B6 区域不等于空”。这会直接生成一组逻辑值:非空返回 TRUE,空单元格返回 FALSE。
MONTH(B$2:B$6)=C2:提取月份,并与 C2 单元格的目标月份(1月)进行对比,同样返回一串 TRUE/FALSE。
神奇的乘号 *:这里我们用乘号代替了上篇的双负号 --。在 Excel 的逻辑中,TRUE 参与 四则运算 时会自动变成 1,FALSE 会变成 0。所以 TRUE * TRUE = 1,只要有一个 FALSE,结果就是 0。乘法自带强制转换功能,而且更符合普通人的理解直觉。
SUMPRODUCT:将乘积后的 1 和 0 全部加起来。
结果验证:D2 单元格显示为 2(张三、赵六)。D3 单元格显示为 1(王五)。李四和钱七对应的空行在第一步就被判定为 FALSE(0),乘以任何数都是 0,完美排除了 1 月的干扰。
解法二:COUNTIFS —— 纯逻辑的降维打击(终极王炸)
如果说 SUMPRODUCT 是进阶,那么 COUNTIFS 就是降维打击。这里我们要做一个思维反转:
既然空单元格在系统里被识别为 1900年1月0日,那只要表格里填了真实的离职日期,这个日期必然是大于 1900 年的。我们为什么非要去“提取月份”?
我们完全可以转换思路:不提月份了,直接告诉 Excel,帮我在这个区域里,数一数有多少个日期是大于等于“当月1号”,且小于等于“当月最后一天”的。
请看 E 列。我们在 E2 单元格输入终极王炸公式:
=COUNTIFS(B$2:B$6,">="&DATE(2023,C2,1), B$2:B$6,"<="&EOMONTH(DATE(2023,C2,1),0))

原理解析:
DATE(2023,C2,1):利用 DATE 函数,用年份 2023、月份取 C2 单元格的 1、日填 1,构建出 2023 年 1 月 1 日。
EOMONTH(DATE(2023,C2,1),0):EOMONTH 是返回某个月份的最后一天。第一参数是一个具体日期,第二参数 0 表示当月。这就自动算出了 2023 年 1 月 31 日。
">="&... 和 "<="&...:组合成日期区间条件。只有日期落在这个区间内才计数。
COUNTIFS 天然无视空单元格,因为空单元格是 0,根本不满足 >=2023/1/1 这个条件。连 IF 屏蔽和 MONTH 提取都不需要了!
结果验证:E2 单元格依然显示为 2。E3 显示为 1。没有数组,没有双负号,逻辑清晰直白。
横向对比总结
至此,我们有了三种解法,实战中该怎么选?
SUM(--(IF...)) 数组公式:适合老版本,但极易忘记三键导致报错,不推荐新手使用。
SUMPRODUCT:不用三键,逻辑清晰,是 老版本 Excel 用户的最佳选择。
COUNTIFS:完全抛弃了 MONTH 函数,用区间逻辑实现降维打击,新老版本通吃的首选方案,强烈推荐!
学会这两招,以后再处理离职统计、考勤统计等多条件计数场景,直接把公式丢进表格,不用记三键,也不用手动转换逻辑值,工作效率直线提升!赶紧打开 Excel 试一下吧!
在上一篇教程中,我们用 IF 函数成功解决了“空单元格冒充1月离职”的逻辑陷阱。但最近,又有同学带着一张满是 #VALUE! 报错的表格跑来找我:“老师,我明明按你教的写了公式,为什么有些人的离职日期一提取月份就报错?数据全崩了!”
这其实不是公式写错了,而是你的数据源里混入了“假日期”。今天我们就来深度拆解这个让无数职场人头疼的排错难题。
深度分析:为什么 MONTH 函数会“罢工”?
在 Excel 的底层逻辑中,日期本质就是一个数字序列号。比如 2023/1/15,在 Excel 眼里其实就是数字 44941。
MONTH 函数要正常工作,前提是它接收到了这个“序列号”。但是,如果单元格里的内容是文本型日期(比如带有小数点的 2023.1.15、被强制设为文本的 2023-1-15),Excel 无法将它们转化为序列号,MONTH 函数就会直接“罢工”,返回 #VALUE! 错误值。
为了讲透这个问题,我们将源数据与排错过程整合在一张表里。

三个隐藏陷阱与排雷方案
请看上表中的 C 列(陷阱类型),我们逐一拆解这些“伪装者”。
陷阱一:小数点/乱码分隔符
请看 B2 单元格,数据是 2023.1.15。很多人习惯用小键盘的点号输入日期,但 Excel 的标准日期分隔符是 / 或 -。Excel 不认识这种带小数点的文本,导致 D2 单元格直接报错 #VALUE!。

解决方案:选中 B 列,按下 Ctrl + H 调出查找替换,查找内容填入 .,替换为填入 /,点击全部替换,一键洗白。
陷阱二:单元格格式被设为“文本”
请看 B3 单元格,数据是 2023-1-15。表面看格式很标准,但如果你点击它,在编辑栏会看到它前面带了一个绿色的撇号(或者左上角有绿色三角)。这意味着它底层是纯字符串,不是日期序列号。
解决方案:选中数据区,点击菜单栏【数据】-【分列】。什么都不用管,直接点下一步,到第三步时,列数据格式选择“日期 - YMD”,点击完成。Excel 会强制将这列文本翻译成真日期。
陷阱三:前后隐藏空格
请看 B4 单元格,数据是 2023/1/20(注意 2023 前面有一个不可见的空格)。因为多了这个尾巴,Excel 的日期解析机制失效了。
解决方案:如果是批量处理,不想手动删空格,可以在公式里用 TRIM 函数来清洗。
终极防御公式:兼容一切的“金钟罩”
如果数据源太脏,每次都要手动去替换、分列太麻烦了。我们想要一个公式,不管遇到什么妖魔鬼怪,都能自动清洗并返回正确结果,绝不在老板面前报错 #VALUE!。
请看 E 列(终极防御公式)。在 E2 单元格,我们输入了以下“金钟罩”公式:
=IFERROR(IF(TRIM(B2)="", 0, MONTH(--TRIM(B2))), 0)

这个公式做了什么?我们来拆解这套组合拳:
TRIM(B2):先做“清洁工”,把 B2 单元格里前后的隐藏空格全部去掉。
--(双负号):做“翻译官”。-- 是数学运算,Excel 在进行数学运算时,会强制把能识别的文本型日期(比如 2023-1-15)转换为真日期序列号。如果遇到 B5 单元格的真日期,也不受影响。
IF(TRIM(B2)="", 0, ...):做“守门员”。如果清洗后单元格是空的,直接返回 0,避免又被识别成 1900 年 1 月。
IFERROR(..., 0):做“兜底神将”。如果遇到 B2 单元格的 2023.1.15 或 B6 单元格的 2023/13/15(13月不存在)这种连双负号都无法转换的彻底乱码,--TRIM(B2) 会报错 #VALUE!,IFERROR 会捕获这个错误,强制返回 0,保证表格清爽。
结果验证:
看 E 列的结果,完全不受数据脏乱差影响。B3 和 B4 这种带文本属性或空格的,被 -- 强转成功并提取月份。而 B2 和 B6 这种彻底乱码的,被 IFERROR 兜住变成了 0,不会报错。

总结
Excel 函数出错,70% 是因为数据源不规范。处理日期问题时,“清洗数据”往往比“写复杂公式”更重要。但在职场实战中,当我们无法左右别人填表的质量时,一套 TRIM + -- + IFERROR 的防御公式,就是你保证表格不崩盘的最强底气!
赶紧把这个“金钟罩”公式加进你的工作流里吧!
前面两篇我们解决了空单元格变1月、以及文本日期报错的坑。但实战中,HR 和行政同学最头疼的场景往往是这样:老板发来一张白表说:“小王,把今年各部门、各个月的离职人数做个交叉表给我。”
如果你还用前两篇的单列公式,销售部写一遍,技术部写一遍,1月写一遍,2月再写一遍……几十个公式拖拽下来,不仅手酸眼花,一旦下个月新增了离职数据,公式区域还得重新拉。今天,教你两招降维打击的神级操作,让老板对你刮目相看!
案例数据:一维源表与二维统计区
为了方便逻辑推演,我们将一维的源数据记录区与二维的交叉统计区整合在同一张表中。

解法一:COUNTIFS 混合引用 —— 函数法的降维打击
遇到二维交叉表,如果非要用函数,千万不要去写几十个独立公式。我们结合前面学过的 COUNTIFS,配合混合引用,只需写一次公式就能拖拽全覆盖。
请看上表,一维源数据在 A1:C7 区域,二维统计区在 A9:C12 区域。我们在 B10 单元格(销售部1月对应位置)输入以下“王炸”公式:
=COUNTIFS($B$2:$B$7, $A10, $C$2:$C$7, ">="&B$9, $C$2:$C$7, "<="&EOMONTH(B$9,0))

这个公式为什么这么聪明?原理解析如下:
多条件并列:COUNTIFS 支持多区域多条件。第一组 $B$2:$B$7, $A10 是判断部门等于 A10 单元格的“销售部”;第二组 $C$2:$C$7, ">="&B$9 是判断离职日期大于等于 B9 单元格的 1月1日。
EOMONTH 算月末:第三组 $C$2:$C$7, "<="&EOMONTH(B$9,0),利用 EOMONTH 自动算出 B9 单元格所在月份的最后一天(1月31日)。这样就构建了一个完整的日期区间,李四(C3)和钱七(C6)的空单元格天然被排除在外。
混合引用是灵魂:
$A10:在列号 A 前加 $,行号 10 不加。下拉时变成 A11、A12(对应技术部、人事部),右拉时 A 列锁死不偏移。
B$9:在行号 9 前加 $,列号 B 不加。右拉时变成 C9(对应2月1日),下拉时行号锁死。
结果验证:公式向右拖到 C10,向下拖到 C12。B10 单元格显示 1(张三),C10 显示 2(王五、孙八),B11 显示 0(李四空值被排除),完美实现全表计算!
总结与工具选择哲学
在职场中,Excel 高手的标志不是会写几百行的嵌套公式,而是知道在什么场景用什么工具。
规范的一维表:首选数据透视表。拖拽几下搞定,高效且不易出错,后续新增数据只需一键刷新。
不规范的二维表填报需求:如果老板发的是固定格式的交叉表让你填数,这时候再用 COUNTIFS 配合混合引用去“硬刚”。
学会这套组合拳,以后再复杂的离职统计、考勤汇总,你都能在 5 分钟内交出完美答卷!赶紧打开 Excel 试一下吧!
夜雨聆风