EXCEL阳历转阴历公式?

Excel内置函数不能完美实现,至少闰月会有问题。

你只能考虑用VBA编程来定制一个函数。

图1:效果展示图:

效果显示图

图2:步骤示意图:

步骤示意图

图3:完整的代码图:

步骤:

1.如果文件在。xlsx格式,必须将其保存为启用宏的工作簿。xlsm格式。

2.按Alt+F11打开代码编辑器。

3.点击"插入"-"模块"、

4.双击左栏中的模块。

5.将代码粘贴到右侧的编辑区域。

6.报告错误时,检查代码是否变红。

7.关闭代码编辑器。

重要提示:

描述1。对于从这里复制过来的代码,百度会在行间插入多余的空行。如果代码因错误而变红,可以删除行间的空行。

注2。这个代码也不是万能的。它受到日期范围的限制。只能从1921的正月初一换算到2100的腊月三十,对应的公历范围是1921/2/8到2100/2。

注3。在表格中使用公式时,您可以直接在公式中指示日期,也可以引用单元格中的日期。

示例1,具体转换日期:

=iNlStr(日期(2020,8,18))

示例2,永远转换今天的日期:

=iNlStr(TODAY())

示例3,从单元格参考日期转换:

=iNlStr(A1)

代码如下,供您复制:

选项显式

'将公共tf作为布尔值'

公共sZhouJ作为变体“周数组”

“十天干阵”的变体

公共sDiZhi作为变体‘十二分支阵列’

公sSXiao为变种‘生肖阵’

公共sNlMon作为变体“农历月数组”

作为变体的公共日“农历日数组”

作为变体的公共sNlShu“月球数据阵列”

子加载数组()

SZhouJ = Split("*/一/二/三/四/五/六/天","/")周数组

STiGan = Split(" A/B/C/D/E/F/G/F/N/D ","/")天干阵。

SDiZhi = Split("子/丑/阴/毛/陈/斯/武/卫/申/尤/徐/海","/)'地心阵

SSXiao = Split("鼠/牛/虎/兔/龙/蛇/马/羊/猴/鸡/狗/猪","/)'生肖阵

SNlMon = Split("*/第一个月/二月/三月/四月/五月/六月/七月/八月/九月/十月/冬季/第十二个月","/")月份数组

sNlDay = Split( _

" */年级1/2/3/4/5/6/7/8/9/10 " u

& amp"/十一/十二/十三/十四/十五/十六/十七/十八/十九/二十"

& amp“/21/22/23/24/25/26/27/28/29/30”、“/””

sNlShu = Split( _

" 002635/333387/001701/001748/267701/000694/002391/133423/01175/396438/" & amp;_

" 003402/003749/331177/001453/000694/201326/002350/465197/003221/003402/" & amp;_

" 400202/002901/001386/267611/000605/002349/137515/002709/464533/0065438/" & amp;_

" 002901/330421/001242/002651/199255/001323/529706/003733/001706/398762/" & amp;_

" 002741/001206/267438/002647/0018/204070/003477/461653/001386/002413/" & amp;_

" 330077/001197/002637/268877/003365/53109/002900/002922/398042/002395/" & amp;_

" 001179/267415/002635/661067/001701748/398772/002742/002391/330031/"_

" 001175/00161/200010/003749/527717/001452/002742/332397/002350/003222/" & amp;_

" 268949/003402/003493/133973/001386/464219/000605/002349/334123/002709/" & amp;_

" 002890/267946/002773/592565/0010/002651/395863/001323/002707/265877/" & amp;_

" 001706/002773/133557/001206/397998/002638/003366/335142/03411/001450/" & amp;_

" 200042/002413/723293/00197/002637/399947/003365/003410/334676/002906/" & amp;_

" 001389/133467/00179/464023/002635/002725/333477/001746/002778/199350/" & amp;_

" 002359/526639/001175/06161/396618/003749/001714/267628/002734/002350/" & amp;_

" 203054/003222/465557/003402/003493/330581/001386/002669/264797/001325/" & amp;_

" 529707/002709/002890/399018/002773/001370/267450/002651/001323/202023/" & amp;_

" 001683/462419/001706/002773/330165/001206/002647/264782/003366/531750/" & amp;_

"003410/003498/396650/001389/001198/267421/002637/003349/13800"

标记为“Tf = True”时,数组已被加载。

末端接头

lstr (idate as date)中的函数为字符串“阳历到阴历”。

如果不是tf,则调用加载数组

Dim i%,t & amp,k%,m%,n%,ext%,bit & amp

计算从1921-2-8(即1921中的第一个月的第一天)到目标日期的总天数。

t = iDate-# 2/8/1921 #+1

计算农历年、月、日的值。

if Val(sNlShu(m))& lt;4095那么k = 11否则k = 12

n = k

获取sNlShu(m)的第n个二进制位的值

bit = Val(sNlShu(m))

对于i = 1到n

位=位\ 2

然后

bit = bit Mod 2

计算农历的天数

如果t & lt= 29 +位

ext = 1

出口Do

如果…就会结束

t = t - 29位

n = n - 1

循环直到n & lt0

如果是ext,那么退出Do

m = m + 1

循环直到错误

计算农历的三个数值

Dim cy%,cm%,cd%

cy = 1921 + m?农历年的价值

Cm = k-n+1 '农历月份值。

cd = t?阴历日的价值

如果k = 12,则

选择case val(snlshu(m))65536+1 '来修正cm的值。

案例是=厘米

厘米= 1厘米

案例是& lt厘米

cm = cm - 1

结束选择

如果…就会结束

计算中文文本

Dim ar(1到5)作为字符串

M = ((cy-4) Mod 60) Mod 10 '天干指标值。

N = ((cy-4) Mod 60) Mod 12 '地支、生肖指标值。

如果cm & lt1然后ar(1) = "leap "

ar(1)= ar(1)& amp;SNlMon(Abs(cm))'农历月

Ar(2) = sNlDay(cd)“农历日”

ar(3) = sTiGan(m)和ampsDiZhi(n)?月球树干和树枝

ar(4) = sSXiao(n)?农历十二生肖

Ar(5) = sZhouJ(Weekday(iDate,2))'周汉字

匹配输出结果(提示:数组ar(1到5)***5个元素,可以根据需要自由匹配输出结果)

iNlStr = ar(3)和amp“年生肖”&;ar(4)和amp”& ampar(1)和ampar(2)和amp“周”&;Ar(5)'输出结果

结束功能