如何计算去除法定节假日及周末的请假天数?

点击安装 「请假计算」应用模板 ,体验使用效果。

设计思路

利用NETWORKDAYS函数 计算出开始-结束日期之间完整的工作日数值扣减非周六/日的国家假日加上需要调休上班的日期


新建表单

首先,需要建立两张表单,一张记录法定节假日的表单,一张记录调休上班的表单。

(1)法定日期记录表

法定节假日里提前录入当年所有的法定节假日日期。

  • 【日期时间】:记录法定节假日
  • 【星期几】:判定是否为周末
  • 【数字-法定节假日标记】:法定节假日中日期若为周末,记0;若为周一至周五,记1。

由于用NETWORKDAYS计算时间差是除去周末的,法定节假日里为周一至周五的日期就是多请的假,后期计算的时候需要扣减这部分天数。


(2)调休日期记录表

调休日期记录表里录入提前当年调休上班的日期。

  • 【调休日期】:记录调休日期
  • 【数字-调休标记】:记1

调休都是周末本来休息的调休成上班,如果调休上班的这天请假了,那么用NETWORKDAYS函数计算总天数的时候已经扣掉了周末,后期就得再加上这一天。


请假表

录入完基础数据后开始设计搭建请假表。

请假表里设置了请假开始时间、请假结束时间以及实际请假天数。实际请假天数通过子表单将所有请假日期里的节假日和调休上班日期列举出来,然后针对其中的数字标计求和加减得到实际请假天数。


1、 子表单所需行数-数字

这个数字字段用来计算从请假到请假结束一共多少天,然后计算需要多少行子表单将所有请假日期的情况列举出来。

公式编写:

DAYS(请假结束时间,请假开始时间)+1


2、子表单

子表单里的序号和行数通过另外一张子表单整体数据联动来写入,关联字段为上述的「子表单所需行数-数字」字段。

新建一张子表单基础数据表

所需子表单行数这个数字的值写了多少,就添加多少行子表单数据,并从上至下依次添加序号。

附: 子表序号全集.xlsx,👈点击下载


子表单整体数据联动

请假表里通过计算出来的子表单所需行数联动子表单基础信息表里的同行数的子表单,并且将其序号一同联动过来。


日期函数

子表单里的日期通过函数公式来写入,当子表单序号为1的时候,第一行的日期为请假开始时间,后续的时间依次在前一个日期基础之上加上一天,直至子表单行数用完。

公式编写:

IF(子表单.序号=='1',请假开始时间,IF((VALUE(子表单.序号)<=子表单所需行数-数字+1),DATE(YEAR(请假开始时间),MONTH(请假开始时间),DAY(请假开始时间)+VALUE(子表单.序号)-1),' '))


子表单子字段数据联动

通过日期字段分别联动出法定节假日和调休上班信息,没有的则记录空值,不影响后续的时间计算。


实际请假天数

实际请假天数,通过NETWORKDAYS函数计算出这段时间里出去周末的工作日数,然后在加加上法定节假日不在周末的数据,最后减去调休上班在周末的数据,则得到实际的请假天数。

公式编写:

NETWORKDAYS(请假开始时间,请假结束时间)-SUM(子表单.数字-法定假日判断)+SUM(子表单.数字-调休判断)


效果演示

效果演示「点击体验」(由于子表单最多支持200行,效果演示最多支持请假天数200天以内的)


点击安装 「请假计算」应用模板 ,体验使用效果。


本文是否对您有帮助?
 有帮助
 没帮助
您是否遇到了以下问题?
如需获取即时帮助,请联系技术支持