ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 24节气公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-8 11:04 | 显示全部楼层 |阅读模式
  1. Public Function getjq(yy As Integer, mm As Integer)

  2. v0 = 628.3319653318
  3. '第1步迭代
  4. t = 0
  5. L0 = (48650621.66 + 6283319653.318 * t) / 10 ^ 7

  6. 'W指的是太阳黄经。1999年春分对应W=0,以后每W每增加15度对应下一个节气。
  7. W = (mm - 5 + (yy - 1999) * 24) * 15 * 3.1415926 / 180

  8. '第2步迭代
  9. t = t + (W - L0) / v0
  10. t2 = t * t
  11. l1 = (48950621.66 + 6283319653.318 * t + 53 * t2 _
  12.       + 334116 * Cos(4.67 + 628.307585 * t) + 2061 * Cos(2.678 + 628.3076 * t) * t) / 10 ^ 7
  13. v1 = 628.332 + 21 * Sin(1.527 + 628.307585 * t)

  14. '第3步迭代
  15. t = t + (W - l1) / v1
  16. t2 = t * t
  17. t3 = t2 * t
  18. t4 = t3 * t

  19. L2 = (48950621.66 + 6283319653.318 * t + 52.9674 * t2 + 0.00432 * t3 - 0.001124 * t4 _
  20.      + 334166 * Cos(4.669257 + 628.307585 * t) + 3489 * Cos(4.6261 + 1256.61517 * t) _
  21.      + 350 * Cos(2.744 + 575.3385 * t) + 342 * Cos(2.829 + 0.3523 * t) _
  22.      + 314 * Cos(3.628 + 7771.3771 * t) + 268 * Cos(4.418 + 786.0419 * t) _
  23.      + 234 * Cos(6.135 + 393.021 * t) + 132 * Cos(0.742 + 1150.677 * t) _
  24.      + 127 * Cos(2.037 + 52.9691 * t) + 120 * Cos(1.11 + 157.7344 * t) _
  25.      + 99 * Cos(5.23 + 588.493 * t) + 90 * Cos(2.05 + 2.63 * t) _
  26.      + 86 * Cos(3.51 + 39.815 * t) + 78 * Cos(1.18 + 522.369 * t) _
  27.      + 75 * Cos(2.53 + 550.755 * t) + 51 * Cos(4.58 + 1884.923 * t) _
  28.      + 49 * Cos(4.21 + 77.552 * t) + 36 * Cos(2.92 + 0.07 * t) _
  29.      + 32 * Cos(5.85 + 1179.063 * t) + 28 * Cos(1.9 + 79.63 * t) _
  30.      + 27 * Cos(0.31 + 1097.71 * t) + 2060.6 * Cos(2.67823 + 628.307585 * t) * t _
  31.      + 43 * Cos(2.635 + 1256.6152 * t) * t + 8.72 * Cos(1.072 + 628.3076 * t) * t2 _
  32.      - 994 - 834 * Sin(2.1824 - 33.75705 * t) _
  33.      - 64 * Sin(3.5069 + 1256.66393 * t)) / 10 ^ 7

  34. '第4步迭代
  35. t = t + (W - L2) / v1

  36. J2000 = 2451545
  37. '地球自转修正项 需完善
  38. JD = J2000 + t * 36525 - (64.7 + (yy - 2005) * 0.4) / 86400 + 8 / 24


  39. '转换日期
  40. Z = Int(JD + 0.5)
  41. F = JD + 0.5 - Z

  42. a0 = Int((Z - 1867216.25) / 36524.25)
  43. If Z < 2299161 Then
  44.    A = Z
  45. Else
  46.    A = Z + 1 + a0 - Int(a0 / 4)
  47. End If
  48. B = A + 1524
  49. C = Int((B - 122.1) / 365.25)
  50. d = Int(365.25 * C)
  51. E = Int((B - d) / 30.6001)

  52. ''''
  53. d1 = B - d - Int(30.6001 * E) + F

  54. If E < 14 Then
  55.   m1 = E - 1
  56. Else
  57.   m1 = E - 13
  58. End If

  59. If m1 > 2 Then
  60.   y1 = C - 4716
  61. Else
  62.   y1 = C - 4715
  63. End If

  64. d2 = Int((d1 - Int(d1)) * 86400)
  65. hh1 = Int(d2 / 3600)
  66. mm1 = Round(((d2 - hh1 * 3600) / 60), 0)
  67. 'ss1 = d2 - hh1 * 3600 - mm1 * 60

  68. If mm1 < 10 Then mm1 = "0" & mm1

  69. getjq = y1 & "-" & m1 & "-" & Int(d1) & " " & hh1 & ":" & mm1

  70. End Function

复制代码

计算节气时间是制作一份合格日历的必要条件,找到如上代码,简单调试后可以正常运行了。
自定义函数 =getjq (年份,节气序号)  ,精度为分钟,详见附件。

24节气公式.zip (18.94 KB, 下载次数: 906)

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-1-8 12:55 | 显示全部楼层
本帖最后由 YZC51 于 2018-1-8 14:58 编辑

优秀作品,简单实用!1908到2090年期间有效!

TA的精华主题

TA的得分主题

发表于 2018-1-8 13:14 | 显示全部楼层
计算得精确没有意义,权威才是根本。据说寿星天文历比日梭万年历准确,但是节气是按日梭的,人家是接近紫金天文台的。24节气计算差1秒,可能就差一天!还是用天文台的数据查表吧,因为所有现行日历都以之为标准。天文台的数据到2100年,够用了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-8 13:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
YZC51 发表于 2018-1-8 12:55
优秀作品,简单实用!1098到2090年期间有效!

你收藏的excel函数版的节气公式,下载看了,看不懂(公式中很多的定义名称),估计是二分逼近法。

数学上通常采用的迭代求解方法有二分逼近法和牛顿迭代法。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-8 14:27 | 显示全部楼层
12121.JPG

1908、2090  报错是什么原因呢?它们的平均值是1999 年,而1999出现在如下代码

'W指的是太阳黄经。1999年春分对应W=0,以后每W每增加15度对应下一个节气。
W = (mm - 5 + (yy - 1999) * 24) * 15 * 3.1415926 / 180

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-1-8 15:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如:
    Dim x As Long
    x = 2000 * 365   ' 错误: 溢出
要解决这个问题,请按如下方式键入该数字:
    Dim x As Long
    x = CLng(2000) * 365

根据以上帮助文件,修改变量  yy为 clng(yy), 溢出问题解决。

TA的精华主题

TA的得分主题

发表于 2018-1-8 17:21 | 显示全部楼层
zopey 发表于 2018-1-8 13:48
你收藏的excel函数版的节气公式,下载看了,看不懂(公式中很多的定义名称),估计是二分逼近法。

数 ...

收藏的,供参考
可以汇总的24节气时刻计算30节气-.rar (75.8 KB, 下载次数: 474)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-1-8 19:40 | 显示全部楼层
zopey 发表于 2018-1-8 15:01
试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如:
    Dim x A ...

谢谢老师分享!
这样也可以
Public Function getjq(yy, mm As Integer)

TA的精华主题

TA的得分主题

发表于 2018-1-9 07:52 | 显示全部楼层
zopey 发表于 2018-1-8 15:01
试图在计算中使用一个数字,并且该数字被强制为一个整数,但是结果超过了整数的范围,例如:
    Dim x A ...

向老师学习,在原来的基础上的文件
24节气自定义函数.rar (35.24 KB, 下载次数: 437)

TA的精华主题

TA的得分主题

发表于 2018-1-9 08:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 00:40 , Processed in 1.063562 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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