天气

Vlookup+Text等6个excel函数合力算农历(考虑闰月)


 excel中计算农历的公式在网上可以查找,不少人也会写:

第1个函数出马

TEXT(日期,"[$-130000]yyyy-mm-dd")

 

TEXT可以对单元格的值格式化处理,这里[]里的字符 $-130000 是计算农历的关键,至于为什么这样写,微软也没有更准确的说法,所以同学们也不必深究,死记就行了,如果你真的很想知道,百度一下就会有答案,不过也只是网友猜测。

 

只是这个公式就行了吗?不行!因为农历也有润月情况,比如2014年闰九月,即有2个九月。下面是1949年~2020年的润月表。

年份

润月

1949

7

1952

5

1955

3

1957

8

1960

6

1963

4

1966

3

1968

7

1971

5

1974

4

1976

8

1979

6

1982

4

1984

10

1987

6

1990

5

1993

3

1995

8

1998

5

2001

4

2004

2

2006

7

2009

5

2012

4

2014

9

2017

6

2020

4

 

用text函数计算的农历日期没考虑到闰月,怎么把闰月因素也加上呢?

 

【例】如下图所示,要求根据B2的阳历在B3单元格中返回对应的农历日期。


原理应该是这样的

用B2的年份 (第2个函数

Year(B2)

从D和E列查找对应的闰月(第3个函数

VLOOKUP(YEAR(B2),D:E,2,0)

查出出来后和B2的月份进行比较(第4个函数出现

VLOOKUP(YEAR(B2),D:E,2,0)<MONTH(B2)

如果闰月大于B2的日期,不需要对日期处理,否则需要处理,为了方便处理,在表达式前添加 - 号,TRUE遇到-变成 -1 ,FALSE变成0

-(VLOOKUP(YEAR(B2),D:E,2,0)<MONTH(B2))

 

因为有的年份没有闰月,VLOOKUP查不到会返回错误值,所以需要用IFERROR函数把错误值转换为0 (第5个函数出马)

IFERROR(-(VLOOKUP(YEAR(B2),D:E,2,0)<MONTH(B2)),0)

 

最后如果是润月后的日期,TEXT计算后的月份再 - 1 ,完成这个功能的函数是EDATE函数(第6个函数),最终的计算农历的函数也已完成!

 

=EDATE(TEXT(B2,"[$-130000]yyyy-mm-dd"),IFERROR(-(VLOOKUP(YEAR(B2),D:E,2,0)<MONTH(B2)),0))

标签:excel
分类:Excel学习| 发布:admin| 查看: | 发表时间:2015/3/16
原创文章如转载,请注明:转载自个人资讯网 http://www.zhangxinran.com/
本文链接:http://www.zhangxinran.com/post/1299.html

相关文章

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Design By zhangxinran.com | Login | Power By zhangxinran.com | 皖公网安备:34010402701072号