|
本帖最后由 爱疯 于 2011-10-14 21:46 编辑 <br /><br /><P>近日,看到一坛友提出农历、公历转换自定义函数,现提供如下代码,供大家参考。</P>
<P>附件回复可下载。</P>
<P>[hide]Option Explicit<BR>Dim WeekName(7), MonthAdd(11), NongliData(99), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)<BR>Dim curTime, curYear, curMonth, curDay, curWeekday<BR>Dim GongliStr, WeekdayStr, NongliStr, NongliDayStr<BR>Dim i, m, n, k, isEnd, bit, TheDate<BR>Function nglzh(rag As Range)<BR>'获取时间<BR>curTime = rag.Text<BR>'星期名<BR>WeekName(0) = " * "<BR>WeekName(1) = "星期日"<BR>WeekName(2) = "星期一"<BR>WeekName(3) = "星期二"<BR>WeekName(4) = "星期三"<BR>WeekName(5) = "星期四"<BR>WeekName(6) = "星期五"<BR>WeekName(7) = "星期六"<BR>'天干名称<BR>TianGan(0) = "甲"<BR>TianGan(1) = "乙"<BR>TianGan(2) = "丙"<BR>TianGan(3) = "丁"<BR>TianGan(4) = "戊"<BR>TianGan(5) = "己"<BR>TianGan(6) = "庚"<BR>TianGan(7) = "辛"<BR>TianGan(8) = "壬"<BR>TianGan(9) = "癸"<BR>'地支名称<BR>DiZhi(0) = "子"<BR>DiZhi(1) = "丑"<BR>DiZhi(2) = "寅"<BR>DiZhi(3) = "卯"<BR>DiZhi(4) = "辰"<BR>DiZhi(5) = "巳"<BR>DiZhi(6) = "午"<BR>DiZhi(7) = "未"<BR>DiZhi(8) = "申"<BR>DiZhi(9) = "酉"<BR>DiZhi(10) = "戌"<BR>DiZhi(11) = "亥"<BR>'属相名称<BR>ShuXiang(0) = "鼠"<BR>ShuXiang(1) = "牛"<BR>ShuXiang(2) = "虎"<BR>ShuXiang(3) = "兔"<BR>ShuXiang(4) = "龙"<BR>ShuXiang(5) = "蛇"<BR>ShuXiang(6) = "马"<BR>ShuXiang(7) = "羊"<BR>ShuXiang(8) = "猴"<BR>ShuXiang(9) = "鸡"<BR>ShuXiang(10) = "狗"<BR>ShuXiang(11) = "猪"<BR>'农历日期名<BR>DayName(0) = "*"<BR>DayName(1) = "初一"<BR>DayName(2) = "初二"<BR>DayName(3) = "初三"<BR>DayName(4) = "初四"<BR>DayName(5) = "初五"<BR>DayName(6) = "初六"<BR>DayName(7) = "初七"<BR>DayName(8) = "初八"<BR>DayName(9) = "初九"<BR>DayName(10) = "初十"<BR>DayName(11) = "十一"<BR>DayName(12) = "十二"<BR>DayName(13) = "十三"<BR>DayName(14) = "十四"<BR>DayName(15) = "十五"<BR>DayName(16) = "十六"<BR>DayName(17) = "十七"<BR>DayName(18) = "十八"<BR>DayName(19) = "十九"<BR>DayName(20) = "二十"<BR>DayName(21) = "廿一"<BR>DayName(22) = "廿二"<BR>DayName(23) = "廿三"<BR>DayName(24) = "廿四"<BR>DayName(25) = "廿五"<BR>DayName(26) = "廿六"<BR>DayName(27) = "廿七"<BR>DayName(28) = "廿八"<BR>DayName(29) = "廿九"<BR>DayName(30) = "三十"<BR>'农历月份名<BR>MonName(0) = "*"<BR>MonName(1) = "正"<BR>MonName(2) = "二"<BR>MonName(3) = "三"<BR>MonName(4) = "四"<BR>MonName(5) = "五"<BR>MonName(6) = "六"<BR>MonName(7) = "七"<BR>MonName(8) = "八"<BR>MonName(9) = "九"<BR>MonName(10) = "十"<BR>MonName(11) = "十一"<BR>MonName(12) = "腊"<BR>'公历每月前面的天数<BR>MonthAdd(0) = 0<BR>MonthAdd(1) = 31<BR>MonthAdd(2) = 59<BR>MonthAdd(3) = 90<BR>MonthAdd(4) = 120<BR>MonthAdd(5) = 151<BR>MonthAdd(6) = 181<BR>MonthAdd(7) = 212<BR>MonthAdd(8) = 243<BR>MonthAdd(9) = 273<BR>MonthAdd(10) = 304<BR>MonthAdd(11) = 334<BR>'农历数据<BR>NongliData(0) = 2635<BR>NongliData(1) = 333387<BR>NongliData(2) = 1701<BR>NongliData(3) = 1748<BR>NongliData(4) = 267701<BR>NongliData(5) = 694<BR>NongliData(6) = 2391<BR>NongliData(7) = 133423<BR>NongliData(8) = 1175<BR>NongliData(9) = 396438<BR>NongliData(10) = 3402<BR>NongliData(11) = 3749<BR>NongliData(12) = 331177<BR>NongliData(13) = 1453<BR>NongliData(14) = 694<BR>NongliData(15) = 201326<BR>NongliData(16) = 2350<BR>NongliData(17) = 465197<BR>NongliData(18) = 3221<BR>NongliData(19) = 3402<BR>NongliData(20) = 400202<BR>NongliData(21) = 2901<BR>NongliData(22) = 1386<BR>NongliData(23) = 267611<BR>NongliData(24) = 605<BR>NongliData(25) = 2349<BR>NongliData(26) = 137515<BR>NongliData(27) = 2709<BR>NongliData(28) = 464533<BR>NongliData(29) = 1738<BR>NongliData(30) = 2901<BR>NongliData(31) = 330421<BR>NongliData(32) = 1242<BR>NongliData(33) = 2651<BR>NongliData(34) = 199255<BR>NongliData(35) = 1323<BR>NongliData(36) = 529706<BR>NongliData(37) = 3733<BR>NongliData(38) = 1706<BR>NongliData(39) = 398762<BR>NongliData(40) = 2741<BR>NongliData(41) = 1206<BR>NongliData(42) = 267438<BR>NongliData(43) = 2647<BR>NongliData(44) = 1318<BR>NongliData(45) = 204070<BR>NongliData(46) = 3477<BR>NongliData(47) = 461653<BR>NongliData(48) = 1386<BR>NongliData(49) = 2413<BR>NongliData(50) = 330077<BR>NongliData(51) = 1197<BR>NongliData(52) = 2637<BR>NongliData(53) = 268877<BR>NongliData(54) = 3365<BR>NongliData(55) = 531109<BR>NongliData(56) = 2900<BR>NongliData(57) = 2922<BR>NongliData(58) = 398042<BR>NongliData(59) = 2395<BR>NongliData(60) = 1179<BR>NongliData(61) = 267415<BR>NongliData(62) = 2635<BR>NongliData(63) = 661067<BR>NongliData(64) = 1701<BR>NongliData(65) = 1748<BR>NongliData(66) = 398772<BR>NongliData(67) = 2742<BR>NongliData(68) = 2391<BR>NongliData(69) = 330031<BR>NongliData(70) = 1175<BR>NongliData(71) = 1611<BR>NongliData(72) = 200010<BR>NongliData(73) = 3749<BR>NongliData(74) = 527717<BR>NongliData(75) = 1452<BR>NongliData(76) = 2742<BR>NongliData(77) = 332397<BR>NongliData(78) = 2350<BR>NongliData(79) = 3222<BR>NongliData(80) = 268949<BR>NongliData(81) = 3402<BR>NongliData(82) = 3493<BR>NongliData(83) = 133973<BR>NongliData(84) = 1386<BR>NongliData(85) = 464219<BR>NongliData(86) = 605<BR>NongliData(87) = 2349<BR>NongliData(88) = 334123<BR>NongliData(89) = 2709<BR>NongliData(90) = 2890<BR>NongliData(91) = 267946<BR>NongliData(92) = 2773<BR>NongliData(93) = 592565<BR>NongliData(94) = 1210<BR>NongliData(95) = 2651<BR>NongliData(96) = 395863<BR>NongliData(97) = 1323<BR>NongliData(98) = 2707<BR>NongliData(99) = 265877<BR>'生成当前公历年、月、日 ==> GongliStr<BR>curYear = Year(curTime)<BR>curMonth = Month(curTime)<BR>curDay = Day(curTime)<BR>GongliStr = curYear & "年"<BR>If (curMonth < 10) Then<BR> GongliStr = GongliStr & "0" & curMonth & "月"<BR>Else<BR> GongliStr = GongliStr & curMonth & "月"<BR>End If<BR>If (curDay < 10) Then<BR> GongliStr = GongliStr & "0" & curDay & "日"<BR>Else<BR> GongliStr = GongliStr & curDay & "日"<BR>End If<BR>'生成当前公历星期 ==> WeekdayStr<BR>curWeekday = Weekday(curTime)<BR>WeekdayStr = WeekName(curWeekday)<BR>'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)<BR>TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38<BR>If ((curYear Mod 4) = 0 And curMonth > 2) Then<BR> TheDate = TheDate + 1<BR>End If<BR>'计算农历天干、地支、月、日<BR>isEnd = 0<BR>m = 0<BR>Do<BR> If (NongliData(m) < 4095) Then<BR> k = 11<BR> Else<BR> k = 12<BR> End If<BR> n = k<BR> Do<BR> If (n < 0) Then<BR> Exit Do<BR> End If<BR> '获取NongliData(m)的第n个二进制位的值<BR> bit = NongliData(m)<BR> For i = 1 To n Step 1<BR> bit = Int(bit / 2)<BR> Next<BR> bit = bit Mod 2<BR> If (TheDate <= 29 + bit) Then<BR> isEnd = 1<BR> Exit Do<BR> End If<BR> TheDate = TheDate - 29 - bit<BR> n = n - 1<BR> Loop<BR> If (isEnd = 1) Then<BR> Exit Do<BR> End If<BR> m = m + 1<BR>Loop<BR>curYear = 1921 + m<BR>curMonth = k - n + 1<BR>curDay = TheDate<BR>If (k = 12) Then<BR> If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then<BR> curMonth = 1 - curMonth<BR> ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then<BR> curMonth = curMonth - 1<BR> End If<BR>End If<BR>'生成农历天干、地支、属相 ==> NongliStr<BR>NongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"<BR>NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"<BR>'生成农历月、日 ==> NongliDayStr<BR>If (curMonth < 1) Then<BR> NongliDayStr = "闰" & MonName(-1 * curMonth)<BR>Else<BR> NongliDayStr = MonName(curMonth)<BR>End If<BR>NongliDayStr = NongliDayStr & "月"<BR>NongliDayStr = NongliDayStr & DayName(curDay)<BR>nglzh = NongliStr & NongliDayStr<BR>End Function</P>
<P><BR>附件<BR>[/hide ]</P>
<P><BR> </P> |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|