Excel公式練習14:使用數組公式創建日曆

本次的練習是:如何使用數組公式創建如下圖1所示的日曆?

圖1

在單元格B1中輸入日期時,顯示該日期所在月的日曆,如下圖所示。

圖2

先不看答案,自已動手試一試。


公式思路

一周有7天,一個月有28天、29天、30天、31天,每個月的第一天開始的星期幾不一樣,如果分成含有7列的行的話,最少需要4行,最多需要6行。因此,需要創建6行×7列的數組:

{1,2,3,4,5,6,7;8,9,10,11,12,13,14;15,16,17,18,19,20,21;22,23,24,25,26,27,28;29,30,31,32,33,34,35;36,37,38,39,40,41,42}。

然後,找到想要創建日曆的月份的第1天,將代表這天的日期序號與數組相加,得到代表這個月的每天的序號,再減去該月份的第1天是當周的星期幾,讓日曆正好能夠與星期幾相對應。

公式解析

獲取當月日曆的數組公式:

=IF(DAY(calendar)>15,IF(ROW()=6,"",calendar),IF(DAY(calendar)<15,IF(ROW()>9,"",calendar),calendar))

其中,calendar是一個命名公式,即:

=week*7 weekday B3-B2

其中,week和weekday都是命名數組,即:

week:={0;1;2;3;4;5}

weekday:={1,2,3,4,5,6,7}

定義的名稱如圖3。

圖3

week*7 weekday得到數組:

{1,2,3,4,5,6,7;8,9,10,11,12,13,14;15,16,17,18,19,20,21;22,23,24,25,26,27,28;29,30,31,32,33,34,35;36,37,38,39,40,41,42}。

在上圖2所示的工作表中,在單元格B1中放置了想要創建的日曆月所在的日期。單元格B3中放置日期所在月份的第1天,B2放置這一天是這一周的第幾天。公式:week*7 weekday B3-B2得到從該月份第一天所在周的周一開始之後的42天的日期序列。

最後的數組公式中,=IF(DAY(calendar)>15,IF(ROW()=6,"",calendar)表示如果上個月的日期大於15且在開始行,那麼就顯示為空,即不顯示上月的日期;同樣,IF(DAY(calendar)<15,IF(ROW()>9,"",calendar移除了下月的日期。

小結

  • 創建日曆看似複雜,但理解其背後蘊藏的道理後似乎很簡單。

  • 命名數組的應用技巧,值得借鑒。


  • 下期預告:

    Excel公式練習15:求2018年母親節的日期

    如何使用公式求出2018年母親節的日期?


    本文屬原創文章,轉載請聯繫我(xhdsxfjy@163.com)或者註明出處。

    歡迎在下面留言,完善本文內容,讓更多的人學到更完美的知識。


    推薦閱讀:

    2017.05.28 今日日曆
    2017.02.04 今日日曆
    你要知道!中國的日曆,既不是陰曆,也不是陽曆 [一點資訊]

    TAG:練習 | 公式 | 日曆 | Excel公式 | Excel | 數組 |