Excel实现公历农历转换的三种方法

发布时间 2023-04-16 00:23:04作者: 快乐58

【导读】:

有时候我们在输入日期数据的时候,往往需要输入农历的日期,但已经输入的日期是公历的日期,那么该怎么转换呢?

接下来我们将为大家如何利用excel函数进行将公历日期转化为农历日期!

 

一、简单版

下表中B2单元格就是第一种情况,“2016-9-17”表示农历是九月十七日。

该公式是:=TEXT(A2,"[$-130000]YYYY-M-D")。TEXT()用来转化文本格式,这个公式的关键是:[$-130000],它是Excel中阳历转化农历的参数,不过它存在一个问题就是没法计算闰月,估计老外无法理解中国人闰月的概念,凡是闰年,它直接表示一年13个月,道理是一样的。

  

二、进阶版(中文呈现)

上表C2单元格,相比较B2单元格呈现就有了进阶,以中文呈现,并且以天干地支表现年份。

公式相对之前肯定复杂:

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

 

我们可以分解为两大部分:

1)计算年份:MID(" 甲乙丙丁戊己庚辛壬癸

",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉 戌亥",MOD(TEXT(A2,"[$-130000]e")-4,12)+1,1)&"年",这里加了MID()文本提取函数来获取天干地支。

 

2)计算月日:TEXT(A2," [$-130000][DBNum1]m月d日"),这里增加了参数[DBNum1],表示数值以“一、而二、三......”中文格式显示。两者组合一起的就是C列结果。

 

三、完美版

作为中国人,我们知道“一月”不叫“一月”,叫“正月”;“十二月”不叫“十二月”,叫“腊月”;同样每月前10天,是初一、初二......20日开始是廿、廿一......30日是卅等等。如何更完美地呈现,在这里将进阶版公式再度分解,加上判断,然后再组合就实现了效果,公式:

=MID(" 甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉 戌亥",MOD(TEXT(A2,"[$-130000]e")-4,12)+1,1)&"年"&IF(TEXT(A2," [$-130000]m")*1=12," 腊",IF(TEXT(A2," [$-130000]m")*1=1," 正",TEXT(A2," [$-130000][DBNum1]m")))&"月"&IF(TEXT(A2," [$-130000]d")-9<=1,"初",IF(TEXT(A2," [$-130000]d")-29>=1,"卅",IF(TEXT(A2," [$-130000]d")-19>=1,"廿","十")))&IF(RIGHT(TEXT(A2," [$-130000]d"),1)*1=0,"",TEXT(RIGHT(TEXT(A2," [$-130000]d"),1)*1,"[DBNum1]d"))&"日"

 

1)年份公式:MID(" 甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("子丑寅卯辰巳午未申酉 戌亥",MOD(TEXT(A2,"[$-130000]e")-4,12)+1,1)&"年"

 

2)月份公式:IF(TEXT(A2," [$-130000]m")*1=12," 腊",IF(TEXT(A2," [$-130000]m")*1=1," 正",TEXT(A2," [$-130000][DBNum1]m")))&"月"3)日期公式:IF(TEXT(A2," [$-130000]d")-9<=1,"初",IF(TEXT(A2," [$-130000]d")-29>=1,"卅",IF(TEXT(A2," [$-130000]d")-19>=1,"廿","十")))&IF(RIGHT(TEXT(A2," [$-130000]d"),1)*1=0,"",TEXT(RIGHT(TEXT(A2," [$-130000]d"),1)*1,"[DBNum1]d"))&"日"

 

  

这样的结果是符合我们中国人的习惯的,有兴趣的朋友可以试试。

 

 

出处:http://www.officedoyen.com/a/excelyingyong/2018/0303/16544.html