案例:計(jì)算星期幾
除了年月日和時(shí)分秒,我們還會(huì)使用得是星期數(shù),如今天是星期幾。在Excel得函數(shù)中有WEEKDAY函數(shù),它得語(yǔ)法是:
WEEKDAY(serial_number,[return_type])
其中,serial_number參數(shù)是指定得日期;return_type參數(shù)對(duì)應(yīng)數(shù)字得含義如圖13-1所示。
圖13-1WEEKDAY函數(shù)參數(shù)說(shuō)明
簡(jiǎn)單記憶,使用數(shù)字“2”即可。因?yàn)閿?shù)字2返回得結(jié)果是以星期一為一周得起點(diǎn),將星期一到星期日返回結(jié)果對(duì)應(yīng)為1到7,這種方式相對(duì)其他參數(shù)來(lái)說(shuō),比較直觀,可以直接看出來(lái)當(dāng)前日期是星期幾。
如圖13-2所示,在D9單元格中輸入以下公式,并向下復(fù)制到D22單元格,即可得到C列對(duì)應(yīng)得日期:
=WEEKDAY(C9,2)
圖13-2WEEKDAY示例
13.2計(jì)算幾個(gè)月后得日期或月底日期
下面要介紹得兩個(gè)函數(shù),使用后可使公式大大縮短。
n月后日期:
EDATE(start_date,months)
n月后月底日期:
EOMonTH(start_date,months)
其中,參數(shù)months可以為正數(shù),也可以為負(fù)數(shù)或零。
EDATE函數(shù)是計(jì)算幾個(gè)月后對(duì)應(yīng)得日期,EOMONTH函數(shù)是計(jì)算幾個(gè)月后得月底得日期。
經(jīng)常有同學(xué)將EOMONTH拼錯(cuò)了,我們可以這樣記憶:EOMONTH縮寫(xiě)于EndOfMONTH,提取相應(yīng)得字頭就形成了EOMONTH。
1.常規(guī)使用
如圖13-3所示,C11單元格為任意日期,這里為2017/2/8,D列為EDATE函數(shù)得相應(yīng)公式。
圖13-3EDATE與EOMONTH得常規(guī)使用
D11單元格“=EDATE($C$11,5)”,計(jì)算5個(gè)月后得對(duì)應(yīng)日期,結(jié)果為2017/7/8。
D12單元格“=EDATE($C$11,0)”,計(jì)算0個(gè)月后得對(duì)應(yīng)日期,結(jié)果為2017/2/8。
D13單元格“=EDATE($C$11,-4)”,計(jì)算-4個(gè)月后得對(duì)應(yīng)日期,也就是4個(gè)月前,結(jié)果為2016/10/8。
F列為EOMONTH函數(shù)得相應(yīng)公式。
F11單元格=“EOMonTH($C$11,5)”,計(jì)算5個(gè)月后得月底日期,結(jié)果為2017/7/31。
F12單元格=“EOMonTH($C$11,0)”,計(jì)算當(dāng)月得月底日期,結(jié)果為2017/2/28。
F13單元格=“EOMonTH($C$11,-4)”,計(jì)算-4個(gè)月后得月底日期,也就是4個(gè)月前,結(jié)果為2016/10/31。
2.對(duì)月底日期得處理
對(duì)于月底最后一天日期分別是30和31日得情況,EOMONTH函數(shù)在處理過(guò)程中沒(méi)有任何差異,而EDATE函數(shù)處理時(shí)會(huì)有一些區(qū)別。
(1)日期為月底31日。
如圖13-4所示,起始日期為某月得31日,如2017/1/31,而幾個(gè)月后有31日得,就返回對(duì)應(yīng)得結(jié)果,如2017/7/31。如果當(dāng)月沒(méi)有31日,則返回相應(yīng)月份月底得最后一天,如2016/9/30、2017/2/28等。
圖13-4日期為月底31日
(2)日期不為月底31日。如圖13-5所示,起始日期為某月得月底,即30日,如2017/4/30,而幾個(gè)月后有30日得,就返回對(duì)應(yīng)得結(jié)果,如2017/10/30、2017/4/30。如果當(dāng)月沒(méi)有30日,則返回相應(yīng)月份月底得最后一天,如2017/2/28、2016/2/29。
圖13-5日期為月底不為31日
3.實(shí)戰(zhàn)
(1)案例:計(jì)算退休日期。
某人得生日為1980/9/15,按照男60周歲退休,女55周歲退休得規(guī)定計(jì)算(這里只是假設(shè)條件,實(shí)際情況請(qǐng)依據(jù)China規(guī)定),那么男女退休日期分別是哪天。
根據(jù)男60周歲退休,其公式為:
=EDATE(D33,60)
于是得到結(jié)果1985/9/15,很顯然,得到得是錯(cuò)誤結(jié)果,那么錯(cuò)在哪里了?EDATE講得是幾個(gè)月之后得日期,公式中得數(shù)字60表達(dá)得并不是60年,而是60個(gè)月。如圖13-6所示,正解為:
=EDATE(D33,60*12)
=EDATE(D33,55*12)
圖13-6計(jì)算退休日期
(2)案例:計(jì)算合同到期日。
某員工新入職,簽訂合同日期為2017/2/8,合同期限為3年,那么合同到期日是哪天?
這里分兩種情況來(lái)計(jì)算。
【計(jì)算方式1】合同期限按照整3年計(jì)算,則可以直接用EDATE函數(shù),在D39單元格輸入以下公式:
=EDATE("2017/2/8",3*12)
語(yǔ)法上沒(méi)錯(cuò),但必須結(jié)合工作中得實(shí)際情況來(lái)驗(yàn)證這個(gè)公式。該公式返回結(jié)果為上年/2/8,在簽訂合同時(shí),起止日期都算作工作日,按照這個(gè)計(jì)算結(jié)果,簽訂得合同并不是整3年,而是3年零1天。所以,有必要作一下修正,于是將D39單元格得公式修正為:
=EDATE("2017/2/8",3*12)-1
【計(jì)算方式2】公司HR為了統(tǒng)一管理,將合同到期日統(tǒng)一按照3年后得月底最后一天得日期簽訂,于是在D40單元格輸入以下公式:=EOMonTH("2017/2/8",3*12)
計(jì)算結(jié)果如圖13-7所示。
圖13-7計(jì)算合同到期日
(3)案例:當(dāng)年每月有多少天。
工作中計(jì)算每個(gè)月各有多少天,在前面我們通過(guò)DATE、YEAR、MONTH、DAY函數(shù)計(jì)算過(guò),但是公式有點(diǎn)長(zhǎng),現(xiàn)在換一種算法。
C列為1~12月,“1月1日”“2月1日”……“12月1日”屬于Excel標(biāo)準(zhǔn)日期格式,所以我們可以將1~12月得字段構(gòu)造成標(biāo)準(zhǔn)得日期格式,并且通過(guò)EOMONTH函數(shù)得到每月最后一天得日期,最后使用DAY函數(shù)提取其中得“日”,即可得到最終結(jié)果。順著此思路分步寫(xiě)出以下公式。
在E43單元格輸入公式:
=C43&"1日"
在F43單元格輸入公式:
=EOMonTH(E43,0)
在G43單元格輸入公式:
=DAY(F43)
如圖13-8所示,將分步得思路整合在一起,最終形成嵌套公式:=DAY(EOMonTH(C43&"1日",0))
圖13-8當(dāng)年每月有多少天
提示一點(diǎn),“1月1日”這種格式適用于中文版Excel,但在英文版得Excel中無(wú)法正常計(jì)算,遇到英文版Excel時(shí),整體DAY+EOMONTH得思路不變,將日期改為“1-1”得形式,就可以通用了,公式可寫(xiě)為:=DAY(EOMonTH(LEFTB(C43,2)&"-1",0))
英文版得Excel無(wú)法識(shí)別LEFTB函數(shù),無(wú)法準(zhǔn)確提取月份。因此,我們將LEFTB函數(shù)換成SUBSTITUTE函數(shù):=DAY(EOMonTH(SUBSTITUTE(C43,"月","-1"),0))