You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA中DateDiff无法返回准确工作日,代码计算工作日异常求助

问题排查与解决思路

嘿,这个问题我之前帮同事排查过类似的情况!大概率是你的函数里踩了两个常见的Excel公式坑,导致超过31天就返回1:

1. 误用DAY()函数计算天数差

很多新手会误以为用DAY(结束日期 - 开始日期)能得到天数差,但这完全错了!

举个例子:如果两个日期相差32天,结束日期-开始日期会得到Excel日期序列号32(Excel把1900/1/1作为序列号1),而DAY(32)会把这个序列号解析成1900年2月1日,然后提取这个日期的“日”部分——也就是1,所以结果就变成1了。

正确的做法是直接计算日期差,不用套DAY():
=结束日期 - 开始日期

2. 多余的MOD()取余操作

如果你的公式里不小心加了MOD(计算结果, 31),那超过31天的数值会被取余,比如32除以31的余数是1,自然就返回1了。检查一下公式里有没有不必要的取余逻辑。

3. 单元格格式设置错误

还有一种可能:你的公式计算结果是对的,但单元格格式被设置成了只显示“日”的格式(比如格式代码为d)。Excel会把天数差的数值当成1900年起始的日期序列号,比如32对应1900/2/1,显示出来就是1。这种情况只要把单元格格式改成「常规」或者「数值」就行。

正确计算剩余工作日的参考公式

如果需要排除周末和公司节假日,推荐用Excel自带的NETWORKDAYS函数:

=NETWORKDAYS(TODAY(), 项目结束日期, $A$1:$A$5)

(其中$A$1:$A$5是存放节假日的单元格区域,不需要的话可以去掉这个参数)

如果只是计算自然剩余天数,直接用:

=项目结束日期 - TODAY()

内容的提问来源于stack exchange,提问作者rheniel ilagan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:51:27