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

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

EDate函数
EDate是Equal Date的略写,英文意思就是“等值日期”,它求取某个指定日期前后偏移若干月的同一天的日期,函数形如“=EDate(日期/日期文本,偏移的月数)”,函数共2个参数,均为必选参数,分别是第一参数指定的某个日期,第二参数要前移(用负数表示)或后移(用正数表示)的月数。我们来举几小栗子尝尝,见图1:

图1 EDATE函数示例
①公式“=EDATE(B2,B3)”,将B2日期2023/1/1偏移0个月,也就是不偏移,因此得到对月同一天的日期是2023/1/1;
②公式“=EDate("2022/12/31",1)”,第一参数直接用文本指定,月份后移1个月,因此得到对月同一天的日期是2023/1/31;
③公式“=EDATE(E2,E3)”,将E2日期2022/3/30偏移E3(-1),也就是向前移动到2月,但2月是不可能有30日的,因此取2月最后一天,得到对月同一天的日期是2022/2/28;
④公式“=EDATE(F2,F3)”,将F2日期2022/3/3偏移F3(-1.59),1.59不是整数,函数自动舍去尾部0.59,也就是向前移动1,到2月,得到对月同一天的日期是2022/2/3。
注意第4行已设置为日期格式,如设置常规格式,所见应为数值。

EOMONTH函数。EOMONTH是End Of Month的首字母缩写,英文意思就是“某月的最后一天”。它求取某个指定日期前后偏移若干月的月末的日期,函数形如“=EOMONTH(日期/日期文本,偏移的月数)”,函数共2个参数,均为必选参数,分别是第一参数指定的某个日期,第二参数要前移(用负数表示)或后移(用正数表示)的月数。我们来举几小栗子尝尝,见图2:

图2 EOMONTH函数示例
①公式“=EOMonth(B2,B3)”,将B2日期2023/1/1偏移B3(0)个月,也就是不偏移,因此得到月末日期是2023/1/31;
②公式“=EOMonth(C2,C3)”,将C2日期2022/1/17偏移C3(1),也就是向后移动到2月,因此取2月最后一天,得到的日期是2022/2/28;
③公式“=EOMonth(D2,D3)”,将D2日期2022/3/30偏移D3(-1),也就是向前移动到2月,因此取2月最后一天,得到的日期是2022/2/28;
④公式“=EOMonth(E2,E3)”,将E2日期2022/3/3偏移E3(-1.59),1.59不是整数,函数自动舍去尾部0.59,也就是向前移动1,到2月,因此取2月最后一天,得到的日期是2022/2/28;
⑤公式“=EOMonth("2022/12/31",1)”,第一参数直接用文本指定,月份后移1个月,因此得到的日期是2023/1/31。
对于EOMonth这个函数,要强调的是:
①这个函数经常有人将第2个字母忘了写成EMonth,没有这样的函数的;
②如果仅第一个参数来求月末日期,EOMonth又显得太单薄了,加上个偏移月数,函数就完善了;
③如果指定的日期或加上偏移月数的日期无效,则提示#NUM!错误;
④注意第4行已设置为日期格式,如设置常规格式,所见应为数值;
指定的日期,不管是哪一天,只看日期中的月和偏移月数来求对月的月末日期。

WorkDay函数。Day的前面加上Work,英文意思就是“工作日”,计算某日期(起始日期)之前或之后,与该日期相隔若干工作日的某一日期的日期值。函数形如“=WorkDay(开始日期,偏移几个工作日,除外的休息日)”,有工作日就有休息日,不然得累死,机器还得加油呢。函数共3个参数,第一、第二参数是必选参数,第一参数指定开始计算的日期,一定要按照你电脑格式的日期来输入,日期可以直接输入或者是其他函数的计算结果,不能是文本;第二参数为数字,正数、负数均可,如不是整数,自动舍弃小数部分;第三参数是可选参数,除周六周日是休息日外,利用这个参数来声明要将哪些日期排除在工作日之外,可以是常量数组或者某单元格区域,参数中的日期不需要排序。
“开始日期”“结束日期”“间隔的工作日天数”,三要素,知二求一,这里是求的“结束日期”。

图3 WorkDay系函数示例
选中图3单元格区域I4:L4,在公式编辑栏输入“=WORKDAY(I2,I3,$H$12:$L$19)”,按Ctrl_Enter,就可以知道几个工作日后是哪一天了,你在窗口单位比如机关、政务窗口,经常会要求“过3(或n)个工作日再来”,用这个函数就可以知道是哪一天再来了。
验证单元格L4,从2023/9/27(周3)过后两个工作日,即27和28日,之后,29-6日是2023年国家法定假日,按理说,WORKDAY函数应该给出结果是2023/10/7,但10/7和10/8是双休,函数认为它应该休息日,又向后推移了两日,给出结果是2023/10/9。很显然,这是不对,WORKDAY函数不知道我国还有调班这种情况,10/7和10/8不是双休,应算工作日。
WORKDAY函数要注意以下几点:
①如函数第一参数、第三参数中有无效的日期,则会报错#Value!;
②如开始日期加上偏移几个工作日天数生成无效日期,则会报错#NUM!;
③如偏移几个工作日天数不是整数,将截尾取整;
④函数以周六、周日为休息日(非工作日)。

WorkDay.INTL函数。在WorkDay后加INTL(International,“国际”),英文意思就是“国际工作日”,计算可自定义休息日的、某日期(起始日期)之前或之后,与该日期相隔若干工作日的某一日期的日期值。函数形如“=WorkDay(开始日期,偏移几个工作日, 自定义的休息日字符或数字代码,除外的休息日)”。函数共4个参数,第一参数是必选参数,指定开始计算的日期,一定要按照你电脑格式的日期来输入,日期可以直接输入或者是其他函数的计算结果,不能是文本;第二参数为数字,正数、负数均可,如不是整数,自动舍弃小数部分;第三参数是可选参数,是在WorkDay的基础上插入的一个新参数;第四参数是可选参数,利用这个参数来声明要将哪些日期排除在工作日之外,可以是常量数组或者某单元格区域,参数中的日期不需要排序。
关于第三新参数,有两类可能的取值:一类是7位由0和1组成的字符串,如“0010010”“1001001”,其中1代表非工作日(休息日),0代表工作日,7位数代表从周1到周7(日),当然这个字符串不能是“1111111”,全休息日、没有工作日是不行的; 另一类是数字1-7(双休)和11-17(单休),其中1或省略代表周六和周日双休,2代表周日和周一双休…11代表周日单休,12代表周一单休…
“开始日期”“结束日期”“间隔的工作日天数”,三要素,知二求一,这里是求的“结束日期”。
选中图3单元格区域C3:C19,在公式编辑栏输入“=WORKDAY.INTL($C$2,D3,E3,$H$12:$L$19)”,按Ctrl_Enter,以单元格E10“=WORKDAY.INTL(45196,26,5.36,$H$12:$L$19)”为例,从2023/9/27开始的26个工作日后的日期是2023/11/11(以周三、周四为双休)。
与WORKDAY函数相比,WORKDAY.INTL函数增加了自定义休息日的功能,这是其优点,但也要注意以下几点:
①如函数第一参数、第四参数中有无效的日期,则会报错#NUM!;
②如开始日期加上偏移几个工作日天数生成无效日期,则会报错#NUM!;
③如第三参数使用数字,但不是整数,将截尾取整;如果周末字符串的长度无效或包含无效字符,则会报错#Value!。
下节预告:
日期时间函数之五:求日期间隔的Days系&YearFrac函数
Q:你要问,教程有配套的案例文件吗?
A:教程是很详细的,没有案例文件,对照图文是可以学会的,但使用案例文件更快捷些,如果需获取案例文件,可关注微信公众号【智汇会计连锁】,加QQ【案例专用群】581529975群文件自取(密码在公众号回复dt202301自动获取),第一课的案例文件免费送的哦。