ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 不联网的公历转农历公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-4-18 13:09 | 显示全部楼层 |阅读模式
本帖最后由 李逸雪 于 2021-4-18 13:11 编辑

众所周知,农历毫无规律,用算法去找规律算难免会有误差,公式要解决这个问题,一般都是两种思路:利用WEBSERVICE函数网抓,或者加一张对照表;那么,如果既不想联网又不想要对照表怎么办?答案就是把对照表直接塞到公式的常量数组里面去……当然,这种想法的第一反应就是公式会很长很长很长,8192字符可能都不够,那么关键就是在于压缩常量数组的字符了。
这里首先要感谢圆舟大佬,他提供了初始常量,并对这种常量结构进行了解释,解释如下图一:

然后我利用UNICODE和UNICHAR对这种7位16进制的常量进行了进一步压缩,在这过程中圆舟也提供了不少缩减字符的思路。
此外还要感谢一位叫神仙的大神,他提供了1900-2050年的对照表,在核对过程中发现了公式中的不少错误,并且修正了几个初始常量错误;之后又请圆舟大佬出手,网抓了2501-2100年的数据进行核对,再进一步修正初始常量,最终得到这个公式,适用范围:1901-2100年。

公式中所用的字符,在编辑状态下显示是正常的,不点进去看是不正常的,但不影响计算结果,可能跟版本也有关系,我19版跟别人365都会不正常,但16版没有,不过我的16版似乎容易卡死。如下图二三:

后面几张表中保留了一些中间步骤,方便各位理解公式
QQ图片20210418125616.png
QQ图片20210418130628.png
QQ图片20210418124342.png

农历公式(最终版).rar

61.07 KB, 下载次数: 227

评分

14

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-18 14:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
现在又不卡了,可能是之前网抓一晚上没关机,公司破电脑受不了了,CPU过热什么的性能下降了,之前关机重开也没用,冷却时间太短,没冷却下来,现在好了。
16版不点进去也显示正常

QQ图片20210418141207.png

TA的精华主题

TA的得分主题

发表于 2021-4-18 15:08 | 显示全部楼层
李逸雪 发表于 2021-4-18 14:21
现在又不卡了,可能是之前网抓一晚上没关机,公司破电脑受不了了,CPU过热什么的性能下降了,之前关机重开 ...

人才啊,大佬。

TA的精华主题

TA的得分主题

发表于 2021-4-18 17:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
雪神是数学大佬

TA的精华主题

TA的得分主题

发表于 2021-4-18 17:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-18 20:08 | 显示全部楼层
@刘卓 发表于 2021-4-18 17:43
真强大,不过千万不能查看公式的计算过程,会卡死的

可能跟版本有点关系,这种字符在16版里比较卡,我16版的电脑配置虽然低,但只拉几个单元格也有点卡,19版的电脑拉了几万行也没卡死

TA的精华主题

TA的得分主题

发表于 2021-4-20 16:33 | 显示全部楼层
本帖最后由 象山海鲜 于 2021-4-20 17:27 编辑

参照你的原始数据
换个思路,还是有些卡。
  1. =TEXT(,SUBSTITUTE(TEXT(MAX(IFERROR(((0&(0&585-(0&ROW($2:$202)*365-CODE(MID("q^isalvcnxep]hs`kublYdo\gr^is`kYdn[ep]hU`kXbmYdo\gT_iVakXcQ[fS]hU_kXbOZdQ\gT_LWaNXcP[HS^KU_LWbPZGR\IT_LWaNYEP[HS^KUBMWDOZGR\ITALWDNYFP=HS@KVCMWDO<GR?JTAK8CN<FQ>HS@K8CM:EO<G4?J7AL9CN;F3>H5@J8C0;E2<G4?J7",ROW($1:$201),1))-A2))-MMULT(MID(BASE(UNICODE(MID("&#46262;&#46254;&#47703;&#46374;&#48422;&#48533;&#46762;&#46442;&#47533;&#46254;&#46254;&#47693;&#47693;&#48421;&#48466;&#47956;&#48490;&#47469;&#47451;&#46235;&#46231;&#47691;&#47909;&#46757;&#46804;&#47834;&#45750;&#47447;&#46231;&#46231;&#46667;&#48458;&#48805;&#46804;&#46509;&#45750;&#47415;&#47406;&#48278;&#48277;&#48458;&#48549;&#47957;&#46442;&#47789;&#45661;&#47405;&#48277;&#47765;&#47946;&#46794;&#47957;&#46426;&#46298;&#47707;&#46379;&#46379;&#47765;&#48789;&#46762;&#47829;&#47797;&#46262;&#47703;&#47703;&#46374;&#48787;&#48533;&#46506;&#46442;&#47469;&#46254;&#46253;&#47693;&#48422;&#48421;&#48466;&#47956;&#47978;&#47469;&#47451;&#46235;&#47691;&#47691;&#47909;&#46757;&#46804;&#47834;&#47798;&#47447;&#46231;&#46231;&#46667;&#46757;&#48805;&#46770;&#46508;&#47798;&#47414;&#47406;&#48278;&#48458;&#48458;&#48549;&#46506;&#46442;&#47789;&#45661;&#47405;&#48277;&#47765;&#47946;&#47957;&#47829;&#46426;&#46266;&#47707;&#46379;&#46379;&#47763;&#46922;&#46762;&#47829;&#46298;&#46262;&#47703;&#47694;&#48422;&#48787;&#48467;&#46506;&#46773;&#47469;&#46254;&#46253;&#47693;&#48421;&#48421;&#48466;&#48554;&#47962;&#46445;&#46253;&#46235;&#47691;&#47691;&#47781;&#47954;&#46802;&#47834;&#46427;&#47415;&#46231;&#46231;&#46667;&#46757;&#48805;&#46762;&#47798;&#47790;&#47406;&#48279;&#48278;&#48458;&#48458;&#48549;&#46506;&#46442;&#47725;&#46382;&#46381;&#47765;&#47765;&#47946;&#47957;&#47829;&#46426;&#47709;&#47707;&#46379;&#47763;&#46739;&#46889;&#46762;&#47829;&#46298;&#46262;&#47703;&#46375;&#48406;&#48787;&#48466;&#48554;&#46773;&#46445;&#46254;&#47694;&#47661;&#48405;&#48530;&#48466;",ROW($1:$201),1)),2),COLUMN($E:$P),1)+29,N(ROW($1:$12)<COLUMN($A:$M))))+1)/86400+(ROW($1900:$2100)&-1&-COLUMN($A:$M))+SIGN(CODE(MID(SUBSTITUTE("16.6-6+5/6.6+506.6-6+5/6.6,506/6-6+506.6,516/6-6,506.6-516/6-536/6.6,516.6-6+506.6-526/6-6+5/6.6,546/6.6+506.6,516/6-6,506.6-516/6-6,506.6-516/6-6+5",6,55),ROW($1:$201),1))-COLUMN($AO:$BA))/2-0.5,"")),"e年!*hd月s日"),"*12","闰"))
复制代码

有乱码
上传附件
农历公式-xshx.rar (1.28 MB, 下载次数: 224)

点评

这常量看上去愉快多了  发表于 2021-4-20 18:11

评分

11

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-4-20 16:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
象山海鲜 发表于 2021-4-20 16:33
参照你的原始数据
换个思路,还是有些卡。

海版实在是太强了,我以为你只会FREQUENCY函数,原来样样精通啊

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-4-20 17:06 | 显示全部楼层
额,我是谁,我在哪儿,我在做什么。你们怎么可以把Excel玩得嫩么有意思的。大海很广阔,E的世界好奇妙。下载,收藏。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-20 17:14 来自手机 | 显示全部楼层
象山海鲜 发表于 2021-4-20 16:33
参照你的原始数据
换个思路,还是有些卡。

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

本版积分规则

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

GMT+8, 2024-4-28 05:09 , Processed in 0.034792 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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