日期时间函数之五:求日期间隔的Days系&YearFrac函数
兔年春节就要到了,李老师总想送点什么给大伙儿。

知识无价,大家学习学习EXCEL的日期和时间函数,都在这儿了,共5讲,今天这是第4讲。

Days函数
Day的复数Days,英文意思就是“天数”,在EXCEL里如果要计算两个日期之间的天数就用它,函数形如“=Days(结束日期,开始日期)”,对,你没有看错,也没有印错,结束日期在前。函数共2个参数,均为必选参数,日期一定要按照你电脑格式的日期来输入,日期可以直接输入或者是其他函数的计算结果,不能是文本。图1列出了Days函数的计算结果,C4公式为“=DAYS(C3,C2)”,公式可向右复制两格。

图1 Days和Days360函数示例
Days函数的计算结果等同于两个日期直接相减,也就是“结束日期-开始日期”(图1),这样看,是不是结束日期在前呀,你这样一想,就容易记住Days函数的参数为啥子是结束日期在前了!

Days360函数
Day的复数Days,英文意思就是“天数”,再加个360,意思就是按照一年360天,计算两个日期之间的天数,函数形如“=Days360(开始日期,结束日期)”,这一次正常了,开始日期在前。函数共2个参数,均为必选参数,日期一定要按照你电脑格式的日期来输入,日期可以直接输入或者是其他函数的计算结果,不能是文本。图1列出了Days360函数的计算结果,C6公式为“=DAYS360(C2,C3)”,公式可向右复制两格。

NetWorkDays函数
在WorkDay前加Net(“净”)、后加s(“天数”),英文意思就是“净工作日天数”,计算起始日期与结束日期之间的工作日天数。函数形如“=NetWorkDays(开始日期,结束日期,除外的休息日)”,有工作日就有休息日,不然得累死,机器还得加油呢。函数共3个参数,第一、第二参数是必选参数,指定开始计算的日期和结束日期,一定要按照你电脑格式的日期来输入,日期可以直接输入或者是其他函数的计算结果,不能是文本;第三参数是可选参数,除周六周日是休息日外,利用这个参数来声明要将哪些日期排除在工作日之外,可以是常量数组或者某单元格区域,参数中的日期不需要排序。
“开始日期”“结束日期”“间隔的工作日天数”,三要素,知二求一,这里是求的“间隔的工作日天数”。函数名称中有s,自然求的是复数数值,也就是间隔天数,这样理解就易记得了。
选中图2单元格区域I9:L9,在公式编辑栏输入“=NETWORKDAYS(I7,I8,$H$12:$L$19)”,按Ctrl_Enter,以单元格L9为例,从2023/9/27(周3)到2023/10/6,中间是2个工作日,如果将2023/10/6改为2023/10/7或2023/10/8,结果不变,原因是NETWORKDAYS不知道10/7和10/8是调班的,应算工作日的。
NETWORKDAYS函数要注意以下几点:
①如函数各参数中有无效的日期,则会报错#Value!;
②如开始日期大于结束日期,结果将为负值;
③函数以周六、周日为休息日(非工作日)。

NetWorkDays.INTL函数。在NetWorkDays后加INTL(International,“国际”),英文意思就是“国际通用净工作日天数”,计算可自定义休息日的起始日期与结束日期之间的工作日天数。函数形如“=NetWorkDays(开始日期,结束日期,自定义的休息日字符或数字代码,除外的休息日)”。函数共4个参数,第一、第二参数是必选参数,指定开始计算的日期和结束日期,一定要按照你电脑格式的日期来输入,日期可以直接输入或者是其他函数的计算结果,不能是文本;第三参数是可选参数,是在NetWorkDays的基础上插入的一个新参数;第四参数是可选参数,利用这个参数来声明要将哪些日期排除在工作日之外,可以是常量数组或者某单元格区域,参数中的日期不需要排序。
关于第三新参数,有两类可能的取值:一类是7位由0和1组成的字符串,如“0010010”“1001001”,其中1代表非工作日(休息日),0代表工作日,7位数代表从周1到周7(日),当然这个字符串不能是“1111111”,全休息日、没有工作日是不行的; 另一类是数字1-7(双休)和11-17(单休),其中1或省略代表周六和周日双休,2代表周日和周一双休…11代表周日单休,12代表周一单休…
“开始日期”“结束日期”“间隔的工作日天数”,三要素,知二求一,这里是求的“间隔的工作日天数”。函数名称中有s,自然求的是复数数值,也就是间隔天数,这样理解就易记得了。

图2 NetWorkDays系函数示例
选中图2单元格区域D23:D39,在公式编辑栏输入“=NETWORKDAYS.INTL($I$7,$I$8,E23,$H$12:$L$18)”,按Ctrl_Enter,以单元格D30“=NETWORKDAYS.INTL(44927,45291,5.36,$H$12:$L$18)”为例,从2023/1/1(周3)到2023/12/31,全年有243个工作日。
与NETWORKDAYS函数相比,NETWORKDAYS.INTL函数增加了自定义休息日的功能,这是其优点,但也要注意以下几点:
①如函数第一、二、四参数中有无效的日期,则会报错#Value!;
②如开始日期大于结束日期,结果将为负值;
③如第三参数使用数字,但不是整数,将截尾取整;如果周末字符串的长度无效或包含无效字符,则会报错#Value!。

YearFrac函数
Frac的英文意思就是“部分的、小数的”,与Year结合起来可理解为“年+小数位”,在EXCEL里如果要计算两个日期之间的天数(取整天数)占一年(总天数)的比例就用它,函数形如“=YearFrac(开始日期,结束日期,总天数的统计方法码)”,函数共3个参数:第一、二参数为必选参数,日期一定要按照你电脑格式的日期来输入;第三参数为可选参数,有5种可能的取值,0或默认-美式NASD 方法,1-据实,2-360,3-365,4-欧式。
函数中NASD在用于计算两个日期之间的天数的 NASD 方法中,如果起始日期(如结算日期)的日期值是 31,则将其视为 30。如果日期值是2 月的最后一天,则不进行调整,因此在这种情况下 2 月少Y于30 天。如果结束日期(如到期日期)的日期值是 31 且起始日期的日期值早于同个月份的第 30 天,将结束日期视为下个月份的第一天。否则,将其视为同个月份的第 30 天,从而产生 0 天。相对而言,在欧洲方法中,总是将某月中的第 31 天视为同个月份的第 30 天。总是将 2 月视为具有 30天。因此,如果 2 月的最后一天是第 28 天,将其视为第 30 天。这段话很长,做一了解即可,不要死记,你只要知道有美式和欧式的区别。
我们经常能听到一句话,叫“时间过半,任务过半”,这个函数就是用来验证前半句的,究竟时间进展到什么程度了。下面看看图3的几个小栗子吧:
选中单元格区域C4:E8,在公式编辑栏输入公式“=YEARFRAC(C$2,C$3,$B4)”,敲击Ctrl_Enter,自动填充公式。

图3 YearFrac函数示例
YearFrac函数需要注意的是:
①所有参数都将被截尾取整,如图1第6行和8行;
②开始日期,结束日期不需要在同一年内,而且开始日期不一定在结束日期之前,两个日期对调后,结果不变;
③如果开始日期或结束日期不是有效日期,函数将返回#VALUE!;
④如果总天数的统计方法码不在0到4之间,函数将返回#NUM!;
⑤为便于观察,已预先将单元格区域C4:E8设置为百分比格式。
结束语:
至此,我们花了5天,将EXCEL日期和时间函数全部学完了,最后将这24个函数总结于一图。大家时时温习,牢记于心,灵活运用。另外,还有个隐藏函数,我们在《财务精英都是Excel控:CFO手把手教你学管理会计》(某东、某宝、某当均有销售)P201有讲解。

往期文章:
1.日期时间函数之一:八小基本函数
2.日期时间函数之二:Week系三函数
3.日期时间函数之三:拼凑和转值换四函数
4.日期时间函数之四:求日期四函数
最后,祝每个人新春快乐、万事如意!
智达年年顺利财源滚滚,汇入岁岁平安福寿多多。
会当事事如意皆是吉祥,计得家庭幸福顺心安康。
Q:你要问,教程有配套的案例文件吗?
A:教程是很详细的,没有案例文件,对照图文是可以学会的,但使用案例文件更快捷些,如果需获取案例文件,可关注微信公众号【智汇会计连锁】,加QQ【案例专用群】581529975群文件自取(密码在公众号回复dt202301自动获取),第一课的案例文件免费送的哦。
Q:有这5课的合集吗?
A:日期和时间的5课程函数已经做成电子书,格式为chm,同样置于【案例专用群】581529975里面。