ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 创建天干地支转换五行属性的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-2-7 20:17 | 显示全部楼层 |阅读模式
1.lcf).gif

天干地支五行属性速查表.zip (28.9 KB, 下载次数: 99)

用天干地支的五行属性预测时,经常遇到干支转换五行的问题,如附件A5:C88所示。请大神们按里面的运算规则和要求,编写个方便快捷的自定义函数为盼。

TA的精华主题

TA的得分主题

发表于 2021-2-8 10:27 | 显示全部楼层
天干地支五行属性速查表.rar (24.28 KB, 下载次数: 72)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-2-8 14:10 | 显示全部楼层
本帖最后由 松叶落 于 2021-2-8 15:26 编辑

天干地支,阴阳五行?有点意思,比以前的3D排列五什么的感觉高大上哈哈哈。单独的天干或地支倒还好说,天干地支组合起来的的六十甲子纳音五行好像没看明白是什么数学计算关系
干脆不想算法了直接弄个金木水火土的对照表挨个查找得了哈哈另外阴阳没打算考虑进去吗,比如木还有阳木和阴木
如果不用数组方式输入的话(单元格数组运行效率不高),直接使用str2num("甲子") 得到4或者num2str(str2num("甲子")) 得到金即可

Function wuxing(wx, Optional cs = 0)
'批量转换单个或多个天干地支字符到五行
    a = wx
    If cs = 0 Then
        If IsArray(a) Then
            ReDim b(1 To UBound(a), 1 To 1)
            For i = 1 To UBound(a)
                b(i, 1) = num2str(str2num(a(i, 1)))
            Next
            wuxing = b
        Else
            wuxing = num2str(str2num(a))
        End If
        
    Else
          If IsArray(a) Then
            ReDim b(1 To UBound(a), 1 To 1)
            For i = 1 To UBound(a)
                b(i, 1) = str2num(a(i, 1))
            Next
            wuxing = b
        Else
            wuxing = str2num(a)
        End If
    End If
End Function

Function str2num(str)
    a = str
    '天干、地支的字符转换为五行数字,用查对照表的方法
    jin = Array("甲子", "乙丑", "壬申", "癸酉", "庚辰", "辛巳", "甲午", "乙未", "壬寅", "癸卯", "庚戌", "辛亥", "庚", "辛", "申", "酉")
    mu = Array("戊辰", "己巳", "壬午", "癸未", "庚寅", "辛卯", "戊戌", "己亥", "壬子", "癸丑", "庚申", "辛酉", "甲", "乙", "寅", "卯")
    shui = Array("丙子", "丁丑", "甲申", "乙酉", "壬辰", "癸巳", "丙午", "丁未", "甲寅", "乙卯", "壬戌", "癸亥", "壬", "癸", "子", "亥")
    huo = Array("丙寅", "丁卯", "甲戌", "乙亥", "戊子", "己丑", "丙申", "丁酉", "甲辰", "乙巳", "戊午", "己未", "丙", "丁", "巳", "午")
    tu = Array("庚午", "辛未", "戊寅", "己卯", "丙戌", "丁亥", "庚子", "辛丑", "戊申", "己酉", "丙辰", "丁巳", "戊", "己", "丑", "辰", "未", "戌")
   
    '字符长度只能是1或2,否则就是错误输入
    la = Len(a)
    str2num = ""
    If la = 1 Or la = 2 Then
        wxarr = Array(tu, shui, huo, mu, jin)
        For i = 0 To UBound(wxarr)
            If inarr(a, wxarr(i)) Then
                str2num = i
                Exit For
            End If
        Next
    End If
End Function

Function num2str(num)
    a = num
    '五行数字转为字符
    wx = "土水火木金"
    If a = "" Then
        num2str = ""
    Else
        num2str = Mid(wx, a + 1, 1)
    End If
End Function

Function inarr(str, strarr) As Boolean
    '判断指定的字符是否属于某组字符
    a = str
    For Each s In strarr
        If s = a Then
            inarr = True
            Exit For
        End If
    Next
   
End Function



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-8 15:48 | 显示全部楼层
松叶落 发表于 2021-2-8 14:10
天干地支,阴阳五行?有点意思,比以前的3D排列五什么的感觉高大上哈哈哈。单独的天干或地支倒还好说,天干 ...

:老师,好久不见!非常感谢您的出手帮忙!测试结果正确!
1.lcf).gif

天干地支五行属性速查表.zip (127.61 KB, 下载次数: 60)

如上图所示,当B列数据(即日柱干支)多达几万或十几万个时,采取选定C5:C100000,输入区域数组公式 {=WUXING(B5:B100000,1)会不会更快些?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-8 16:12 | 显示全部楼层

经过测试,结果非常正确!如果公式WUXING(A5,1)其输出的计算结果修改为数值格式就更方便进行其它计算了!

非常感谢老师!

TA的精华主题

TA的得分主题

发表于 2021-2-8 16:43 | 显示全部楼层
本帖最后由 yjh_27 于 2021-2-8 18:00 编辑

字典作公共变量,只一次构成,兼顾速度。

sub AA 过程可忽略,这是字典数组brr用的

天干地支五行属性速查表.zip

35.9 KB, 下载次数: 62

非字典返回空

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-8 16:54 | 显示全部楼层
yjh_27 发表于 2021-2-8 16:43
字典作公共变量,只一次构成,兼顾速度。

sub AA 过程可忽略,这是字典数组brr用的

1.lcf).gif

计算结果显示#VALUE!错误?

TA的精华主题

TA的得分主题

发表于 2021-2-8 16:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
WYS67 发表于 2021-2-8 16:54
计算结果显示#VALUE!错误?

重新下载

可不用数组形式,不影响速度

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-2-8 17:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
WYS67 发表于 2021-2-8 16:12
经过测试,结果非常正确!如果公式WUXING(A5,1)其输出的计算结果修改为数值格式就更方便进行其它计算了! ...

当时考虑到输出为字符,所以直接定义成了字符,给你改了,但效率会下降一些 天干地支五行属性速查表.rar (27.37 KB, 下载次数: 85)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-8 17:05 | 显示全部楼层
yjh_27 发表于 2021-2-8 16:59
重新下载

可不用数组形式,不影响速度

只能以普通公式输入,不能输入区域数组公式--如:选定F5:F100,输入{ =WUXING(A5:A100),其计算结果显示为#VALUE!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 16:37 , Processed in 0.042019 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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