ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何自定义将中文大写数值转换为阿拉伯数值的函数?

如何自定义将中文大写数值转换为阿拉伯数值的函数?

作者:绿色风 分类: 时间:2022-08-17 浏览:85
楼主
kevinchengcw
Q: 如何自定义将中文大写数值转换为阿拉伯数值的函数?
A: 自定义中文大写数值转换为阿拉伯数值的函数代码如下:
  1. Function CtoA(ByVal Rng)
  2. Dim Arr, Arr2, Dic
  3. Dim Str As String
  4. Dim M, N, I As Long
  5. Set Dic = CreateObject("scripting.dictionary")  '创建字典用于存储转换值
  6. Dic.Add "千", "*1000+"
  7. Dic.Add "仟", "*1000+"
  8. Dic.Add "百", "*100+"
  9. Dic.Add "佰", "*100+"
  10. Dic.Add "十", "*10+"
  11. Dic.Add "拾", "*10+"
  12. Dic.Add "九", "9"
  13. Dic.Add "玖", "9"
  14. Dic.Add "八", "8"
  15. Dic.Add "捌", "8"
  16. Dic.Add "七", "7"
  17. Dic.Add "柒", "7"
  18. Dic.Add "六", "6"
  19. Dic.Add "陆", "6"
  20. Dic.Add "五", "5"
  21. Dic.Add "伍", "5"
  22. Dic.Add "四", "4"
  23. Dic.Add "肆", "4"
  24. Dic.Add "三", "3"
  25. Dic.Add "叁", "3"
  26. Dic.Add "二", "2"
  27. Dic.Add "贰", "2"
  28. Dic.Add "一", "1"
  29. Dic.Add "壹", "1"
  30. Arr = Dic.keys  '将字典的keys赋值给数组,便于取用
  31. If Rng <> "" Then
  32.     Str = Rng
  33.     Str = Replace(Str, "亿", vbTab)  '将万和亿替换成分隔符便于分开计算
  34.     Str = Replace(Str, "万", vbTab)
  35.     For M = LBound(Arr) To UBound(Arr)  '循环替换对应的大写数字为对应阿拉伯数字
  36.         Str = Replace(Str, Arr(M), Dic(Arr(M)))
  37.     Next M
  38.     Str = Replace(Str, "零", "")   '替换掉多余的字符
  39.     Str = Replace(Str, "+*", "*")
  40.     Arr2 = Split(Str, vbTab)   '拆分字符串为数组,方便各数量级的数字累加
  41.     I = 0
  42.     For M = LBound(Arr2) To UBound(Arr2)
  43.         If Right(Arr2(M), 1) = "+" Then Arr2(M) = Left(Arr2(M), Len(Arr2(M)) - 1)  '替换两种可能存在的情况
  44.         If Left(Arr2(M), 1) = "*" Then Arr2(M) = Right(Arr2(M), Len(Arr2(M)) - 1)
  45.         If Arr2(M) = "" Then
  46.             If M < UBound(Arr2) Then I = I + 10000 ^ (UBound(Arr2) - M)
  47.         Else
  48.             If InStr(Arr2(M), "*") > 0 Or InStr(Arr2(M), "+") > 0 Then
  49.                 I = I + Evaluate(Arr2(M)) * 10000 ^ (UBound(Arr2) - M)
  50.             Else
  51.                 I = I + Arr2(M) * 10000 ^ (UBound(Arr2) - M)
  52.             End If
  53.         End If
  54.     Next M
  55.     CtoA = I   '返回结果
  56. End If
  57. Application.Volatile  '设置为易失性函数,可以即时更新
  58. Set Dic = Nothing  '清空项目
  59. End Function


附示例文件。
中文大写数值变阿拉伯数值.rar
2楼
绿篱
真强大...  
3楼
chenlifeng
在word中,有几处错误我当如何修正:
   Volatile 方法或数据成员未找到
   Evaluate 字过程未定义

另外,我输入“三亿”,结果变成的是 30000,即三万。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap