ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 关于农历数据制表及查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-7-17 20:47 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
      农历、公历日期互转的内容,网上能搜到不少,最常见的一个思路是从现在万年历摘取数据,制成一个表格(数组)用来查询。
现在将从函数代码中摘取出的不同的 农历数组数据做个对比,简单介绍 每位二进制数字的含义。
    希望能帮助到对农历、公历日期互转 有兴趣的朋友。

农历数组数据.rar (17.78 KB, 下载次数: 432)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-7-19 16:46 | 显示全部楼层
有个自定义函数Lunar(),现在我们来检验它是否有误。
我选择了2个农历闰年:1998年、2012年 。
1、查表
    1998年 农历数组数据为 5936BC,转为2进制 0101 1001 0011 0110 1011 1100
    2012年 农历数组数据为 4B5537,转为2进制 0100 1011 0101 0101 0011 0111
    其中第20位到第8位 (从右往左数)代表了农历1-13月的大小,就是
   1998年  1001 0011 0110 1
   2012年  1011 0101 0101 0
2、根据附件的自定义函数 lunar计算得到 ,
    1998年 农历1-13月的大小分别是 1001 ,0(1)011 ,0110
    2012年 农历1-13月的大小分别是 1011(0), 0101, 0101
    ()代表闰月
3、 由1和2 得出的数据 比较,自定义函数 它把 数据数据的第8位 当成了 闰月的大小标志,
      第8位实际是 农历第13个月的大小,所以lunar函数 的代码是不对的。期待改正。

阳历转换阴历2017.zip (32.62 KB, 下载次数: 218)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-7-20 11:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
1、lunardata sub有一处代码 原为
    If LunarData.leapmonth = 0 Then LunarData.month(i) = 0


    按照2楼分析,修改如下:
    If LunarData.leapmonth = 0 Then
       LunarData.month(13) = 0
    Else
       b = LunarData.month(LunarData.leapmonth + 1)
       For i = LunarData.leapmonth + 1 To 12
           LunarData.month(i) = LunarData.month(i + 1)
       Next i
       LunarData.month(13) = b
    End If


2、2004年的农历数组数据,原为  &H25AA36  有误,   修改为  &H25AAC6

    以上是我测试中发现的问题 已修正。 详见附件

公历农历互转函数.zip (52.86 KB, 下载次数: 247)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-7-20 19:49 | 显示全部楼层
天文学的回归年是365.2422日,天文学的朔望月长度是29.5306日,人们总结出了计算节气和朔日时间的两个经验公式,不过这两个公式的结果也只能精确到日,不能提供10秒以内精度的时间。
已知1900年小寒时刻为1月6日2:05:00,以1900年1月0日(星期日)为基准日,之后的每一天与基准日的差值称为“积日”, 1900年1月1日的积日是1,以后的时间依次类推。

1、计算第y年第x个节气的积日公式是:
F = 365.242 * (y – 1900) + 6.2 + 15.22 *x - 1.9 * sin(0.262 * x)
其中x是节气的索引,0代表小寒,1代表大寒,其它节气按照顺序类推。

2、计算从1900年开始第m个朔日的公式是:
M = 1.6 + 29.5306 * m + 0.4 * sin(1 - 0.45058 * m)


要想精确地获得几千年乃至更长时间范围内任意一年的节气发生时间和日月合朔时间,就只能采用“天文算法”。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-7-31 11:16 | 显示全部楼层
最新版 公历查农历、四柱,


因节气计算采用的经验公式,月令有个别误差。
公历查农历及四柱.zip (36.78 KB, 下载次数: 342)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-7-31 14:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
       应用一:推算三伏天      初伏为夏至后第3个庚日,中伏为夏至后第4个庚日,末伏为立秋后第1个庚日。
      2017年的推算结果 分别是 7月12日 ,7月22日。8月11日。
0122.JPG
0133.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-7-31 15:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
应用二:起运天数的计算
农历1995年4月21日生男为阳年生男从生日顺数至五月初九,芒种开始, 共17天 除以3,等于从5岁零八个月开始行大运.
如果这一天生女, 从生日逆数至四月初七, 即立夏开始之日, 共14天 除以3,等于从4岁零八个月行大运.



0211.JPG

TA的精华主题

TA的得分主题

发表于 2017-10-21 20:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个贴比较晚一点,在回一下:
sizhu 不对
比如阳历 2002/2/4
壬午马年 壬寅立春月令 癸卯日  ---明显不对,应该还是蛇年
2002年是2-11号除夕

好像节气也不对
=====================================
错误应该是 年份是不是应该是先转阴历?
按道理节气不应该错
但2002/2/3 应该是大寒,算出来是小寒

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-22 19:34 | 显示全部楼层
农历年属于阴阳历,以立春节气为分界线,故
2002/2/3为蛇年的最后一天,2002/2/4(立春)为马年第一天。

而且2002/2/3不是大寒 也不是小寒,具体请查正确的万年历。
(网上有的 不靠谱)

TA的精华主题

TA的得分主题

发表于 2017-10-23 20:56 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 02:51 , Processed in 0.040731 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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