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-23 13:00 | 显示全部楼层
mengrs 发表于 2016-6-22 18:10
=SUMPRODUCT((MOD(ROW(1900:9999),4)=0)*(MOD(ROW(1900:9999),100)0)+(MOD(ROW(1900:9999),400)=0)*(MOD(RO ...

公式中第二部分的“MOD(ROW(1900:9999),100)=0”多余,删除后仍然得到相同返回结果:

1964=SUMPRODUCT((MOD(ROW(1900:9999),4)=0)*(MOD(ROW(1900:9999),100)<>0)+(MOD(ROW(1900:9999),400)=0))

您看……
谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-23 13:03 | 显示全部楼层
pxiceplay 发表于 2016-6-22 20:20
只有1900/2/29年是BUG,其它都正常。
这个公式是1920年,所以确实不用考虑这个BUG。

谢谢您!

不够严密。公式有限定范围,但书里没有注明:
1、不能包含1900年(及其之前Excel中没有的年份)
2、返回结果的闰年数不能大于364

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-23 13:06 | 显示全部楼层
本帖最后由 e表格学习 于 2016-6-23 13:08 编辑
山菊花 发表于 2016-6-22 14:41
楼主想歪了。
接楼主的思路,应该这样算:
="9999/12/31"-(9999-1900+1)*365


总版主一针见血,我确实是这个意思解题的,但照搬书上MOD犯了教条主义、盲动路线的错误。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-23 14:42 | 显示全部楼层
丢丢表格 发表于 2016-6-22 21:34
山菊花老师的公式很好, 用  2月29号来识别 !、

  我也来一个 用正常 4 、100、400 识别的公式

1、构造二维数组,一气呵成,妙!
2、=0,统一判断、简化公式,妙!妙!!
3、{1,-1,1}思路,妙!妙!!妙!!!(对三个商之间的关系有深刻认识啊!否则不会有此巧妙构思)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-23 16:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
丢丢表格 发表于 2016-6-22 21:34
山菊花老师的公式很好, 用  2月29号来识别 !、

  我也来一个 用正常 4 、100、400 识别的公式

1900~9999共有1964个闰年,已经公认!
您的公式也得到了1964,所以公式错误的概率可以认为是0.
故根据您的公式可以推论如下:
当某年能够被4和400整除时,也必定能够被100整除!
当某年能够被100整除时,那么被4或被400整除的两个情况至少存在一个!
……

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-23 20:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如起、止年份相同,返回1说明此年为闰年,返回0说明此年为平年。
如2015:2015,返回0,说明2015年是平年(2月份有28天)。
如2016:2016,返回1,说明2016年是闰年(2月份有29天)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-24 09:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
丢丢表格 发表于 2016-6-22 21:34
山菊花老师的公式很好, 用  2月29号来识别 !、

  我也来一个 用正常 4 、100、400 识别的公式

在sum运算之前,返回数组的每一行的“和值”非0即1(否则不会得到正确的闰年数!)
我的问题是:在数学上能否证明这个“非0即1”?
我设置了许多不同的条件组合,所有组合都完美吻合“非0即1”,但是再多的完美组合也无法一般性地说明{1,-1,1}实现的“非0即1”的正确性。
郁闷……盼数学大神赐教。

TA的精华主题

TA的得分主题

发表于 2016-6-24 09:48 | 显示全部楼层
你是否知道,在Excel中,数据可以分为“文本型”、“数值型”等?
在单元格函数中,用ISNUMBER()函数可以判断一个数据是否为“数值”,用ISTEXT()函数可以判断一个数据是否为“文本”。
数据类型中,还有一种类型叫“逻辑型”,这类数据只有两个值TRUE和FALSE,用中文表示,叫“是”、“否”。
在Excel中,各类型的数据可以相互转换,把数值型转为文本型、把文本型转为数值型等等。
逻辑值也可以转换为数值型,TRUE转为数值型,结果为1,FALSE转换为数值型,结果为0。转换可以用N()函数,也可以用--。
逻辑值非TRUE即FALSE,非FALSE即TRUE,转换为数值,则非1即0,非0即1。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-6-24 10:21 | 显示全部楼层
山菊花 发表于 2016-6-24 09:48
你是否知道,在Excel中,数据可以分为“文本型”、“数值型”等?
在单元格函数中,用ISNUMBER()函数可以 ...

是我没有说清楚,浪费老师时间了。
举例说明:
供sum运算使用的一维纵向数组中,会不会出现某一元素是{1,0,1}的情况?应该不会!(花括号内0或1或-1三种可能出现值的求和只能“非0即1”,否则闰年数会多出1,如上,1+0+1=2).
问题是:怎样去证明这种数组内各元素在sum之前不会是“非0即1”以外的值(如上述例中的“2”)?

TA的精华主题

TA的得分主题

发表于 2016-6-24 10:44 | 显示全部楼层
="9999-12-31"-"1900-1-1"-365*(9999-1900+1)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 07:01 , Processed in 0.024782 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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