Excel如何显示农历日期和农历月份?
1个回答
展开全部
结合前人经验,站在巨人肩膀上做出来的版本。主要改善的有如下2点,其次对于公式都做了注解。
1. 农历每个月初一显示为相应的月份,比如六月初一,则显示为六月,符合一般日历上显示农历的习惯。
2. 农历十号、二十号、及三十号分别显示为初十、二十、三十,二十一至二十九仍显示为廿一、廿二等,三十一也是卅一,修改了其他回答中“初一日”,“十五日”这样的显示方式,更符合习惯。
=IF(TEXT(A1,"[$-130000]d")="1",
* 如果A1格农历日期为1号,则通过下述判断显示为农历月份。"[$-130000]”是用于换算农历,后缀d表示换算出农历日期,下一行中的后缀m则是表示农历月份。
IF(TEXT(A1," [$-130000]m")*1-1=12,"腊",
* 农历十二月显示为腊月,其中[$-130000]m")*1减去1是因为2020年为农历闰4月,不减去1的话,当年农历12月会显示为十三月。
IF(TEXT(A1," [$-130000]m")*1=1," 正",
* 农历一月显示为正月,此处不减一,因为农历一月尚不涉及闰月。
IF(TEXT(A1," [$-130000]m")*1-1=10,"十",
IF(TEXT(A1," [$-130000]m")*1-1=11,"十一",
* 阿拉伯数字10及11转汉字会显示为“一十”和“一十一”这里10月和11月特别处理。
TEXT(TEXT(A1," [$-130000]m")-1,"[DBNum1]"
* 我是2020年8月开始做的日历,所以在解决闰四月这个问题的时候,采取了简单粗暴的办法,就是除了上述正月以外的月份统统都减去1来计算,而没有考虑2、3、4(闰)月份的问题。实际使用中,针对不同年份的农历闰月问题,可以在闰月前采用不减一的公式,即手工去掉上面所有的“-1”,而自闰月后采用减一的公式。因为Excel无法计算农历闰月,所以只能这样曲线救国了。
)))))
&"月",
* 到这里为止,解决了农历初一显示为月份的问题。从第二行开始,也可以单独用于农历月份。
下面开始是解决农历初一以外的日期问题,同时为了解决上面列的第二点改善,也做了简单粗暴的设计。
IF(TEXT(A1,"[$-130000]d")-9<1,"初"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 初一在之前的if里已经处理过了,所以这里简单的用日期-9<1就可以解决初二到初九的问题了。
IF(TEXT(A1,"[$-130000]d")="10","初十",
* 在上面没有才用日期-9≤1把初十解决掉,是因为在实践中发现那样子初十会显示为“初〇”,问题根源疑似是由TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d")这段语句造成的。这里我又采取了简单粗暴的办法,就是另起一行,把初十单独拉出来做。
IF(TEXT(A1,"[$-130000]d")-19<1,"十"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 这里是解决十一到十九之间的问题,就直接显示十一到十九,逻辑为“十”加上个位的一到九,其中个位的一到九就是通过上述这段语句TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d") 解决的
IF(TEXT(A1,"[$-130000]d")="20","二十",
* 这里是单独解决二十,理由同上面初十
IF(TEXT(A1,"[$-130000]d")-29<1,"廿"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 这里是解决廿一到廿九,逻辑同十一到十九,下面三十和卅一逻辑基本同上。做完之后才发现阴历似乎并没有三十一号。。。。然而也懒得再去验证和修改了。
IF(TEXT(A1,"[$-130000]d")="30","三十",
IF(TEXT(A1,"[$-130000]d")-39<1,"卅"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
""))))))))
1. 农历每个月初一显示为相应的月份,比如六月初一,则显示为六月,符合一般日历上显示农历的习惯。
2. 农历十号、二十号、及三十号分别显示为初十、二十、三十,二十一至二十九仍显示为廿一、廿二等,三十一也是卅一,修改了其他回答中“初一日”,“十五日”这样的显示方式,更符合习惯。
=IF(TEXT(A1,"[$-130000]d")="1",
* 如果A1格农历日期为1号,则通过下述判断显示为农历月份。"[$-130000]”是用于换算农历,后缀d表示换算出农历日期,下一行中的后缀m则是表示农历月份。
IF(TEXT(A1," [$-130000]m")*1-1=12,"腊",
* 农历十二月显示为腊月,其中[$-130000]m")*1减去1是因为2020年为农历闰4月,不减去1的话,当年农历12月会显示为十三月。
IF(TEXT(A1," [$-130000]m")*1=1," 正",
* 农历一月显示为正月,此处不减一,因为农历一月尚不涉及闰月。
IF(TEXT(A1," [$-130000]m")*1-1=10,"十",
IF(TEXT(A1," [$-130000]m")*1-1=11,"十一",
* 阿拉伯数字10及11转汉字会显示为“一十”和“一十一”这里10月和11月特别处理。
TEXT(TEXT(A1," [$-130000]m")-1,"[DBNum1]"
* 我是2020年8月开始做的日历,所以在解决闰四月这个问题的时候,采取了简单粗暴的办法,就是除了上述正月以外的月份统统都减去1来计算,而没有考虑2、3、4(闰)月份的问题。实际使用中,针对不同年份的农历闰月问题,可以在闰月前采用不减一的公式,即手工去掉上面所有的“-1”,而自闰月后采用减一的公式。因为Excel无法计算农历闰月,所以只能这样曲线救国了。
)))))
&"月",
* 到这里为止,解决了农历初一显示为月份的问题。从第二行开始,也可以单独用于农历月份。
下面开始是解决农历初一以外的日期问题,同时为了解决上面列的第二点改善,也做了简单粗暴的设计。
IF(TEXT(A1,"[$-130000]d")-9<1,"初"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 初一在之前的if里已经处理过了,所以这里简单的用日期-9<1就可以解决初二到初九的问题了。
IF(TEXT(A1,"[$-130000]d")="10","初十",
* 在上面没有才用日期-9≤1把初十解决掉,是因为在实践中发现那样子初十会显示为“初〇”,问题根源疑似是由TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d")这段语句造成的。这里我又采取了简单粗暴的办法,就是另起一行,把初十单独拉出来做。
IF(TEXT(A1,"[$-130000]d")-19<1,"十"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 这里是解决十一到十九之间的问题,就直接显示十一到十九,逻辑为“十”加上个位的一到九,其中个位的一到九就是通过上述这段语句TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d") 解决的
IF(TEXT(A1,"[$-130000]d")="20","二十",
* 这里是单独解决二十,理由同上面初十
IF(TEXT(A1,"[$-130000]d")-29<1,"廿"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
* 这里是解决廿一到廿九,逻辑同十一到十九,下面三十和卅一逻辑基本同上。做完之后才发现阴历似乎并没有三十一号。。。。然而也懒得再去验证和修改了。
IF(TEXT(A1,"[$-130000]d")="30","三十",
IF(TEXT(A1,"[$-130000]d")-39<1,"卅"&TEXT(RIGHT(TEXT(A1," [$-130000]d"),1)*1,"[DBNum1]d"),
""))))))))
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询