ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 农历计算程序

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-15 16:30 | 显示全部楼层
  1. Dim arr1, arr2, brr1, brr2
  2. Sub testa()
  3. '“气”直线拟合参数
  4. arr1 = Array( _
  5. 1640650.479938, 1642476.703182, 1683430.515601, 1752157.640664, 1807675.003759, 1883627.765182, 1907369.1281, 1936603.140413, _
  6. 1939145.52418, 1947180.7983, 1964362.041824, 1987372.340971, 1999653.819126, 2007445.469786, 2021324.917146, 2047257.232342, _
  7. 2070282.898213, 2073204.87285, 2080144.500926, 2086703.688963, 2110033.182763, 2111190.300888, 2113731.271005, 2120670.840263, _
  8. 2123973.309063, 2125068.997336, 2136026.312633, 2156099.495538, 2159021.324663, 2162308.575254, 2178485.706538, 2178759.662849, _
  9. 2185334.0208, 2187525.481425, 2188621.191481, 2321919.49)

  10. brr1 = Array( _
  11. 15.218425, 15.21874996, 15.218750011, 15.218749978, 15.218620279, 15.218612292, 15.218449176, 15.218425, _
  12. 15.218466998, 15.218524844, 15.218533526, 15.218513908, 15.218530782, 15.218535181, 15.218526248, 15.218519654, _
  13. 15.218425, 15.218515221, 15.218530782, 15.218523776, 15.218425, 15.218425, 15.218515671, 15.218425, _
  14. 15.218425, 15.218477932, 15.218472436, 15.218425, 15.218425, 15.218461742, 15.218425, 15.218445786, _
  15. 15.218425, 15.218425, 15.218437484)
  16. End Sub
  17. Sub testb()
  18. '“朔”直线拟合参数
  19. arr2 = Array(1457698.231017, 1546082.512234, 1640640.7353, 1642472.151543, 1683430.5093, 1752148.041079, _
  20.              1807665.420323, 1883618.1141, 1907360.7047, 1936596.2249, 1939135.6753, 1947168#)

  21. brr2 = Array(29.53067166, 29.53085106, 29.5306, 29.53085439, 29.53086148, _
  22.              29.53085097, 29.53059851, 29.5306, 29.5306, 29.5306, 29.5306)
  23. End Sub


  24. Function getjq_24old(jd2)
  25. Call testa
  26. If jd2 >= arr1(UBound(arr1)) Or jd2 < arr1(0) Then getjq_24old = jd2: Exit Function

  27. For i = 0 To UBound(arr1)
  28.     If jd2 >= arr1(i) And jd2 < arr1(i + 1) Then
  29.        k2 = Int((arr1(i + 1) - arr1(i)) / brr1(i))
  30.        For j = 0 To k2
  31.            If Abs(arr1(i) + j * brr1(i) - jd2) < 4 Then getjq_24old = arr1(i) + j * brr1(i): Exit Function
  32.        Next
  33.     End If
  34. Next
  35. End Function

  36. Function getjq_12old(jd2)
  37. Call testb
  38. If jd2 >= arr2(UBound(arr2)) Or jd2 < arr2(0) Then getjq_12old = jd2: Exit Function

  39. For i = 0 To UBound(arr2)
  40.     If jd2 >= arr2(i) And jd2 < arr2(i + 1) Then
  41.        k2 = Int((arr2(i + 1) - arr2(i)) / brr2(i))
  42.        For j = 0 To k2
  43.            If Abs(arr2(i) + j * brr2(i) - jd2) < 4 Then getjq_12old = arr2(i) + j * brr2(i): Exit Function
  44.        Next
  45.     End If
  46. Next
  47. End Function
复制代码
更新版本V3.0 ,成品 下载在1楼。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-15 22:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zopey 发表于 2019-3-15 16:30
更新版本V3.0 ,成品 下载在1楼。

公元237 年附近,计算“平气”的  自定义函数 getjq_24old 出错, 原因不明。

TA的精华主题

TA的得分主题

发表于 2019-3-17 09:16 | 显示全部楼层
本帖最后由 cyfx2288 于 2019-3-17 09:22 编辑
zopey 发表于 2019-3-15 22:55
公元237 年附近,计算“平气”的  自定义函数 getjq_24old 出错, 原因不明。

收到,非常感谢。最近有点忙,容出时间,我会核对。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-20 09:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zopey 发表于 2019-3-15 22:55
公元237 年附近,计算“平气”的  自定义函数 getjq_24old 出错, 原因不明。
  1. Function getjq_24old(jd1)
  2. Call testa
  3. If jd1 > arr1(UBound(arr1)) + 5 Or jd1 < arr1(0) - 5 Then getjq_24old = jd1: Exit Function

  4. For i = 0 To UBound(arr1) - 1
  5.     If Abs(arr1(i) - jd1) < 5 Then getjq_24old = arr1(i): Exit Function
  6.     If jd1 >= arr1(i) And jd1 < arr1(i + 1) Then
  7.        If Abs(arr1(i + 1) - jd1) < 5 Then getjq_24old = arr1(i + 1): Exit Function
  8.       
  9.        k1 = Int((jd1 - arr1(i)) / brr1(i))
  10.        For j = k1 To k1 + 1
  11.            If Abs(arr1(i) + j * brr1(i) - jd1) < 5 Then getjq_24old = arr1(i) + j * brr1(i)
  12.        Next
  13.        Exit Function
  14.     End If
  15. Next
  16. End Function
复制代码
  1. Function getjq_12old(jd2)
  2. Call testb
  3. If jd2 > arr2(UBound(arr2)) + 5 Or jd2 < arr2(0) - 5 Then getjq_12old = jd2: Exit Function

  4. For i = 0 To UBound(arr2) - 1
  5.     If Abs(arr2(i) - jd2) < 5 Then getjq_12old = arr2(i): Exit Function
  6.     If jd2 >= arr2(i) And jd2 < arr2(i + 1) Then
  7.        If Abs(arr2(i + 1) - jd2) < 5 Then getjq_12old = arr2(i + 1): Exit Function
  8.       
  9.        k2 = Int((jd2 - arr2(i)) / brr2(i))
  10.        For j = k2 To k2 + 1
  11.            If Abs(arr2(i) + j * brr2(i) - jd2) < 5 Then getjq_12old = arr2(i) + j * brr2(i)
  12.        Next
  13.        Exit Function
  14.     End If
  15. Next
  16. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-21 14:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
格里历日期与儒略历日期的差距

* 1582年——1699年:格里历日期减10日等于儒略历日期。
* 1700年(格里历没有闰日,但儒略历有):
o 格里历2月28日,合儒略历2月18日,或之前的日期:格里历日期减10日等于儒略历日期。
o 格里历3月1日,合儒略历2月19日,或之后的日期:格里历日期减11日等于儒略历日期。
* 1701年——1799年:格里历日期减11日等于儒略历日期。
* 1800年(格里历没有闰日,但儒略历有):
o 格里历2月28日,合儒略历2月17日,或之前的日期:格里历日期减11日等于儒略历日期。
o 格里历3月1日,合儒略历2月18日,或之后的日期:格里历日期减12日等于儒略历日期。

* 1801年——1899年:格里历日期减12日等于儒略历日期。
* 1900年(格里历没有闰日,但儒略历有):
o 格里历2月28日,合儒略历2月16日,或之前的日期:格里历日期减12日等于儒略历日期。
o 格里历3月1日,合儒略历2月17日,或之后的日期:格里历日期减13日等于儒略历日期。

* 1901年——2099年:格里历日期减13日等于儒略历日期。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-21 15:10 | 显示全部楼层
公历的一些约定
一、对于公元1582年以后的日期,都用格里历表达,这毫无问题。       但在1582年至20世纪初这三百多年间,许多历史事件就会有两个日期——比如牛顿的生日就有1642年12月25日(儒略历)和1643年1月4日(格里历)两种表达,“十月革命”则有1917年10月25日(儒略历)和1917年11月7日(格里历)两个日期。
二、对于从公元前46年(儒略历开始使用)到公元1582年,这一千六百多年中的日期,当然使用儒略历来表达,因为那时格里历还不存在。
三、
国际历史学界和天文学界约定,将公元前46年之前的日期统一用儒略历来表达。历史事件,比如武王伐纣的牧野之战发生于公元前1044年1月9日,或孔子诞生于公元前552年10月9日,这些日期都是儒略历的日期。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-7-3 07:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主分享

TA的精华主题

TA的得分主题

发表于 2019-7-13 13:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主,做的还是很不错的

TA的精华主题

TA的得分主题

发表于 2019-7-13 14:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这是一篇农历历法专家级的帖子,建议EH收藏进知识树中

TA的精华主题

TA的得分主题

发表于 2019-8-4 23:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主厉害了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 08:58 , Processed in 0.044901 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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