VBA代码修改需求:将单元格日期输出从当日替换为上一个工作日
VBA代码修改需求:将单元格日期输出从当日替换为上一个工作日
嗨,我完全懂你卡在哪了——原本的代码直接输出当前日期,但你需要的是上一个工作日,尤其是周一的时候要自动跳回上周五对吧?其实有两种简单的解决办法,给你详细说说:
方法一:直接用Excel内置的工作日函数(最简洁)
Excel的WORKDAY函数本身就专门用来计算工作日,它会自动跳过周末,在VBA里我们可以通过WorksheetFunction调用它。只需要把原来的代码改成这样:
Range("B18").Value = WorksheetFunction.Workday(Date, -1)
解释一下:Date是当前系统日期,-1表示往前推1个工作日。比如今天是周一(5月29日),这个函数会自动返回上周五(5月26日);如果今天是周二到周五,就返回前一天的日期,完全符合你的需求。
要是之后你还需要排除节假日,只需要再加个参数指定节假日所在的单元格范围就行,比如:
'假设D2:D10是你的节假日列表 Range("B18").Value = WorksheetFunction.Workday(Date, -1, Range("D2:D10"))
方法二:手动判断星期数(适合理解逻辑)
如果你想自己控制判断逻辑,也可以用Weekday函数先获取当前日期的星期,再分情况处理:
Dim prevBusinessDay As Date '用vbMonday参数让周一=1,周日=7,这样判断更直观 Select Case Weekday(Date, vbMonday) Case 1 '当前是周一,往前推3天到上周五 prevBusinessDay = Date - 3 Case 7 '当前是周日,往前推2天到周五 prevBusinessDay = Date - 2 Case Else '周二到周六,直接往前推1天 prevBusinessDay = Date - 1 End Select Range("B18").Value = prevBusinessDay
两种方法都能解决你的问题,推荐第一种,既简洁又能轻松扩展节假日的处理~
备注:内容来源于stack exchange,提问作者Juvraj Garha
相关产品推荐
相关产品推荐

