【EXCEL】计算n个工作日后的日期(工作日包含补休日期)

用到的函数:WORKDAY、COUNTIFS

WORKDAY是计算“经过n天周六日和假期后的日期”,但我们的节假日经常需要补班所以某些周六日是需要作为“工作日”的。

因此利用countifs来计算workday公式计算得出的结果日期中包含多少天补班。

然后进行简单减法(减去多出来的那几天补班),反推出更适合中国宝宝体质的“返回在指定的若干个工作日之前/之后的日期”

注,这种方式有两个小问题:

1、补班后才休假,这种方式计算会错误,如果不多可以单独判断标记出来,进行修改,最为简便;

2、另外,这种办法计算,补班当天是包含在工作日里的

因为发现以上问题,后面加了个VBA方式的,可以解决上面两个问题

(下方列子为:初始日期(A列)经过2个工作日后是哪一天(D列)))

 把公式拆解了一下:

注:留言有小伙伴发现返回日期不一定是工作日,原因在于补班是在休假前就会出现。

公式我没办法解决了,vba不太会写,但还是努力思考了一下。

但有潜在问题:如果日期列表列出来的不全,那么计算有可能会出错。

计算逻辑:“当天”向后计算经过 n个工作日时,经过lm天,然后“当天"+m

基础准备:需要一张列明所有日期,且标注当天是不是节假日的表格

判断是不是节假日的计算方式可以参考我的 :

VBA代码:

Sub 测试()
Sheets("Sheet2").Select     '数据所在页签(sheet)(我习惯确认页签,不然在别的页签运行会错乱)
d = Range("G2").Value     'G2单元格写了需要计算经过多少个工作日
For i = 2 To 366        '需要计算的开始行(2)到结束行(366)
    k = Range("A" & i).Value    'A是日期所在列
    n = 0         '后面用来计算经过了几个工作日
    m = 0        '后面用来计算经过了几天
Do While n < d
 If Range("C" & i + m + 1).Value = "休" Then    'C是日期休假记录所在列,位置和条件可以更改
    m = m + 1
    n = n + 0
  Else
    m = m + 1
    n = n + 1
End If
  Cells(i, 4) = k + m     '4是第4列的意思,i指的是第i 行
Loop
Next
End Sub

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值