ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 24节气

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-7 17:37 | 显示全部楼层 |阅读模式
网上找的程序,不知什么原因只能提前预告节气,而当天不显示
Private Function JieQi(TempDate As String) As String '计算节气
Dim S_Term(1 To 24) As String
Dim StInfo(1 To 24) As Long
Dim y As Integer, j As Integer, k As Integer
Dim E(1)  As Double
Dim dtJ As Date
Dim strJm As String, strJd As String
Dim Strj As String  '节气日期     '节气名
S_Term(1) = "小寒"
S_Term(2) = "大寒"
S_Term(3) = "立春"
S_Term(4) = "雨水"
S_Term(5) = "惊蛰"
S_Term(6) = "春分"
S_Term(7) = "清明"
  S_Term(8) = "谷雨"
S_Term(9) = "立夏"
S_Term(10) = "小满"
  S_Term(11) = "芒种"
   S_Term(12) = "夏至"
S_Term(13) = "小暑"
S_Term(14) = "大署"
S_Term(15) = "立秋"
S_Term(16) = "处暑"
S_Term(17) = "白露"
S_Term(18) = "秋分"
  S_Term(19) = "寒露"
S_Term(20) = "霜降"
S_Term(21) = "立冬"
S_Term(22) = "小雪"
S_Term(23) = "大雪"
S_Term(24) = "冬至"               '节气信息
StInfo(1) = 0
StInfo(2) = 21208
StInfo(3) = 42467
StInfo(4) = 63836
StInfo(5) = 85337
StInfo(6) = 107014
StInfo(7) = 128867
  StInfo(8) = 150921
StInfo(9) = 173149
StInfo(10) = 195551
StInfo(11) = 218072
StInfo(12) = 240693
StInfo(13) = 263343
StInfo(14) = 285989
StInfo(15) = 308563
StInfo(16) = 331033
StInfo(17) = 353350
StInfo(18) = 375494
StInfo(19) = 397447
StInfo(20) = 419210
StInfo(21) = 440795
   StInfo(22) = 462224
   StInfo(23) = 483532
StInfo(24) = 504758
  y = Val(Left(TempDate, 4)): j = Val(Mid(TempDate, 6, 2)): k = Val(Right(TempDate, 2))
  If k <= 15 Then
  j = j * 2 - 1
  Else
  j = j * 2
End If
E(0) = (31556925.9747 * (y - 1900) + StInfo(j) * 60#)
E(1) = DateDiff("s", "1970-1-1 0:0", "1900-1-6 2:5") + E(0)
E(0) = E(1) / 2
dtJ = DateAdd("s", E(1) - E(0), DateAdd("s", E(0), "1970-1-1 1:18"))
dtJ = Year(dtJ) & "-" & Month(dtJ) & "-" & Day(dtJ)
If (Month(dtJ) < 10) Then
strJm = "0" & Month(dtJ)
Else
strJm = Month(dtJ)
End If
If (Day(dtJ) < 10) Then
strJd = "0" & Day(dtJ)
Else
strJd = Day(dtJ)
End If
Strj = Format(Year(dtJ) & "-" & strJm & "-" & strJd, "yyyy-mm-dd")
JieQi = ""
If DateDiff("d", Strj, TempDate) = -2 Then JieQi = "后天" + S_Term(j)
If DateDiff("d", Strj, TempDate) = -1 Then JieQi = "明天" + S_Term(j)
If Strj = TempDate Then JieQi = "今天" + S_Term(j)
End Function
Sub 二十四节气()
MsgBox JieQi(Date)
End Sub


TA的精华主题

TA的得分主题

发表于 2020-3-7 20:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-7 22:27 | 显示全部楼层
zopey 发表于 2020-3-7 20:17
类似公式

http://club.excelhome.net/thread-1390487-1-1.html

谢谢!我不是在EXCEL中用,不会调用那函数。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-7 22:31 | 显示全部楼层
本帖最后由 chuhaiou 于 2020-3-7 23:26 编辑
chuhaiou 发表于 2020-3-7 22:27
谢谢!我不是在EXCEL中用,不会调用那函数。
If DateDiff("d", Strj, TempDate) = 0 JieQi = "今天" + S_Term(j)

TA的精华主题

TA的得分主题

发表于 2020-3-8 04:51 | 显示全部楼层
试试
If CDate(Strj) = TempDate Then JieQi = "今天" + S_Term(j)

TA的精华主题

TA的得分主题

发表于 2020-3-8 08:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请参考
'网上找的程序,不知什么原因只能提前预告节气,而当天不显示
Private Function JieQi(TempDate As String) ' As String '计算节气
Dim S_Term(1 To 24) As String
Dim StInfo(1 To 24) As Long
Dim y As Integer, j As Integer, k As Integer
Dim E(1)  As Double
Dim dtJ As Date
Dim strJm As String, strJd As String
Dim Strj As String  '节气日期     '节气名
S_Term(1) = "小寒"
S_Term(2) = "大寒"
S_Term(3) = "立春"
S_Term(4) = "雨水"
S_Term(5) = "惊蛰"
S_Term(6) = "春分"
S_Term(7) = "清明"
  S_Term(8) = "谷雨"
S_Term(9) = "立夏"
S_Term(10) = "小满"
  S_Term(11) = "芒种"
   S_Term(12) = "夏至"
S_Term(13) = "小暑"
S_Term(14) = "大署"
S_Term(15) = "立秋"
S_Term(16) = "处暑"
S_Term(17) = "白露"
S_Term(18) = "秋分"
  S_Term(19) = "寒露"
S_Term(20) = "霜降"
S_Term(21) = "立冬"
S_Term(22) = "小雪"
S_Term(23) = "大雪"
S_Term(24) = "冬至"               '节气信息
StInfo(1) = 0
StInfo(2) = 21208
StInfo(3) = 42467
StInfo(4) = 63836
StInfo(5) = 85337
StInfo(6) = 107014
StInfo(7) = 128867
  StInfo(8) = 150921
StInfo(9) = 173149
StInfo(10) = 195551
StInfo(11) = 218072
StInfo(12) = 240693
StInfo(13) = 263343
StInfo(14) = 285989
StInfo(15) = 308563
StInfo(16) = 331033
StInfo(17) = 353350
StInfo(18) = 375494
StInfo(19) = 397447
StInfo(20) = 419210
StInfo(21) = 440795
   StInfo(22) = 462224
   StInfo(23) = 483532
StInfo(24) = 504758
  y = Val(Left(TempDate, 4)): j = Val(Mid(TempDate, 6, 2)): k = Val(Right(TempDate, 2))
  If k <= 15 Then
  j = j * 2 - 1
  Else
  j = j * 2
End If
E(0) = (31556925.9747 * (y - 1900) + StInfo(j) * 60#)
E(1) = DateDiff("s", "1970-1-1 0:0", "1900-1-6 2:5") + E(0)
E(0) = E(1) / 2
dtJ = DateAdd("s", E(1) - E(0), DateAdd("s", E(0), "1970-1-1 1:18"))
dtJ = Year(dtJ) & "-" & Month(dtJ) & "-" & Day(dtJ)
If (Month(dtJ) < 10) Then
strJm = "0" & Month(dtJ)
Else
strJm = Month(dtJ)
End If
If (Day(dtJ) < 10) Then
strJd = "0" & Day(dtJ)
Else
strJd = Day(dtJ)
End If
Strj = Format(Year(dtJ) & "-" & strJm & "-" & strJd, "yyyy-mm-dd")
JieQi = ""
If DateDiff("d", Strj, TempDate) > -2 Then JieQi = 14 - DateDiff("d", Strj, TempDate) & "天后" + S_Term(j + 1)
If DateDiff("d", Strj, TempDate) = -2 Then JieQi = "后天" + S_Term(j)
If DateDiff("d", Strj, TempDate) = -1 Then JieQi = "明天" + S_Term(j)
If CDate(Strj) = TempDate Then JieQi = "今天" + S_Term(j)
End Function

Sub 二十四节气()
MsgBox JieQi(Date)
MsgBox JieQi("2020-3-4")
MsgBox JieQi("2020-3-5")
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 13:06 | 显示全部楼层
YZC51 发表于 2020-3-8 08:36
请参考
'网上找的程序,不知什么原因只能提前预告节气,而当天不显示
Private Function JieQi(TempDate A ...

谢谢帮助!还是有极少量相差一天。如本应2022年3月20日春分,本程序是3月21日春分。

TA的精华主题

TA的得分主题

发表于 2020-3-8 14:12 | 显示全部楼层
chuhaiou 发表于 2020-3-8 13:06
谢谢帮助!还是有极少量相差一天。如本应2022年3月20日春分,本程序是3月21日春分。

要想精确,只能用2楼老师的天文算法!

TA的精华主题

TA的得分主题

发表于 2020-3-8 15:04 | 显示全部楼层
把24节气名用数组表示,节与结之间有固定值,设好一个值,其余用代码自算即可,能大量简化代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-8 21:37 | 显示全部楼层
YZC51 发表于 2020-3-8 14:12
要想精确,只能用2楼老师的天文算法!

那个算法,离开电子表格,我引用不来。好像与单元格有关系。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 12:56 , Processed in 0.047058 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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