ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 1900年至9999年共有140个闰年!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-24 10:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在一个工作表中,选择一个8100*3的区域,如A1:C8100,或A1900:C9999,输入公式:
=MOD(ROW(1900:9999),{4,100,400}),按Ctrl+Shift+Enter结束。
A列是1900、1901、1902。。。9999除以4所得余数,B列是除以100所得余数,C列是除以400所得余数。
A、B、C三列0的个数分别是2025、81、20,用数组表示为{2025,81,20},用这个结果乘以{1,-1,1},得到{2025,-81,20},把这个数组求和,即sum({2025,-81,20}),结果为1964。
为什么乘以{1,-1,1},就是为了得到表达式:2025+20-81,这是一个解题技巧。
另举一个例,如何用三个一位数1、2、3通过计算得到一个三位数123?常用的方法就是:=SUM({1,2,3}*{100,10,1}),这里的{100,10,1}与前面的{1,-1,1}一样,是一个常量数组,是解题需要特定设定的一个常量数组。它不存在“非0即1”的逻辑关系,与“非0即1”不兼边,半毛钱关系都没有。

上面的解释为了方便,没有按公式的解题思路叙述。具体的解题思路,参考附件,观察解题过程,同样可以理解为什么*{1,-1,1}。

工作簿1.rar

413.62 KB, 下载次数: 2

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-6-24 11:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mengrs 发表于 2016-6-24 10:44
="9999-12-31"-"1900-1-1"-365*(9999-1900+1)

这是一个错误的思路。
求2016年的天数,应该是"2016-12-31"-"2015-12-31",而不是"2016-12-31"-"2016-1-1"。
同理,求1900-1-1至9999-12-31的天数,应该是"9999-12-31"-"1900-1-1"+1,其实它就等于"9999-12-31"。
公式最后结果应该是1965,因为Excel有一个Bug在其中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-24 12:50 | 显示全部楼层
山菊花 发表于 2016-6-24 10:49
在一个工作表中,选择一个8100*3的区域,如A1:C8100,或A1900:C9999,输入公式:
=MOD(ROW(1900:9999),{4, ...

为什么能够被4除尽的个数(2025)+被400除尽的个数(20)-被100除尽的个数(81)就是闰年个数?我知道这是技巧,就是不理解这个技巧的原理。
每每遇到此类事情,就觉得自己愚钝又遇到了证明。
老师暂时别费心了,先让我“消化消化”再说吧。
谢谢总版主!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-24 14:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 e表格学习 于 2016-6-24 14:24 编辑
山菊花 发表于 2016-6-24 10:49
在一个工作表中,选择一个8100*3的区域,如A1:C8100,或A1900:C9999,输入公式:
=MOD(ROW(1900:9999),{4, ...


好像明白多了!
4年一闰、400年一闰!:所以第一列的1+第三列的1;
4年一闰中,凡满整百年的“闰年”要祛除掉,所以要第二列的“-1”(不满400年的“闰年(如您附件中蓝色标出的2100年)”就变成平年了,满400年的“双闰年(如您附件中绿色标出的2000年)”-1变成闰年了)

“四闰四百闰,百不闰”。阅读“闰年”的来历说明、深刻理解这句口诀,再结合您的图例,就明白得不要不要的了!

难以用言语表达对您的感激,为您精湛的技艺,更为您诲人不倦的精神。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-24 14:59 | 显示全部楼层
从公元1年至公元某年,期间所含闰年个数的近似计算公式为:
闰年个数=97*某年/400

TA的精华主题

TA的得分主题

发表于 2016-6-24 15:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花 发表于 2016-6-24 11:25
这是一个错误的思路。
求2016年的天数,应该是"2016-12-31"-"2015-12-31",而不是"2016-12-31"-"2016-1- ...

谢谢版主指导!

TA的精华主题

TA的得分主题

发表于 2016-6-25 15:39 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wshcw版主经常用的那个+400年的用法好像还没人提

TA的精华主题

TA的得分主题

发表于 2019-4-29 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我来告诉你错在哪里吧,当闰年数大于365的时候,直接被你mod掉啦,哈哈

TA的精华主题

TA的得分主题

发表于 2019-4-29 09:51 | 显示全部楼层
sh0whigh 发表于 2019-4-29 09:39
我来告诉你错在哪里吧,当闰年数大于365的时候,直接被你mod掉啦,哈哈

你回复的是很久以前的帖子了。

不过顺带一句,据说:好像还有更久远3200年不闰的方案存在,以达到更准地精度。但是因为太过遥远,所以谁也不清楚到时候,这个修正是否作准。(当然还有比3200更大的修正本题中也不会出现不讨论)

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 07:11 , Processed in 0.023352 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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