ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 中文大写数字转换成阿拉伯数字

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-16 19:24 | 显示全部楼层 |阅读模式
本帖最后由 39660519 于 2022-12-17 08:43 编辑


Function 大写转小写(大写数字)
    If 大写数字 = "" Then
        大写转小写 = ""
        Exit Function
    End If
    If 大写数字 = "零" Then
        大写转小写 = 0
        Exit Function
    End If
    Set 平方值字典 = CreateObject("ScrIptIng.DIctIonary")
    Set 字典 = CreateObject("ScrIptIng.DIctIonary")
    ARR1 = Array("个", "十", "百", "千", "万", "亿", "兆", "京", "垓", "杼", "穰", "沟", "涧", "正", "载", "极", "恒河沙", "阿僧袛", "那由它", "不可思议", "无量", "大数", "古戈尔")
    ARR2 = Array(0, 1, 2, 3, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 100)
    For A = UBound(ARR1) To 0 Step -1
        字典(ARR2(A)) = ARR1(A)
        平方值字典(ARR1(A)) = ARR2(A)
    Next A
    位数 = Application.Max(ARR2) + 1
    ReDim ARR(1 To 2, 1 To 位数)
    For A = 1 To 位数
        ARR(1, A) = A - 1
        ARR(2, A) = 0
    Next A
   
    ARR3 = Array("一", "二", "三", "四", "五", "六", "七", "八", "九")
    ARR4 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    If Left(大写数字, 1) = "十" Then 大写数字 = "一" & 大写数字
   
    Dim 正则对象 As Object
    Dim 匹配值集合 As Object, 匹配值 As Object
    Set 正则对象 = CreateObject("VBSCRIPT.REGEXP")
    With 正则对象
        .Global = True
        .MultiLine = False
        .IgnoreCase = True
        .Pattern = "零"
        大写数字 = .Replace(大写数字, "")
        B = -1
        For Each A In ARR3
            B = B + 1
            .Pattern = A
            大写数字 = .Replace(大写数字, ARR4(B))
        Next A
        If IsNumeric(Right(大写数字, 1)) Then 大写数字 = 大写数字 & "个"
        For Each A In ARR1
            .Pattern = A
            Set 匹配值集合 = .Execute(大写数字)
            For Each 匹配值 In 匹配值集合
                B = 匹配值.FirstIndex
                C = Mid(大写数字, B, 1)
                If IsNumeric(C) = False Then
                    N1 = Mid(大写数字, 1, B)
                    N2 = Mid(大写数字, B + 1, Len(大写数字) - B)
                    If A = "十" Then
                        大写数字 = N1 & 1 & N2
                    Else
                        大写数字 = N1 & 0 & N2
                    End If
                End If
            Next 匹配值
        Next A
        
        .Pattern = "[^0-9]+"
        Set 匹配值集合 = .Execute(大写数字)
        A = 匹配值集合.Count
        基础平方 = 0
        For B = A - 1 To 0 Step -1
            单位 = 匹配值集合.Item(B).Value
            对应平方 = 平方值字典(单位)
            If 对应平方 > 基础平方 Then
                基础平方 = 对应平方
            Else
                对应平方 = 对应平方 + 基础平方
            End If
            ARR(1, 对应平方 + 1) = 对应平方
            大写数字 = Mid(大写数字, 1, Len(大写数字) - Len(单位))
            ARR(2, 对应平方 + 1) = --Right(大写数字, 1)
            大写数字 = Mid(大写数字, 1, Len(大写数字) - 1)
        Next B
    End With
   
    For A = 1 To 位数
        大写转小写 = 大写转小写 + ARR(2, A) * 10 ^ ARR(1, A)
    Next A
    大写转小写 = 大写转小写 & ""
End Function

中文数字转换阿拉伯数字.rar

18.11 KB, 下载次数: 21

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 07:48 , Processed in 0.035066 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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