哈嘍,大家好!
日歷隨處可見(jiàn),但你有沒(méi)有想過(guò)怎么用函數(shù)來(lái)制作呢 。
PS:本次所需技能如下:
1、條件格式設(shè)置。
2、隱藏函數(shù)DateDif。
3、返回一周中的第幾天函數(shù)Weekday。
步驟分解:
【1】DATEDIF(1,$B$1&'-'&$D$1,'d')
該步驟主要用好了DateDif函數(shù),主要返回2個(gè)日期間的相隔天數(shù),該函數(shù)有3參數(shù),DateDif(開(kāi)始日期,結(jié)束日期,要的結(jié)果表示),本例中的開(kāi)始日期是1900-1-1,結(jié)束日期是2018年10月1日,結(jié)果返回相差的天數(shù)'d')
因1900-1-1的序列數(shù)為1,故,用1表示;
因2018-8會(huì)被Excel識(shí)別為2018-8-1,故,只連接了年和月。
此公式得出的結(jié)果是43312的序列數(shù),而該序列數(shù)對(duì)應(yīng)的日期值是2018-7-31。
各位,重點(diǎn)來(lái)了,
2018-7-31在日歷中正好是上個(gè)月的最后一天。
【2】WEEKDAY(DATEDIF(1,$B$1&'-'&$D$1,'d'),2)
用Weekday函數(shù)得出【1】的日期2018-7-31是周幾,圖中很明顯是周二。
【3】IF(WEEKDAY(DATEDIF(1,$B$1&'-'&$D$1,'d'),2)<>
該步驟判斷【2】中得出的是周幾,即:如果【2】得出日期的星期<>
【4】=IF(WEEKDAY(DATEDIF(1,$B$1&'-'&$D$1,'d'),2)<>
此公式藍(lán)色部分是【1】至【3】得出日歷左上角日期的公式,紅色部分則是第4個(gè)步驟。用日歷左上角日期+相應(yīng)的行數(shù)和列數(shù),使其動(dòng)態(tài)的自加減。
Row()*7 當(dāng)前單元格行號(hào)*7,*7是因?yàn)樽髠?cè)相鄰日期間隔是7天。
Row()*7-21,-21是因?yàn)槭菑牡?行開(kāi)始的,所以第三行不需要加,所以-21。
如果是從第4行開(kāi)始的,則Row()*7-28;
如果是從第5行開(kāi)始的,則Row()*7-35;
如果是從第6行開(kāi)始的,則Row()*7-42;
以此類推…………
COLUMN()-1,是從第1列開(kāi)始的,所以-1,
如果是從第2列開(kāi)始的,則COLUMN()-2;
如果是從第3列開(kāi)始的,則COLUMN()-3;
以此類推…………
需要注意的地方:
1、對(duì)年和月單元格的引用需要“絕對(duì)引用”;
本文的核心:
=DATEDIF(1,$B$1&'-'&$D$1,'d')
=DATEDIF(1,'2018-8-1','d') 返回2018-7-31,即上個(gè)月的最后一天。
=DATEDIF(1,'2018-11-1','d') 返回2018-10-31,即上個(gè)月的最后一天。
另,=TODAY() 返回今天的日期
=DATEDIF(1,TODAY(),'d') 返回昨天的日期。
本文的函數(shù)思路:
(1)先用DATEDIF函數(shù)得出上月最后一天的日期。
(2)根據(jù)上月最后一天,用Weekday函數(shù)得出是周幾,這樣就得出了該日期在日歷中顯示的“大概”位置。
(3)根據(jù)一周不過(guò)7天規(guī)則,如果上月最后一天是周日(7),則正好是左上角的日期;如果最后一天不是周日(7),則用7減去該日(1到6),則得出左上角日期。
(4)得出左上角日期后,就可以自相加了,函數(shù):ROW()*7-21+COLUMN()-1。
好了,今天的分享到此結(jié)束,感謝小伙們們圍觀捧場(chǎng)。
圖文作者:趙中山
聯(lián)系客服