ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] EXCEL农历函数COM加载宏版 真正的万年历(含10000年的农历及24节气信息)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-15 17:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:其他插件和工具
zopey 发表于 2018-1-6 19:58
http://club.excelhome.net/thread-1389319-1-1.html  9楼公式

你这个也很牛

TA的精华主题

TA的得分主题

发表于 2018-1-15 19:18 | 显示全部楼层
伍成平 发表于 2018-1-12 20:02
厉害,几行宏代码搞定,能不能不用宏呢,用宏,每次都需要更新

请测试
24节气 (1)-.rar (162.53 KB, 下载次数: 149)

TA的精华主题

TA的得分主题

发表于 2018-1-15 19:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我原来就是用这个方法的,我的意思是只用一个工作表计算,在原计算表格增加单元格。

TA的精华主题

TA的得分主题

发表于 2018-1-15 19:44 | 显示全部楼层
zopey 发表于 2018-1-6 19:58
http://club.excelhome.net/thread-1389319-1-1.html  9楼公式

为什么用文本输出呢,vba我不会,不会从vba里面改成日期格式,花好大功夫用函数改成时间格式了,但看起来好麻烦

24节气高精度公式.zip

20.71 KB, 下载次数: 109

TA的精华主题

TA的得分主题

发表于 2018-1-16 09:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
伍成平 发表于 2018-1-15 19:44
为什么用文本输出呢,vba我不会,不会从vba里面改成日期格式,花好大功夫用函数改成时间格式了,但看起来 ...

请测试
  1. Function getjq(yy, mm, Optional gs As Integer = 0)
  2.     jqmc = "小寒大寒立春雨水惊蛰春分清明谷雨立夏小满芒种夏至小暑大暑立秋处暑白露秋分寒露霜降立冬小雪大雪冬至"
  3.     v0 = 628.3319653318
  4.     t = 0                                                       '第1步迭代
  5.     L0 = (48650621.66 + 6283319653.318 * t) / 10 ^ 7
  6.     W = (mm - 5 + (yy - 1999) * 24) * 15 * 3.1415926 / 180      'W指的是太阳黄经。1999年春分对应W=0,
  7.                                                                 '以后每W每增加15度对应下一个节气。
  8.     t = t + (W - L0) / v0                                       '第2步迭代
  9.     t2 = t * t
  10.     l1 = (48950621.66 + 6283319653.318 * t + 53 * t2 _
  11.           + 334116 * Cos(4.67 + 628.307585 * t) + 2061 * Cos(2.678 + 628.3076 * t) * t) / 10 ^ 7
  12.     v1 = 628.332 + 21 * Sin(1.527 + 628.307585 * t)
  13.     t = t + (W - l1) / v1                                       '第3步迭代
  14.     t2 = t * t
  15.     t3 = t2 * t
  16.     t4 = t3 * t
  17.    
  18.     L2 = (48950621.66 + 6283319653.318 * t + 52.9674 * t2 + 0.00432 * t3 - 0.001124 * t4 _
  19.          + 334166 * Cos(4.669257 + 628.307585 * t) + 3489 * Cos(4.6261 + 1256.61517 * t) _
  20.          + 350 * Cos(2.744 + 575.3385 * t) + 342 * Cos(2.829 + 0.3523 * t) _
  21.          + 314 * Cos(3.628 + 7771.3771 * t) + 268 * Cos(4.418 + 786.0419 * t) _
  22.          + 234 * Cos(6.135 + 393.021 * t) + 132 * Cos(0.742 + 1150.677 * t) _
  23.          + 127 * Cos(2.037 + 52.9691 * t) + 120 * Cos(1.11 + 157.7344 * t) _
  24.          + 99 * Cos(5.23 + 588.493 * t) + 90 * Cos(2.05 + 2.63 * t) _
  25.          + 86 * Cos(3.51 + 39.815 * t) + 78 * Cos(1.18 + 522.369 * t) _
  26.          + 75 * Cos(2.53 + 550.755 * t) + 51 * Cos(4.58 + 1884.923 * t) _
  27.          + 49 * Cos(4.21 + 77.552 * t) + 36 * Cos(2.92 + 0.07 * t) _
  28.          + 32 * Cos(5.85 + 1179.063 * t) + 28 * Cos(1.9 + 79.63 * t) _
  29.          + 27 * Cos(0.31 + 1097.71 * t) + 2060.6 * Cos(2.67823 + 628.307585 * t) * t _
  30.          + 43 * Cos(2.635 + 1256.6152 * t) * t + 8.72 * Cos(1.072 + 628.3076 * t) * t2 _
  31.          - 994 - 834 * Sin(2.1824 - 33.75705 * t) _
  32.          - 64 * Sin(3.5069 + 1256.66393 * t)) / 10 ^ 7

  33.     t = t + (W - L2) / v1                                       '第4步迭代
  34.     J2000 = 2451545
  35. '   JD = J2000 + t * 36525 - (64.7 + (yy - 2005) * 0.4) / 86400 + 8 / 24 '地球自转修正项 需完善
  36.     JD = J2000 + t * 36525 - deltaT(yy) / 86400 + 8 / 24        '地球自转修正项 已完善

  37.     Z = Int(JD + 0.5)                                           '转换日期
  38.     F = JD + 0.5 - Z
  39.    
  40.     a0 = Int((Z - 1867216.25) / 36524.25)
  41.     A = Z + 1 + a0 - Int(a0 / 4): If Z < 2299161 Then A = Z
  42.     B = A + 1524
  43.     C = Int((B - 122.1) / 365.25)
  44.     D = Int(365.25 * C)
  45.     E = Int((B - D) / 30.6001)
  46. '    d1 = B - d - Int(30.6001 * E) + F
  47.     If yy = 1923 Then tm = 1.5 / 4320 '此代码用于修正1923-02-20 的误差。已经校正1900-2100年的误差
  48.     d1 = B - D - Int(30.6001 * E) + F - tm
  49.     m1 = E - 13: If E < 14 Then m1 = E - 1
  50.     y1 = C - 4715: If m1 > 2 Then y1 = C - 4716
  51.     d2 = (d1 - Int(d1)) * 86400
  52.     hh1 = Int(d2 / 3600)
  53.     mm1 = Int(((d2 - hh1 * 3600) / 60))
  54.     mm2 = ((d2 - hh1 * 3600) / 60)
  55.     ss1 = Round((mm2 - mm1) * 60, 2)
  56.    
  57.     getjq1 = y1 & Format(m1, "\-00\-") & Format(Int(d1), "00")
  58.     getjq = getjq1 & Format(hh1, " 00") & Format(mm1, "\:00") & Format(ss1, "\:00.00 ")
  59.    
  60.     If gs = 1 Then getjq = getjq & Mid(jqmc, (mm Mod 24) * 2 + 1, 2)
  61.     If gs = 2 Then getjq = Mid(jqmc, (mm Mod 24) * 2 + 1, 2)
  62.     If gs = 3 Then getjq = getjq1
  63.     If gs = 4 Then getjq = DateSerial(y1, m1, Int(d1)) + d2 / 86400
  64. '    Debug.Print getjq
  65. End Function
  66. Public Function deltaT(year)
  67.    If year >= 2005 And year < 2014 Then
  68.       deltaT = 64.7 + (year - 2005) * 0.4
  69.    ElseIf year >= 2014 And year < 2114 Then
  70.       deltaT = -20 + 31 * ((year - 1820) / 100) ^ 2 _
  71.       + (year - 2114) * ((-20 + 31 * ((2014 - 1820) / 100) ^ 2) _
  72.       - (64.7 + (2014 - 2005) * 0.4)) / 100
  73.    ElseIf year > 2114 Then
  74.       deltaT = -20 + 31 * ((year - 1820) / 100) ^ 2
  75.    ElseIf year >= -4000 And year < -500 Then
  76.       y1 = -4000: y2 = -500
  77.       t = (year - y1) / (y2 - y1) * 10
  78.       A = 108371.7: B = -13036.8: C = 392: D = 0
  79.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  80.    ElseIf year >= -500 And year < -150 Then
  81.       y1 = -500: y2 = -150
  82.       t = (year - y1) / (y2 - y1) * 10
  83.       A = 17201: B = -627.82: C = 16.17: D = -0.3413
  84.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  85.    ElseIf year >= -150 And year < 150 Then
  86.       y1 = -150: y2 = 150
  87.       t = (year - y1) / (y2 - y1) * 10
  88.       A = 12200.6: B = -346.41: C = 5.403: D = -0.1593
  89.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  90.    ElseIf year >= 150 And year < 500 Then
  91.       y1 = 150: y2 = 500
  92.       t = (year - y1) / (y2 - y1) * 10
  93.       A = 9113.8: B = -328.13: C = -1.647: D = 0.0377
  94.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  95.    ElseIf year >= 500 And year < 900 Then
  96.       y1 = 500: y2 = 900
  97.       t = (year - y1) / (y2 - y1) * 10
  98.       A = 5707.5: B = -391.41: C = 0.915: D = 0.3145
  99.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  100.    ElseIf year >= 900 And year < 1300 Then
  101.       y1 = 900: y2 = 1300
  102.       t = (year - y1) / (y2 - y1) * 10
  103.       A = 2203.4: B = -283.45: C = 13.034: D = -0.1778
  104.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  105.    ElseIf year >= 1300 And year < 1600 Then
  106.       y1 = 1300: y2 = 1600
  107.       t = (year - y1) / (y2 - y1) * 10
  108.       A = 490.1: B = -57.35: C = 2.085: D = -0.0072
  109.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  110.    ElseIf year >= 1600 And year < 1700 Then
  111.       y1 = 1600: y2 = 1700
  112.       t = (year - y1) / (y2 - y1) * 10
  113.       A = 120: B = -9.81: C = -1.532: D = 0.1403
  114.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  115.    ElseIf year >= 1700 And year < 1800 Then
  116.       y1 = 1700: y2 = 1800
  117.       t = (year - y1) / (y2 - y1) * 10
  118.       A = 10.2: B = -0.91: C = 0.51: D = -0.037
  119.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  120.    ElseIf year >= 1800 And year < 1830 Then
  121.       y1 = 1800: y2 = 1830
  122.       t = (year - y1) / (y2 - y1) * 10
  123.       A = 13.4: B = -0.72: C = 0.202: D = -0.0193
  124.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  125.    ElseIf year >= 1830 And year < 1860 Then
  126.       y1 = 1830: y2 = 1860
  127.       t = (year - y1) / (y2 - y1) * 10
  128.       A = 7.8: B = -1.81: C = 0.416: D = -0.247
  129.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  130.    ElseIf year >= 1860 And year < 1880 Then
  131.       y1 = 1860: y2 = 1880
  132.       t = (year - y1) / (y2 - y1) * 10
  133.       A = 8.3: B = -0.13: C = -0.406: D = 0.0292
  134.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  135.    ElseIf year >= 1880 And year < 1900 Then
  136.       y1 = 1880: y2 = 1900
  137.       t = (year - y1) / (y2 - y1) * 10
  138.       A = -5.4: B = 0.32: C = -0.183: D = 0.0173
  139.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  140.    ElseIf year >= 1900 And year < 1920 Then
  141.       y1 = 1900: y2 = 1920
  142.       t = (year - y1) / (y2 - y1) * 10
  143.       A = -2.3: B = 2.06: C = 0.169: D = -0.0135
  144.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  145.    ElseIf year >= 1920 And year < 1940 Then
  146.       y1 = 1920: y2 = 1940
  147.       t = (year - y1) / (y2 - y1) * 10
  148.       A = 21.2: B = 1.69: C = -0.304: D = 0.0167
  149.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  150.    ElseIf year >= 1940 And year < 1960 Then
  151.       y1 = 1940: y2 = 1960
  152.       t = (year - y1) / (y2 - y1) * 10
  153.       A = 24.2: B = 1.22: C = -0.064: D = 0.0031
  154.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  155.    ElseIf year >= 1960 And year < 1980 Then
  156.       y1 = 1960: y2 = 1980
  157.       t = (year - y1) / (y2 - y1) * 10
  158.       A = 33.2: B = 0.51: C = 0.231: D = -0.0109
  159.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  160.    ElseIf year >= 1980 And year < 2000 Then
  161.       y1 = 1980: y2 = 2000
  162.       t = (year - y1) / (y2 - y1) * 10
  163.       A = 51: B = 1.29: C = -0.026: D = 0.0032
  164.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  165.    ElseIf year >= 2000 And year < 2005 Then
  166.       y1 = 2000: y2 = 2005
  167.       t = (year - y1) / (y2 - y1) * 10
  168.       A = 63.87: B = 0.1: C = 0: D = 0
  169.       deltaT = A + B * t + C * t ^ 2 + D * t ^ 3
  170.    Else
  171.       deltaT = 108372
  172.    End If
  173. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-1-16 11:01 | 显示全部楼层
附件上传
24节气高精度公式-修订.zip (38.78 KB, 下载次数: 220)

TA的精华主题

TA的得分主题

发表于 2018-1-17 08:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-1-20 09:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-1-21 10:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-1-21 10:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
伍成平 发表于 2018-1-21 10:11
这个表格的代码有没有修改?

代码修改过的,你可以对照下!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-1 21:12 , Processed in 0.049016 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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