【EXCEL】计算n个工作日后的日期(工作日包含补休日期) |
您所在的位置:网站首页 › 火星车是不是坏了 › 【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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |