ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3099|回复: 9

发现Excel 2003的一个BUG:将1900年当成闰年来计算了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-3-30 22:27 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
《罗拉的奋斗-Excel菜鸟升职记》中P119提到:根据一周7天的原则,可以利用MOD函数与7进行相除,看其余数。MOD函数是一个求余函数,如果日期与7相除等于0,就表示是周日,等于1就是表示是周六。
实际使用今天的日期(2014-3-30),发现余数为1,而今天是星期日,与书上说的不符。再计算昨天(2014-3-29),MOD后为0。与书上说的不符。于是通过MOD计算了如下几个日期的星期,最终找到问题的根源了。1900年2月28日与1900年3月1日相差只有1天,但MOD后的结果却是相差2天,原因是excel将1900年2月28日为59,而1900年3月1号却为61,即还统计了一个1900年2月29的,将1900当成是闰年来统计了。所以导致以后的时间都是多了1的。所以MOD余数为0时为星期六,MOD余数为1时星期日,而在1900年2月28以前,MOD余数为0是星期日,MOD余数为6为星期六。
MOD函数计算星期结果.png

1900年2月份的日历

1900年2月份的日历

TA的精华主题

TA的得分主题

发表于 2014-3-30 23:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
果然如此……1900/2/29 在Excel中是合法的日期。

TA的精华主题

TA的得分主题

发表于 2014-3-30 23:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-3-31 01:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
记得有老师说 1900年本身不是闰年,但Excel却以闰年来计算

TA的精华主题

TA的得分主题

发表于 2014-4-10 07:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-10 16:26 | 显示全部楼层
在xx00的世纪年中,只有1900年错误地存在了2月29日(闰年),其余的世纪年都是正确的。

year.jpg

TA的精华主题

TA的得分主题

发表于 2014-4-10 16:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原因不明。

猜测可能是:
设计者为了便于做日期验证,故意放置了这一个bug(也是唯一一个bug)


那么,今后调试非微软公司的代码时,只需要输入1900-2-29日,观察代码结果即可。

TA的精华主题

TA的得分主题

发表于 2014-5-13 11:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个也会发现,相当不错。

TA的精华主题

TA的得分主题

发表于 2014-6-10 22:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-1-20 23:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2014-3-30 23:07
果然如此……1900/2/29 在Excel中是合法的日期。

函数的局限性

03版的VBA中有关系么?
?isdate ("02/29/1900")  = False
在 Microsoft Windows 的有效日期范围是公元 1 月 1 日 100 年 12 月 31 日 9999年 ; 通过范围因操作系统而异。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 13:07 , Processed in 0.036118 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表