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

您所在的位置:网站首页 火星车是不是坏了 【EXCEL】计算n个工作日后的日期(工作日包含补休日期)

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

2024-05-31 22:14| 来源: 网络整理| 查看: 265

用到的函数: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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3