lwp67 / OFFICE / 用EXCEL做日历牌(公历)

分享

   

用EXCEL做日历牌(公历)

2011-11-19  lwp67
用EXCEL做日历牌(公历)
2011-08-05 11:32

以前很多人喜欢在办公桌上放一本台历,方便查询日期,现在电脑已经普及了,大家都喜欢从电脑上查看日历,又方便又不占地方。
用编程的方法可以制做电子日历,但会编程的人不多。如今EXCEL电子表格的普及率很高,由于它强大的数据处理能力,被很多人当做必不可少的办公工具。
在EXCEL中有很多时间函数,通过这些函数可以制做一款简单实用的日历牌。
先看一下做好的样式:

在这个日历牌的上面左右两个微调按钮,可以通过它们调整想要显示的年月。
下面就介绍制做过程
1、选画边框

其中C2与D2单元格是合并单元格,用于显示年份。由于年份是四位数字,所以要占用两个单元格。
其中的E10:G10也是合并单元格,这是为了显示“今天”的日期,包含了年月日三个内容,所以要占三个单元格。

2、填入内容

这些内容不需要公式,直接手工输入,根据自己的喜好设置字体、字号、颜色。
注意年份输入在C2单元格,月份输入在F2单元格,这两个位置会被下面的公式所引用。

3、日历公式
这是关键一步,要输入公式了,公式的区域在B4:H9,由于第一个单元格是B4单元格,所以公式中要对它进行“绝对引用”。
可能很多人都不相信,这个区域中的公式都是一样的,虽然B4:H9区域共有42个单元格,但都使用了完全相同的公式,只要在B4单元格输入一个公式,然后通过拖动复制的方式就可以完成所有公式的输入。


公式 =IF(OR(((ROW()-ROW($B$4))*7+(COLUMN()-COLUMN($B$4)-WEEKDAY(DATE($C$2,$F$2,1))+2))>DAY(DATE($C$2,$F$2+1,1)-1),((ROW()-ROW($B$4))*7+(COLUMN()-COLUMN($B$4)-WEEKDAY(DATE($C$2,$F$2,1))+2))<1),"",((ROW()-ROW($B$4))*7+(COLUMN()-COLUMN($B$4)-WEEKDAY(DATE($C$2,$F$2,1))+2)))

 

公式有点长,分析起来感觉有些费力,我们试着对它进行“简化”。
可以看到公式中有一部份内容重复出现了三次,即“((ROW()-ROW($B$4))*7+(COLUMN()-COLUMN($B$4)-WEEKDAY(DATE($C$2,$F$2,1))+2))”,为了方便叙述,给它起个名字叫“号”,也就是几月几号的意思。


还有一小段“DAY(DATE($C$2,$F$2+1,1)-1)”,我们给它起名为“最后一天”,因为它是计算日历牌中,当月最后一天的号数,也可以理解为这个月有几天。


然后把“号”与“最后一天”代入公式看一下:
公式就变成=IF(OR((号>最后一天),(号<1)),"",号)


这样是不是简单很多了,也容易理解了。

这就是一个常见的IF判断公式,在条件部份使用了OR函数进行逻辑“或”运算,只要“(号>最后一天),(号<1)”两部份中,任一部份为“真”,就使条件成立。


提示:这只是为了分析方便而做的“简化”,实际使用时还要使用原公式的。
提示:对所有长公式都可以用这种方法“简化”,然后对每一部份逐一分析理解。

 

首先这是一个由IF函数构成的判断公式,大家都知道IF函数有三个参数,第一个参数是“条件”,第二个参数是“条件”为“真”是执行的部份,第三个参数是“条件”为“假”时执行的部份,一般的使用格式为 if(条件,真,假)
公式的含义是:如果当前单元格中显示的“号”大于当前月的“最后一天”或者小于“1”,那就说明这个“号”不应显示在当前月份牌中,于是就通过IF函数的第二个参数显示为一个空格;反之,通过IF函数的第三个参数,把这个“号”就显示在当前单元格中。

 

接下来对每一部份进行分析:
“号”:“((ROW()-ROW($B$4))*7+(COLUMN()-COLUMN($B$4)-WEEKDAY(DATE($C$2,$F$2,1))+2))”
它通过公式所在单元格的行号(ROW())、列号(COLUMN())与B4单元格的位置间隔,来计算“当前”格中显示的数字,再把这个数字与“星期”对应起来。
其中的“WEEKDAY(DATE($C$2,$F$2,1))”是将C2的年、F2的月及数字1,通过DATE函数组成一个EXCEL可以识别的日期(比如2011年8月1日),再用WEEKDAY函数得到这个日期的星期。
由于我们在日历牌中的第2行(工作表的第3行)已经将“星期”标志固定了,所以公式中必须将显示的“号”与星期来对应,否则号与星期不对应,日历牌也就失去意义了。
提示:WEEKDAY函数返回表示星期的代码,它有两个参数,第一个参数是要计算的日期,第二个参数如果省略,那么返回的代码1--7将对应“星期日、星期一、...、星期六”。

 

“最后一天”:“DAY(DATE($C$2,$F$2+1,1)-1)”
它与上面类似,通过DATE函数把C2的年、F2的月加1(表示次月)、数字1组成一个EXCEL可以识别的日期,这个日期是当前要显示月份的下一个月1日,由于EXCEL不能直接得到某月的最后一天,所以要把这个“次月1日”减1才能得到本月最后一天的日数。(大月31,小月30,2月为28或29)

 

通过上面分析,相信大多数朋友能理解公式的含义了,其他暂时不理解的朋友也不用着急,只要会用它就行了。

下面继续我们的日历牌制作

在B4格输入公式后可以用鼠标拖动复制了,按住B4单元格右下角的“填充柄”把公式复制到B4:H9区域中的每一个单元格中。
最后在E10单元格输入一个公式,用来表示“今天”的日期,公式 =NOW()
这个公式只用一个日期函数NOW,它会返回电脑系统今天的日期
提示:如果E10单元格中显示的内容与图片中不相同,请选中E10单元格,按鼠标右键,选“单元格格式”,在其中的“数字”选项卡中设置一下日期格式就行了。

4、添加控件

最麻烦的公式部份完成了,接下来做两个微调按钮,用于调整年和月。
在“视图-工具栏”中找到“窗体”工具栏,让它显示出来。

提示:这是EXCEL2003的“窗体”工具栏,如果你用的是EXCEL2007,需要在“开发工具-插入-表单控件”中找到“数值调节钮”控件。

 

用鼠标选中上面的“微调项”,在B2单元格与H2单元格位置各“画”出一个大小适中的按钮,然后分别用鼠标右键点击它们,从弹出的快捷菜单中选“设置控件格式”。


一定要注意里面的“单元格链接”不要填错了。

做到这里就基本完成了,最后再对日历牌“美化”一下,每个人的喜好不同,自己随意。

通过两个“微调按钮”就能查询到任意日期。

提示:在本例B2:H10区域中,公式引用了C2、F2、B4这三个单元格,如果你制做的日历牌不在这个区域,需要把公式中的单元格引用改成你的实际单元格地址。单元格地址修改后,还要把两个微调框的“单元格链接”也相应修改。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    来自: lwp67 > 《OFFICE》

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>