在本例中,将使用数组公式实现一个动态的日历,根据本机的时间显示当前一个月的日历。
下面先说明这个日历的实现步骤:
1.在A1单元格内输入公式“=TODAY()”,在A2单元格内输入“=A3”,将A2单元格复制到B2:G3单元格区域。
2.设置A2:G2单元格的格式,使其分类为日期的星期,选中A3:G8单元格区域。输入以下公式:
DATE(YEAR(A1),MONTH(A1),1)-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1),2)+{1,2,3,4,5,6,7}+{0;1;2;3;4;5}*7)
3.按Ctrl+Shift+Enter组合键确认输入。
现逐步分析输入的这个数组公式:
①因为一个月最多会跨越6个星期,所以需要一个6行7列(一星期7天)的单元格区域来显示这个日历。
②这个公式的后部,即“{1,2,3,4,5,6,7}+{0;1;2;3;4;5}*7”,构成了这个日历的框架。如果在一个6 行7列的单元格区域内输入这个输入公式,可以得到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}
这个数姐的元素按照从第一行由左到右,再由下一行由左到右顺序,逐个加一递增。这个数组公式以此来实现每日的递增。
③这个公式的前部,即“DATE(YEAR(A1),MONTH(A1),1)”,通过调用A1单元格,来得到本月一日的日期。
④本月一日的日期和6行7列的二维数组相加,又可得到一个6行7列的二维数组。这个二维数组实现了日期的逐一显示。但是这个按照曰期逐一显示的二维数组是从2号开始的,而且2号显示在了星期一的位置。
⑤“WEEKDAY(DATE(YEAR(A1),MONTH(A1),1),2)”部分用来对日期的位置进行调整。以2007年1月为例(2007年1月1日为星期一),可以得到值“-1”。这样就对按日期逐一显示的6行7列二维数组做出了调整,2007年1月1日出现在二维数组第一行的第一个位置,而之后的日期逐一显示。
通过IF函数,可以使日历中的非当月日期不显示。
4.选中A3:G8单元格区域,把公式修改为:
=IF(MONTH(DATE(YEAR(A1),MONTH(A1),1))<>
MONTH(DATE(YEAR(A1),MONTH(A1),1)-WEEKDAY
(DATE(YEAR(A1),MONTH(A1),1),2)+{1,2,3,4,5,6,7}+{0;1;2;3;4;5}*7),""
,DATE(YEAR(A1),MONTH(A1),1)-WEEKDAY(DATE(C4YEAR(A1),MONTH(A1),1),2)+{1,2,3,4,5,6,7}+{0;1;2;3;4;5}*7)
最后按Ctrl+Shift+Enter组合键确认输入。
这样就以数组公式的方式显示出日历。通过修改各单元格的格式,可以使显示更加美观。
Excel使用数组公式显示的日历 实例讲解 |