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)'输出结果
结束功能