使用Excel VBA计算两个日期间相差的月份数及剩余天数
Excel VBA 计算两个日期相差整月数+剩余天数实现方案
Excel工作表的DateDiff函数支持MD参数计算整月差值之外的剩余天数,但该参数在VBA环境中不生效,可通过逻辑判断修正月份差实现同等效果。
你当前的测试代码直接用DateDiff("m")计算月份差,未考虑结束日期的「日」小于开始日期「日」的场景,会导致月份差多算1、剩余天数为负数的问题,修正后的完整实现代码如下:
Dim fromDate As Date Dim toDate As Date Dim diffMonth As Long Dim diffDay As Long Dim adjustDate As Date ' 转换输入文本为日期格式 fromDate = CDate(TextBox1.Value) toDate = CDate(TextBox2.Value) ' 计算初始月份差 diffMonth = DateDiff("m", fromDate, toDate) ' 计算加上整月后的调整日期 adjustDate = DateAdd("m", diffMonth, fromDate) ' 如果调整日期大于结束日期,说明月份多算1,需要减1 If adjustDate > toDate Then diffMonth = diffMonth - 1 adjustDate = DateAdd("m", diffMonth, fromDate) End If ' 计算剩余天数 diffDay = DateDiff("d", adjustDate, toDate) ' 输出英文格式结果可使用下行代码 ' TextBox3.Value = CStr(diffMonth) & " months " & CStr(diffDay) & " days" ' 输出中文格式结果 TextBox3.Value = CStr(diffMonth) & " 个月 " & CStr(diffDay) & " 天"
效果验证
用你给出的示例参数测试:
- 开始日期:7/8/2020
- 结束日期:6/3/2021
最终输出结果为10 months 26 days,完全符合预期。
小提示:如果需要兼容不同区域的日期格式,建议在转换日期前先对输入文本的格式做校验,避免
CDate转换报错。
内容的提问来源于stack exchange,提问作者Sabu Thomas
相关产品推荐
相关产品推荐

