大家好,我是你们的Excel老友——阿秋
前两篇文章分别讲了如何把时间日期合二为一、如何从日期时间中提取时间,有做生产统计的朋友私信问我:“我们厂里夜班凌晨报的产量,系统自动算成新的一天,但业务上得归到前一天,有没有办法自动判断?”
说实话,这个问题太典型了。但凡涉及到三班倒、跨天作业的工厂,几乎每天都要被它折磨一次。今天就拿一个公式,彻底帮你搞定夜班产量归属问题。
一、场景还原
假设你是一家制造工厂的生产统计员,每天要汇总各产线的“产量上报时间”。
你的主管说:“白班是早上8点到下午5点,产量报今天的;中班是下午5点到凌晨0点,产量也算今天的;夜班是凌晨0点到早上6点,产量算昨天的。”
翻译成人话就是:
上报时间段 | 归属日期 | |
|---|---|---|
08:00 ~ 17:00 | 当天 | |
17:00 ~ 23:59 | 当天 | |
00:00 ~ 06:00 | 前一天 |

=LET(a,MOD(D2,1),b,INT(D2),IFS(AND(a>=8/24,a<=1),b,AND(a>=0,a<8/24),b-1))
💡 这里为什么不直接用 IF 嵌套?
LET定义变量法更加直观简洁,学会LET函数,再复杂的条件判断都能信手拈来!
第1层:变量定义(LET函数)
LET 是Excel 365/2021的新函数,作用是给中间结果起名字,让长公式更易读。
小知识: Excel中的日期时间本质上是一个小数。整数部分是日期,小数部分是时间。MOD(D2,1) 相当于只保留小数,即时间;INT(D2) 向下取整得到日期。
条件3: TRUE, ""
兜底条件,所有不满足上述两个条件的(即06:00~08:00),返回空
=LET(a,MOD(D2,1),b,INT(D2),IFS(AND(a>=22/24,a<=1),b,AND(a>=0,a<6/24),b-1,TRUE,""))
=LET(a,MOD(D2,1),b,INT(D2),IFS(AND(a>=0,a<4/24),b-1,TRUE,b))
=IF(AND(MOD(D2,1)>=8/24,MOD(D2,1)<=1),INT(D2),IF(AND(MOD(D2,1)>=0,MOD(D2,1)<6/24),INT(D2)-1,""))
💡 IF嵌套法稍显复杂,尤其是条件比较多的时候。
相反,使用 LET 函数定义变量,更加直观和简洁
夜雨聆风