如何用EXCEL自动生成农历记年?

额,这个问题在问答里已经出现了几次,奈何真的没几个人会,可能是真的比较复杂,所以没什么愿意去写吧!我很好奇为什么非要用Excel去做纪年的转换呢……

今天我正好有空,我就给大家简单写一下。

首先,有两种方式能实现公历纪年和农历纪年的转换,在Excel默认的序列填充内容里并不能自动生出农历纪年,我们能实现的仅仅是转换,而不是自动出结果!

至于两种方式嘛,大家都知道,一种用公式做转换,另一种用VBA写自定义函数。

1.公式法:

公式得到结果如下:

这种方式转换的农历日期不太完美,仅能保证农历日期是对的,但是显示方式和公历的显示方法差别不大,但是公式简单,有点基础的小伙伴肯定能看懂。

这种方式转换的农历日期似乎已经能满足大多数要求了,及包含里天干地支纪年法,也将数字的日期转换为中文了,但相对来说公式较为复杂,需要点技巧才能读懂,不过还好,我帮大家写好了,复制过去就能用了。弊端是有时候遇到农历闰月,这个公式就不灵了,其他还好!

最后就是大招了,这个大招呢,把公历日期完美转换,但也是最复杂的。如果你用的办公软件是WPS的话,那对不起了,你可能用不了这个方法。

2.自定义函数法:

鉴于很多小伙伴可能不懂,那么我就细致一点的说,自定义函数就是,我们自己根据需求去创建一个新的函数,以供我们计算使用。

步骤一:打开VBA,如果你的Excel功能区中没有【开发工具】,那么你需要在【文件】→【选项】→【自定义功能区】中勾选开发工具即可。

也可用快捷键AltF11,打开VBA编辑器

步骤二:我们再上图所标识的区域内鼠标右键→插入→模块,得到模块1

步骤三:在【模块1】中录入我们的VBA代码。代码很长,我就不截长图了。这里我们就定义好了一个叫做NongLi的函数。

步骤四:代码也写好了,那么就去用起来吧!!!关闭VBA编辑器,回到Excel,如果公历日期在A1单元格,那么还在再B1单元格做转换。

这个神奇的方法会让你的公式很简单哦,=NongLi(A1)即可,这样的方式转换出的农历日期可以显示农历、天干地支纪年、生肖、农历闰月等等,是不是完美???

你一定会问,那特么代码你也不贴出来,我怎么知道怎么写?我这就贴,这就贴。

代码如下:

PublicFunctionNongLi(OptionalXX_DATEAsDate)

DimMonthAdd(11),NongliData(99),TianGan(9),DiZhi(11),ShuXiang(11),DayName(30),MonName(12)

DimcurTime,curYear,curMonth,curDay

DimGongliStr,NongliStr,NongliDayStr

Dimi,m,n,k,isEnd,bit,TheDate

curTime=XX_DATE

MonthAdd(0)=0

MonthAdd(1)=31

MonthAdd(2)=59

MonthAdd(3)=90

MonthAdd(4)=120

MonthAdd(5)=151

MonthAdd(6)=181

MonthAdd(7)=212

MonthAdd(8)=243

MonthAdd(9)=273

MonthAdd(10)=304

MonthAdd(11)=334

NongliData(0)=2635

NongliData(1)=333387

NongliData(2)=1701

NongliData(3)=1748

NongliData(4)=267701

NongliData(5)=694

NongliData(6)=2391

NongliData(7)=133423

NongliData(8)=1175

NongliData(9)=396438

NongliData(10)=3402

NongliData(11)=3749

NongliData(12)=331177

NongliData(13)=1453

NongliData(14)=694

NongliData(15)=201326

NongliData(16)=2350

NongliData(17)=465197

NongliData(18)=3221

NongliData(19)=3402

NongliData(20)=400202

NongliData(21)=2901

NongliData(22)=1386

NongliData(23)=267611

NongliData(24)=605

NongliData(25)=2349

NongliData(26)=137515

NongliData(27)=2709

NongliData(28)=464533

NongliData(29)=1738

NongliData(30)=2901

NongliData(31)=330421

NongliData(32)=1242

NongliData(33)=2651

NongliData(34)=199255

NongliData(35)=1323

NongliData(36)=529706

NongliData(37)=3733

NongliData(38)=1706

NongliData(39)=398762

NongliData(40)=2741

NongliData(41)=1206

NongliData(42)=267438

NongliData(43)=2647

NongliData(44)=1318

NongliData(45)=204070

NongliData(46)=3477

NongliData(47)=461653

NongliData(48)=1386

NongliData(49)=2413

NongliData(50)=330077

NongliData(51)=1197

NongliData(52)=2637

NongliData(53)=268877

NongliData(54)=3365

NongliData(55)=531109

NongliData(56)=2900

NongliData(57)=2922

NongliData(58)=398042

NongliData(59)=2395

NongliData(60)=1179

NongliData(61)=267415

NongliData(62)=2635

NongliData(63)=661067

NongliData(64)=1701

NongliData(65)=1748

NongliData(66)=398772

NongliData(67)=2742

NongliData(68)=2391

NongliData(69)=330031

NongliData(70)=1175

NongliData(71)=1611

NongliData(72)=200010

NongliData(73)=3749

NongliData(74)=527717

NongliData(75)=1452

NongliData(76)=2742

NongliData(77)=332397

NongliData(78)=2350

NongliData(79)=3222

NongliData(80)=268949

NongliData(81)=3402

NongliData(82)=3493

NongliData(83)=133973

NongliData(84)=1386

NongliData(85)=464219

NongliData(86)=605

NongliData(87)=2349

NongliData(88)=334123

NongliData(89)=2709

NongliData(90)=2890

NongliData(91)=267946

NongliData(92)=2773

NongliData(93)=592565

NongliData(94)=1210

NongliData(95)=2651

NongliData(96)=395863

NongliData(97)=1323

NongliData(98)=2707

NongliData(99)=265877

curYear=Year(curTime)

curMonth=Month(curTime)

curDay=Day(curTime)

If(curMonth<10)Then

Else

EndIf

If(curDay<10)Then

TheDate=(curYear-1921)*365Int((curYear-1921)/4)curDayMonthAdd(curMonth-1)-38

If((curYearMod4)=0AndcurMonth>2)Then

TheDate=TheDate1

isEnd=0

m=0

Do

If(NongliData(m)<4095)Then

k=11

k=12

n=k

If(n<0)Then

ExitDo

bit=NongliData(m)

Fori=1TonStep1

bit=Int(bit/2)

Next

bit=bitMod2

If(TheDate<=29bit)Then

isEnd=1

TheDate=TheDate-29-bit

n=n-1

Loop

If(isEnd=1)Then

m=m1

curYear=1921m

curMonth=k-n1

curDay=TheDate

If(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

If(curMonth<1)Then

NongliDayStr=MonName(curMonth)

NongliDayStr=NongliDayStr&DayName(curDay)

NongLi=NongliStr&NongliDayStr

EndFunction

代码这么长,你们复制拿去用就好了,看不看的我也不在意了。

最好,提醒一下,运用自定义函数的方法,你的Excel文件保存时需要保存为*****.xlsm,这点很重要,千万注意。。。不然一切功亏一篑!!!

THE END
1.表格DATEDIF函数在表格中,你可以使用 DATEDIF 函数,快速计算两个日期之间的天数、月数或年数。? 二、函数解读? 函数公式:DATEDIF(起始日期, 结束日期, 单位)? 参数释义:? 起始日期:计算中要使用的开始日期。必须是以下一种:对包含日期的单元格的引用、返回日期类型的函数、或数字? https://www.feishu.cn/hc/zh-CN/articles/898300276702
2.日期计算公式excel理想股票技术论坛学习Excel日期计算公式,掌握快速计算日期的方法与技巧,包括使用Excel内置函数进行日期计算,轻松解决日期计算问题。 ,理想股票技术论坛http://m.55188.com/tag-08908806.html
3.4.Excel日期函数4.Excel日期函数 1.自动获取当天日期Today 2.自动获取当天日期和时间NOW 3.将提取的数字变为日期格式进行显示Date 4.返回日期中的日Day 5.返回日期中的月Month 6.返回日期中的年https://blog.csdn.net/qq_39507436/article/details/144052499
4.日期时间类常用公式整理,欢迎补充魔方网表讨论区日期时间类常用公式整理,欢迎补充。TODAY() 今天(日期字段)NOW() 现在(日期时间字段)TEXT(http://bbs.mf999.com/forum.php?mod=viewthread&tid=471489
5.如何将公历日期利用函数公式转换为农历日期您好,单元格输入下列函数:“=TEXT(NOW(),[$-130000]YYYY-M-D)”试一下呢 https://www.kuaizhang.com/ask/question_8375125.html
6.如何设置Excel自动生成农历日历?BIM免费教程使用公式生成农历日期 要在Excel中生成农历日期,我们可以使用公式和插件。有几种方法可以实现这一目标。 方法一:使用日期函数 在Excel中,我们可以使用日期函数来计算农历日期。例如,我们可以使用“农历年”的公式来计算某个日期的农历年份。同样,我们可以使用“农历月”和“农历日”的公式来计算农历日期。这些公式可以与https://www.tuituisoft.com/office/107352.html
7.Excel教程:公历日期转农历的6个公式比如,下面的Excel表格,将B列的日期,转成对应的农历。 C2单元格输入公式:=TEXT(B2,"[$-130000]yyyy-m-d"),下拉即可。 公式解释: B2:表示要转化的公历日期; yyyy-m-d:表示输入日期的格式; [$-130000]:表示公历转阴历的特殊参数。 除了上面的公式写法,再给大家发几个不同的格式,对应的函数公式肯定也是不https://www.360doc.cn/article/18781560_1011334212.html
8.求WPS公历转农历日期公式=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("子丑寅卯https://www.3d66.com/answers/question_1145785.html
9.使用函数在Excel2010中将公历日期转换为农历虽然现在很多人记录时间都喜欢采取公历形式,但是仍然有部分人喜欢农历,Excel里面得到当前的日期方法很多,但是显示的都是公历形式,要转换为农历,还需要另外的函数公式才行。 ①启动Excel2010,在任意一个单元格输入下列函数:“=TEXT(NOW(),"[$-130000]YYYY-M-D")”。 https://www.office999.cn/Excel/Excel2010/705.html
10.含节气四柱日期计算和天数计算Excel函数与公式2、EXCEL中是否有公式可以直接推算出农历,就如同之前提供的那份1900-9999年阳历日历,在表中只要点击https://club.excelhome.net/thread-1281548-7-1.html
11.阴历转公历公式表已知阳历求阴历怎么算这个…说实在的,比较难,需要有一份公历农历转换表,然后再用查询引用函数来计算,没有这个,宏也无从下手。 我想知道在EXCEL中怎样用函数或公式把公历转换为农历(不是把公历进行格式 首先,在农历中好象没有2010年的纪年办法,有的“甲子”“乙丑”的记法。公历日期和农历之间好象也没有规则的函数关系,只能做https://www.ziweifu.com/suanming/28325.html
12.当月第一天java当月第一天日期公式DATEINWEEK(date,number):函数返回在某一个星期当中第几天的日期。 示例: dateInWeek("2008-08-28",2)等于2008-08-26。 dateInWeek("2008-08-28",-1)等于2008-08-31。如果最后一个参数为-1,返回该日期所在星期的最后一天。 1. 2. 3. 4. https://blog.51cto.com/u_16099183/7505316