ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何编写某一年是否为闰年的VBA程序?

如何编写某一年是否为闰年的VBA程序?

作者:绿色风 分类: 时间:2022-08-17 浏览:171
楼主
wise
Q:如何编写某一年是否为闰年的VBA程序?
A:ALT+F11→插入模块→在模块中输入以下代码:

  1. Sub 判断闰年()
  2. Dim MyYear As Long
  3. MyYear = InputBox("请输入一个年份", "年份", Year(Now))
  4. If (MyYear Mod 4 = 0 And MyYear Mod 100 <> 0) Or (MyYear Mod 400 = 0) Then
  5.     MsgBox MyYear & "是闰年!"
  6. Else
  7.     MsgBox MyYear & "不是闰年!"
  8. End If
  9. End Sub

2楼
DJ_Soo
小7我问你一个我一直没明白的问题,判断闰年为什么要判断这么多?
为什么不是直接判断能否整除4?
3楼
wise
关于闰年的一些知识
  闰年含义:闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份,即有闰日的年份为闰年。

  公历闰年判定遵循的规律为: 四年一闰,百年不闰,四百年再闰。
  公历闰年的简单计算方法(符合以下条件之一的年份即为闰年。
  1:能被4整除而不能被100整除。(如2100年就不是闰年)。
  2:能被400整除。
  (能被100整除但是不能被400整除的,不是闰年)。

  详情如下:
  闰年(leap year),指在公历(格里历)或夏历中有闰日的年份,以及在中国旧历农历中有闰月的年份。

  地球绕太阳运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末(2月29日),使当年的历年长度为366日,这一年就为闰年。 按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。所以规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。

  由于地球的自转速度逐渐降低,而公转速度则相对更加稳定,所以上述的系统经过更长的周期也会发生微小的误差。据计算,每8000年会有一天的误差,所以英国的天文学家John Herschel提议公元4000为平年,以后类推12000年,20000年亦为平年。但此提议从未被正式采纳。原因是到了4000年,地球自转的精确速度并非现在可以预测,所以届时参照真实数据方可做出判断。因此,在长远的将来,微小的调整应该不是由预定的系统决定,而是随时不定性的。

  需要注意的是,现在的公历是根据罗马人的"儒略历"改编而得。

  由于当时没有了解到每年要多算出0.0078天的问题,从公元前46年,到16世纪,一共累计多出了10天。为此,当时的教皇格雷果里十三世,将1582年10月5日人为规定为10月15日。并开始了新闰年规定。此后,平均每年长度为365.2425天,约4年出现1天的偏差。

  夏历的平年只有354日,比12个朔望月短0.3671日,为使每月初一与月朔相合,规定每30年中有11年的年底增加1日,这一年的历年有355日,即为闰年。中国旧历农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。
4楼
DJ_Soo
还是没看懂,2100年为啥不是闰年?
2000年是闰年啊,每四年一次,100年之后的2100年竟然不是???我晕了..
是不是我对闰年不理解啊



PS:真是我理解错误了!!!
5楼
amulee
每四年闰年一次,是为了调整公转周期与一年365天之间的时差,但是调整下来还是有一点误差,所以需要再度调整。
6楼
donghan
天文历法的知识,学习了
7楼
kevinchengcw
利用excel内部判断功能:
  1. Sub 判断闰年()
  2. Dim Tmp
  3. On Error GoTo skip
  4. Tmp = CDate(InputBox("请输入一个年份", "年份", Year(Now)) & "-2-29")
  5. MsgBox "是闰年!"
  6. Exit Sub
  7. skip:
  8. MsgBox "不是闰年!"
  9. End Sub
8楼
biaotiger1
kevinchengcw 好想法,好代码
9楼
yizhbi
下来慢慢学习吧,谢谢

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap