1900年之前的万年历软件(1900年前万年历农历查询)

admin

导语: 年前我们推送了一篇文章2022Excel四季日历[可打印版本](下载链接),有读者朋友留言说想要可以显示农历的版本,于是就有了今天的推文!Excel中本身是没有农历日期转换函数的,Excel表哥也是查阅了网络资料后得到了如下一些解决方法,在次分享给大家。只需要在上文模板中略加修改即可拥有...

年前我们推送了一篇文章

2022Excel四季日历[可打印版本](下载链接),有读者朋友留言说想要可以显示农历的版本,于是就有了今天的推文!

Excel中本身是没有农历日期转换函数的,Excel表哥也是查阅了网络资料后得到了如下一些解决方法,在次分享给大家。

只需要在上文模板中略加修改即可拥有

带农历的万年历啦!

01

方法一:TEXT+MID函数法

例如B12单元格是公历日历,则可以使用如下的公式将其转换为阴历日期:

=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(B12,"[$-130000]e")-4,10)+1,1) &MID("子丑寅卯辰巳午未申酉戌亥",MOD(TEXT(B12,"[$-130000]e")-4,12)+1,1) &"年"&TEXT(B12,"[$-130000][DBNum1]m月d日")

▲左右滑动查看完整公式

在上述阴历转换公式中,核心公式为

TEXT(B12,"[$-130000]e-mm-dd"),这个公式属于TEXT的隐藏用法,需要2007以上版本的EXCEL才支持,这个公式的关键是:[$-130000],它可以将Excel中阳历转化为以农历表示的的年月日,e-mm-dd则表示日期的显示形式。

另外增加了参数

[DBNum1],表示数值以“一、二、三......”中文格式显示。

▍注:上述公式存在一个问题是没法计算闰月,凡是有闰月的年份,它直接表示一年13个月。

02

方法二:TEXT+MID+CHOOSE+YEAR函数

可以看到方法一显示的公式除了注释中的问题之外,对于阴历月份当月十一日之前的显示方法也是和我们的常见说法不同,于是网上还找到了第二种TEXT+MID+CHOOSE+YEAR函数组合成的第二种公式:

=CHOOSE(MOD(YEAR(B13)-1900,10),"庚","辛","壬","癸","甲","乙","丙","丁","戊","己") &CHOOSE(MOD(YEAR(B13)-1900,12),"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥") &TEXT(B13,"[dbnum1][$-130000]年m月"&IF(--TEXT(B13,"[$-130000]d")<11,"初","") &TEXT(B13,"[dbnum1][$-130000]d"))

从上述公式的运算结果我们看到更加符合我们常见的阴历日期称法,即增加了对月初时初几的显示。

对于上面介绍的两种方法,我们都可以使用公式运算求值进行按步骤计算,有助于我们理解公式的意义。

▍注-上述公式中:

"甲","乙","丙","丁","戊","己","庚","辛","壬","癸", 表示天干,十年一轮回;

"子,"丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"表示地支,十二年轮回一次。

而1900-1-1则是Excel中可以表示的最小日期。

03

自定义公式法

上面介绍的Excel公历转农历都是使用Excel内置函数完成的,有一个弊端就是公式太长(而且根本记不住),如果使用自定义函数,在公式就可以简化输入。

我在网上找到了一段

VBA代码,可以实现将1921年至2100年时间范围内所有的公历日期转换为农历,代码总计360行,我也验证过了,并且根据自己的实际操作添加了部分注释。现在也贴出来供大家参考:

向上滑动阅览

Public Function NongLi(Optional XX_DATE As Date)Dim MonthAdd(11), NongliData(200), TianGan(9), DiZhi(11), ShuXiang(11), DayName(30), MonName(12)Dim curTime, curYear, curMonth, curDayDim GongliStr, NongliStr, NongliDayStrDim 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) = 0MonthAdd(1) = 31MonthAdd(2) = 59MonthAdd(3) = 90MonthAdd(4) = 120MonthAdd(5) = 151MonthAdd(6) = 181MonthAdd(7) = 212MonthAdd(8) = 243MonthAdd(9) = 273MonthAdd(10) = 304MonthAdd(11) = 334'农历数据NongliData(0) = 2635 '1921年NongliData(1) = 333387 '1922年NongliData(2) = 1701NongliData(3) = 1748'...省略若干行NongliData(96) = 395863NongliData(97) = 1323NongliData(98) = 2707NongliData(99) = 265877NongliData(100) = 1706 '2021年NongliData(101) = 2773'...省略若干行NongliData(175) = 267421NongliData(176) = 2605NongliData(177) = 3349NongliData(178) = 138021NongliData(179) = 3410 '1921+179 =2100年'生成当前公历年、月、日 ==> GongliStrcurYear = Year(curTime)curMonth = Month(curTime)curDay = Day(curTime)GongliStr = curYear & "年"If (curMonth < 10) Then GongliStr = GongliStr & "0" & curMonth & "月"Else GongliStr = GongliStr & curMonth & "月"End IfIf (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) - 38If ((curYear Mod 4) = 0 And curMonth > 2) Then TheDate = TheDate + 1End If'计算农历天干、地支、月、日isEnd = 0m = 0Do 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 - 1LoopIf (isEnd = 1) Then Exit DoEnd Ifm = m + 1LoopcurYear = 1921 + mcurMonth = k - n + 1curDay = TheDateIf (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 IfEnd If'生成农历天干、地支、属相 ==> NongliStrNongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"'生成农历月、日 ==> NongliDayStrIf (curMonth < 1) Then NongliDayStr = "闰" & MonName(-1 * curMonth)Else NongliDayStr = MonName(curMonth)End IfNongliDayStr = NongliDayStr & "月"NongliDayStr = NongliDayStr & DayName(curDay)NongLi = NongliStr & NongliDayStrEnd Function

▲左右滑动查看完整代码

以2021-1-1为例使用

自定义公式Nongli()计算得到的农历日期为:

上面的日期结果中包含了完整的农历描述,如果我们还希望能简化,则再结合字符串函数MID或者RIGHT即可!

我们在上一篇文章

Excel四季日历[2022可打印版本](下载链接)的基础上,在每一行日历下增加一行,并添加如下公式,如图所示:

=MID(NongLi(B4),FIND(")",NongLi(B4))+1,99)

我们

以")"为查找符,找到Nongli公式转换出来的字符串"农历辛丑年(牛)十一月廿三"中的")"位置,继而使用

MID函数提取阴历月份和日期,一般的农历月份日期为4个或者是5个汉字,这里的99只要是>=5就ok。

另外,我们还要留意一下当月月初不属于本月的日期,可以通过修改条件格式将其

设置为灰色即可。

今天的分享到此结束,恭喜读者朋友们又获得一项新技能!

作者:Excel表哥

需要此包含农历日期的万年历模板的读者朋友,请在Excel表哥百家号回复【

农历】即可获取下载链接。

延伸阅读:

已获1400+付费下载的项目管理模板:

项目管理模板V4.1更新(WinMac电脑通用)

本文永久地址:https://www.hz04.com/article/116250.html
版权声明:1900年之前的万年历软件(1900年前万年历农历查询)由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报投诉,一经查实,本站将立刻删除。

相关阅读

    怎样的灵魂伴侣,是12星座的真正归宿?请收下这份对轴星座指南

    2 阅读

    双子座男的特点和缺点(双子座男生的特点)

    0 阅读

    十二星座克制哪个星座(十二星座克制哪个星座女生)

    114 阅读

    天秤座合适的星座(天秤座最适合和什么星座谈恋爱)

    634 阅读

    天蝎座对你发脾气说明什么呢(天蝎座对你发火)

    0 阅读

    狮子座男厌烦你的表现(狮子座男厌烦你的表现是什么)

    777 阅读

    水瓶座一区和天秤座二区配对(水瓶座一区和天秤座二区配对怎么样)

    311 阅读

    巨蟹女适合做闺蜜吗(水瓶女和巨蟹女适合做闺蜜吗)

    567 阅读

    双子男喜欢女人哪个部位(双子男喜欢那种类型的女生)

    803 阅读

发表评论

评论列表 (有 条评论,人围观)
取消
微信二维码
微信二维码
支付宝二维码