如何在Excel Power Query中为日期列添加指定工作日(跳过周末)
在Excel Power Query中计算添加指定工作日后的日期(跳过周六周日)
针对你需要基于date起始日期列和transit days工作日数列,计算跳过周六周日的目标日期的需求,这里提供直接可用的实现方案:
实现步骤
- 将数据导入Power Query编辑器,确认
date列格式为日期类型,transit days列格式为数值类型。 - 点击「添加列」→「自定义列」,粘贴以下M语言代码:
= let StartDate = [date], WorkDaysNeeded = [transit days], // 递归函数:逐个日期检查,跳过周末 AddWorkDay = (currentDate as date, remainingDays as number) as date => if remainingDays = 0 then currentDate else let NextDate = Date.AddDays(currentDate, 1), // 周一为一周第0天,周六=5、周日=6,判断是否为周末 IsWeekend = Date.DayOfWeek(NextDate, Day.Monday) >= 5 in if IsWeekend then AddWorkDay(NextDate, remainingDays) else AddWorkDay(NextDate, remainingDays - 1) in AddWorkDay(StartDate, WorkDaysNeeded)
- 重命名自定义列为
Target Date,关闭并上载数据即可。
代码逻辑说明
- 递归函数
AddWorkDay从起始日期开始逐个往后推日期:- 若下一天是周六或周日,直接跳过继续推;
- 若下一天是工作日,就减少剩余需添加的工作日数,直到剩余天数为0时返回当前日期。
- 用
Date.DayOfWeek(NextDate, Day.Monday)将周一设为一周起始日,周六、周日返回值分别为5和6,方便快速判断周末。
验证示例
对于起始日期2023年4月21日(周五),添加5个工作日:
21日(五)→22日(六,跳过)→23日(日,跳过)→24日(一,剩余4)→25日(二,剩余3)→26日(三,剩余2)→27日(四,剩余1)→28日(五,剩余0)
最终结果为2023年4月28日,符合预期。
注意事项
- 若
transit days存在0或负数,可在函数中添加判断逻辑,比如当WorkDaysNeeded <=0时直接返回StartDate; - 如需排除法定节假日,可扩展函数加入节假日列表进行额外判断。
内容的提问来源于stack exchange,提问作者Vinay Kumar
相关产品推荐
相关产品推荐

