中易网

用Excel计算农历日期

答案:1  悬赏:80  
解决时间 2021-01-29 00:37
用Excel计算农历日期
最佳答案
Function bj(StrA, StrB)bj = ""'函数初始化。如果无相同内容,或其中有空文字列,则输出空结果。If Len(StrA) < Len(StrB) Then
StrShort = StrA
StrLong = StrB
LenShort = Len(StrA)
LenLong = Len(StrB)
Else
StrShort = StrB
StrLong = StrA
LenShort = Len(StrB)
LenLong = Len(StrA)
End If'以上首先比较字长大小,并赋值。For i = LenShort To 1 Step -1 '从字长最短的文字StrShort的最大字长LenShort开始倒循环“i”次。
For j = 1 To LenShort - i + 1 '对字长最短的文字StrShort,依次从其首字母开始,按字长“i”循环。
StrC = Mid(StrShort, j, i)'取出上述文字中,从首字母始,按字长“i”倒循环而选定的文字作为比较文字,
For k = 1 To LenLong - i + 1'对于字长最长的文字StrLong,从首字母开始到相同字长“i”结束来循环。
StrD = Mid(StrLong, k, i) '取出上述文字StrLong中,从首字母开始,按相同字长“i”选定的文字待比较;
If StrD = StrC Then'比较。如果所比较内容相同,则函数有了正确的结果。
bj = StrC'输出结果。
Exit Function'结束函数。
End If
Next k
Next j
Next iEnd Function
Function Rmbs(rng As Variant) As String'大写
Application.Volatile
If Not VBA.IsNumeric(rng) Then Rmbs = "": Exit Function'如果非数字则返回零
If rng = "" Then Rmbs = "": Exit Function '如果为空则返回空
If rng = 0 Then Rmbs = "": Exit Function '如果为0则返回“零圆整”
Rmbs = Replace(Replace(Application.Text(Round(rng, 2), "[DBnum2]"), ".", "圆"), "-", "负")'精确到两位并将小数点替换为圆将负号替换为“负”
Rmbs = IIf(Left(Right(Rmbs, 3), 1) = "圆", Left(Rmbs, Len(Rmbs) - 1) & "角" & Right(Rmbs, 1) & "分", IIf(Left(Right(Rmbs, 2), 1) = "圆", Rmbs & "角", Rmbs & "圆整"))
Rmbs = Replace(Replace(Rmbs, "零圆", ""), "零角", "")'替换零圆零角字符
End FunctionPublic Function NongLi(Optional XX_DATE As Date)
Dim MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)
Dim curTime, curYear, curMonth, curDay
Dim GongliStr, NongliStr, NongliDayStr
Dim i, m, n, k, isEnd, bit, TheDate'获取当前系统时间
curTime = XX_DATE'天干名称
TianGan(0) = "甲"
TianGan(1) = "乙"
TianGan(2) = "丙"
TianGan(3) = "丁"
TianGan(4) = "戊"
TianGan(5) = "己"
TianGan(6) = "庚"
TianGan(7) = "辛"
TianGan(8) = "壬"
TianGan(9) = "癸"
'地支名称
DiZhi(0) = "子"
DiZhi(1) = "丑"
DiZhi(2) = "寅"
DiZhi(3) = "卯"
DiZhi(4) = "辰"
DiZhi(5) = "巳"
DiZhi(6) = "午"
DiZhi(7) = "未"
DiZhi(8) = "申"
DiZhi(9) = "酉"
DiZhi(10) = "戌"
DiZhi(11) = "亥"
'属相名称
ShuXiang(0) = "鼠"
ShuXiang(1) = "牛"
ShuXiang(2) = "虎"
ShuXiang(3) = "兔"
ShuXiang(4) = "龙"
ShuXiang(5) = "蛇"
ShuXiang(6) = "马"
ShuXiang(7) = "羊"
ShuXiang(8) = "猴"
ShuXiang(9) = "鸡"
ShuXiang(10) = "狗"
ShuXiang(11) = "猪"
'农历日期名
DayName(0) = "*"
DayName(1) = "初一"
DayName(2) = "初二"
DayName(3) = "初三"
DayName(4) = "初四"
DayName(5) = "初五"
DayName(6) = "初六"
DayName(7) = "初七"
DayName(8) = "初八"
DayName(9) = "初九"
DayName(10) = "初十"
DayName(11) = "十一"
DayName(12) = "十二"
DayName(13) = "十三"
DayName(14) = "十四"
DayName(15) = "十五"
DayName(16) = "十六"
DayName(17) = "十七"
DayName(18) = "十八"
DayName(19) = "十九"
DayName(20) = "二十"
DayName(21) = "廿一"
DayName(22) = "廿二"
DayName(23) = "廿三"
DayName(24) = "廿四"
DayName(25) = "廿五"
DayName(26) = "廿六"
DayName(27) = "廿七"
DayName(28) = "廿八"
DayName(29) = "廿九"
DayName(30) = "三十"
'农历月份名
MonName(0) = "*"
MonName(1) = "正"
MonName(2) = "二"
MonName(3) = "三"
MonName(4) = "四"
MonName(5) = "五"
MonName(6) = "六"
MonName(7) = "七"
MonName(8) = "八"
MonName(9) = "九"
MonName(10) = "十"
MonName(11) = "十一"
MonName(12) = "腊"
'公历每月前面的天数
MonthAdd(0) = 0
MonthAdd(1) = 31
MonthAdd(2) = 59
MonthAdd(3) = 90
MonthAdd(4) = 120
MonthAdd(5) = 151
MonthAdd(6) = 181
MonthAdd(7) = 212
MonthAdd(8) = 243
MonthAdd(9) = 273
MonthAdd(10) = 304
MonthAdd(11) = 334
'农历数据
NongliData(0) = 2635
NongliData(1) = 333387
NongliData(2) = 1701
NongliData(3) = 1748
NongliData(4) = 267701
NongliData(5) = 694
NongliData(6) = 2391
NongliData(7) = 133423
NongliData(8) = 1175
NongliData(9) = 396438
NongliData(10) = 3402
NongliData(11) = 3749
NongliData(12) = 331177
NongliData(13) = 1453
NongliData(14) = 694
NongliData(15) = 201326
NongliData(16) = 2350
NongliData(17) = 465197
NongliData(18) = 3221
NongliData(19) = 3402
NongliData(20) = 400202
NongliData(21) = 2901
NongliData(22) = 1386
NongliData(23) = 267611
NongliData(24) = 605
NongliData(25) = 2349
NongliData(26) = 137515
NongliData(27) = 2709
NongliData(28) = 464533
NongliData(29) = 1738
NongliData(30) = 2901
NongliData(31) = 330421
NongliData(32) = 1242
NongliData(33) = 2651
NongliData(34) = 199255
NongliData(35) = 1323
NongliData(36) = 529706
NongliData(37) = 3733
NongliData(38) = 1706
NongliData(39) = 398762
NongliData(40) = 2741
NongliData(41) = 1206
NongliData(42) = 267438
NongliData(43) = 2647
NongliData(44) = 1318
NongliData(45) = 204070
NongliData(46) = 3477
NongliData(47) = 461653
NongliData(48) = 1386
NongliData(49) = 2413
NongliData(50) = 330077
NongliData(51) = 1197
NongliData(52) = 2637
NongliData(53) = 268877
NongliData(54) = 3365
NongliData(55) = 531109
NongliData(56) = 2900
NongliData(57) = 2922
NongliData(58) = 398042
NongliData(59) = 2395
NongliData(60) = 1179
NongliData(61) = 267415
NongliData(62) = 2635
NongliData(63) = 661067
NongliData(64) = 1701
NongliData(65) = 1748
NongliData(66) = 398772
NongliData(67) = 2742
NongliData(68) = 2391
NongliData(69) = 330031
NongliData(70) = 1175
NongliData(71) = 1611
NongliData(72) = 200010
NongliData(73) = 3749
NongliData(74) = 527717
NongliData(75) = 1452
NongliData(76) = 2742
NongliData(77) = 332397
NongliData(78) = 2350
NongliData(79) = 3222
NongliData(80) = 268949
NongliData(81) = 3402
NongliData(82) = 3493
NongliData(83) = 133973
NongliData(84) = 1386
NongliData(85) = 464219
NongliData(86) = 605
NongliData(87) = 2349
NongliData(88) = 334123
NongliData(89) = 2709
NongliData(90) = 2890
NongliData(91) = 267946
NongliData(92) = 2773
NongliData(93) = 592565
NongliData(94) = 1210
NongliData(95) = 2651
NongliData(96) = 395863
NongliData(97) = 1323
NongliData(98) = 2707
NongliData(99) = 265877
'生成当前公历年、月、日 ==> GongliStr
curYear = Year(curTime)
curMonth = Month(curTime)
curDay = Day(curTime)
GongliStr = curYear & "年"
If (curMonth < 10) Then
GongliStr = GongliStr & "0" & curMonth & "月"
Else
GongliStr = GongliStr & curMonth & "月"
End If
If (curDay < 10) Then
GongliStr = GongliStr & "0" & curDay & "日"
Else
GongliStr = GongliStr & curDay & "日"
End If
'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)
TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
If ((curYear Mod 4) = 0 And curMonth > 2) Then
TheDate = TheDate + 1
End If
'计算农历天干、地支、月、日
isEnd = 0
m = 0
Do
If (NongliData(m) < 4095) Then
k = 11
Else
k = 12
End If
n = k
Do
If (n < 0) Then
Exit Do
End If
'获取NongliData(m)的第n个二进制位的值
bit = NongliData(m)
For i = 1 To n Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
If (TheDate <= 29 + bit) Then
isEnd = 1
Exit Do
End If
TheDate = TheDate - 29 - bit
n = n - 1
Loop
If (isEnd = 1) Then
Exit Do
End If
m = m + 1
Loop
curYear = 1921 + m
curMonth = k - n + 1
curDay = TheDate
If (k = 12) Then
If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then
curMonth = 1 - curMonth
ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then
curMonth = curMonth - 1
End If
End If
'生成农历天干、地支、属相 ==> NongliStr
NongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"
NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"
'生成农历月、日 ==> NongliDayStr
If (curMonth < 1) Then
NongliDayStr = "闰" & MonName(-1 * curMonth)
Else
NongliDayStr = MonName(curMonth)
End If
NongliDayStr = NongliDayStr & "月"
NongliDayStr = NongliDayStr & DayName(curDay)NongLi = NongliStr & NongliDayStrEnd Function这是农历代码计算日期同期的函数days360
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
王天依这个名是啥含义
电视背景墙离沙发3米8的距离,买多大电视合适
ucl研究生如何申请,有哪些要求?
“我不想做的你偏让我做”这个对联的原对联
公司名字测试打分 祥瑞
鹤壁新区哪里有单间洗浴卫生点的?
换个手机登陆微信给别人发红包为什么显示你的
新华电子游戏厅地址好找么,我有些事要过去
装修公司可以把房子装修成loft那样的吗?
公婆让老公和我离婚我该怎么办
2011年邮政储蓄五年定期存款利率
当然去掉最后一点她很爱你还是可以有的是什么
暗黑3三狼衣 有没有三加攻效果
楼宇对讲4.3寸彩色室内分机多少钱一台
尽管不是喜欢我,但还像喜欢我一样对待。什么
推荐资讯
求个mugen万人主程序 要win版的
推荐像斯日其玛的《心之寻》这样动听婉转的歌
韩雅蜗牛精华修复霜好用吗?韩雅蜗牛精华修复
唐僧给孙悟空念的是什么咒语
马叔叔的吉他水平在在专业里面算是厉害的吗
百合喜铺怎么去啊,我要去那办事
由于没有及时通知到亲属过来签字做手术,导致
保健品怎么去啊,有知道地址的么
凡杀公者役 罪减平人三等 什么意思
用醋洗黑小龙虾效果怎么样?
什么才叫未就业毕业生?什么才算是未就业?
额头上受伤缝了几针,现在值夏天应如何日常护
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?