ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: WYS67

[求助] 公历年月日时转换四柱干支

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-11-6 15:13 | 显示全部楼层
Function sizhu(birth As Date) As String

Dim A, B1, B2, F
A = Array("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸") 'yy1+mm1+yy3
B1 = Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥") 'yy2+yy4
B2 = Array("鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪") 'yy2
F = Array("小寒", "立春", "惊蛰", "清明", "立夏", "芒种", "小暑", "立秋", "白露", "寒露", "立冬", "大雪") 'i

yy = year(birth)
mm = month(birth)
dd = Day(birth)
hh = TimeSerial(Hour(birth), Minute(birth), Second(birth))

'''''''''''''''''''''''''年柱+生肖
lichun = getjq(Val(yy), 2)

If DateDiff("d", lichun, birth) >= 0 Then
  yy1 = (yy - 4) Mod 10
  yy2 = (yy - 4) Mod 12
Else
  yy1 = (yy - 5) Mod 10
  yy2 = (yy - 5) Mod 12
End If

D0 = A(yy1)
d1 = B1(yy2) & B2(yy2)

'''''''''''''''''月柱+节气
mm1 = (yy1 * 2) Mod 10
d2 = A(mm1)
D3 = B1(0) & F(11)

For i = 12 To 1 Step -1
jieqi = getjq(Val(yy), (i - 1) * 2)

If DateDiff("d", jieqi, birth) >= 0 Then
   mm1 = (yy1 * 2 + i) Mod 10
   d2 = A(mm1)
   D3 = B1(i) & F(i - 1)
   Exit For
End If
Next i

''''''''''''''''''''''日柱
birth2 = DateDiff("d", "1901-2-15", birth)
yy3 = birth2 Mod 10
If yy3 < 0 Then yy3 = yy3 + 10
yy4 = birth2 Mod 12
If yy4 < 0 Then yy4 = yy4 + 12

D4 = A(yy3)
D5 = B1(yy4)

''''''''''''''''''''' 时柱
If DateDiff("n", "23:00", hh) >= 0 Or DateDiff("n", "1:00", hh) < 0 Then
   yy5 = 0
Else
   yy5 = Int(DateDiff("n", "1:00", hh) / 120) + 1
End If
yy6 = (yy3 * 2 + yy5) Mod 10

D6 = A(yy6)
D7 = B1(yy5)

''''''''''''''''''''' 四柱综合

sizhu = D0 & d1 & "年 " & d2 & D3 & "月令 " & D4 & D5 & "日 " & D6 & D7 & "时"

End Function

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-6 18:03 | 显示全部楼层
zopey 发表于 2018-11-6 15:13
Function sizhu(birth As Date) As String

Dim A, B1, B2, F

老师:怎样在J5:M50000里输入公式?试了几次都显示错误。麻烦用1楼附件作个示范传上来。

TA的精华主题

TA的得分主题

发表于 2018-11-6 18:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
自行了解 mid函数:
=mid(sizhu(xxxx),1,2)
=mid(sizhu(xxxx),6,2)
=mid(sizhu(xxxx),13,2)
=mid(sizhu(xxxx),17,2)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-6 18:30 | 显示全部楼层
zopey 发表于 2018-11-6 18:24
自行了解 mid函数:
=mid(sizhu(xxxx),1,2)
=mid(sizhu(xxxx),6,2)

????J5:M5里怎样输入公式?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-6 18:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zopey 发表于 2018-11-6 18:24
自行了解 mid函数:
=mid(sizhu(xxxx),1,2)
=mid(sizhu(xxxx),6,2)

老师:反复测试,计算结果总是显示#VALUE!错误,恳请按1楼格式作个附件上传。

TA的精华主题

TA的得分主题

发表于 2018-11-6 19:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
显示#VALUE!错误的 文件 制作附件上传,给你检查下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-6 19:33 | 显示全部楼层
zopey 发表于 2018-11-6 19:14
显示#VALUE!错误的 文件 制作附件上传,给你检查下。

公历与干支换算.zip (1.62 MB, 下载次数: 97)


TA的精华主题

TA的得分主题

发表于 2018-11-6 19:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我的附件里有2个模块 :模块1,模块2。
模块2被你弄丢了。

干支换算2.rar (1.54 MB, 下载次数: 169)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-6 20:08 | 显示全部楼层
zopey 发表于 2018-11-6 19:42
我的附件里有2个模块 :模块1,模块2。
模块2被你弄丢了。

1.可不可以把模块1、2里的代码合并,以防加载宏时和别的自定义函数混淆?
2.J21593:M21593以下显示#VALUE!是怎么回事?
3.月建每次改变【如辛卯变为壬辰】,都是在日辰的开始【08:45】,这一点不符合实际情况【应该严格按照12节变更的时辰自动变更】
4.能不能提高运算速度【目前的代码运行速度太慢】?

TA的精华主题

TA的得分主题

发表于 2018-11-6 22:23 | 显示全部楼层
第3点 啥意思? 截图 举例说明 :
3.月建每次改变【如辛卯变为壬辰】,都是在日辰的开始【08:45】,这一点不符合实际情况【应该严格按照12节变更的时辰自动变更】

速度只能这样,工作表里 有上万个公式 ,能快到哪里去 ?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 01:57 , Processed in 0.037191 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表