资源描述
如何在excel中实现阳历转化阴历
———————————————————————————————— 作者:
———————————————————————————————— 日期:
10
个人收集整理 勿做商业用途
步骤一,在Excel工作表界面下按<ALT+F11>组合键翻开VBA窗口,进入VBA编辑环境,在其窗口的菜单栏上依次单击“插入〞→“模块〞,可在当前VBA工程中插入模块,并直接进入此模块的代码编辑区域。可在此编辑区域中输入自定义函数的程序代码,如图:
Public 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) = 202126 ﻫ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 & NongliDayStr
End Function
步骤2,单击窗口右上角的“关闭〞按钮关闭VBA编辑窗口,返回到工作表窗口中。此时即可在当前工作簿中使用刚刚创立的自定义函数,并且可以在函数列表的“用户定义〞类别中找到此自定义函数。如图
步骤3,要使自定义函数能够应用在其他工作簿中,需要将这个包含自定义函数的工作簿另存为“加载宏〞。依次单击“Office按钮〞→“另存为〞→“其他格式〞,翻开“另存为〞对话框,在“保存类型〞下拉列表中选择“Excel 加载宏〞,然后为此加载宏命名后单击“保存〞按钮进展保存。
ﻫﻫ
步骤4,保存后需要在加载项中添加加载宏。单击“Office按钮〞→“Excel选项〞,翻开“Excel选项〞对话框,在左侧类别中选择“加载项〞,然后在右侧下方的“管理〞下拉列表中选择“Excel 加载项〞,再单击“转到〞按钮,翻开“加载宏〞对话框,在其中勾选之前所保存的包含自定义函数的加载宏前面的复选框,最后单击“确定〞即可完成加载项的添加。
步骤五,做好阳历列后,在另外一列选择插入自定义函数,确定,然后大功告成。
展开阅读全文