Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1771|回复: 1

大小写数字转换问题

[复制链接]
发表于 2019-12-8 00:37 | 显示全部楼层 |阅读模式
大小写数字转换问题
1.jpg
大小写转换.rar (8.57 KB, 下载次数: 7)
发表于 2019-12-16 15:10 | 显示全部楼层
中文转阿拉伯数字的代码不多,找到一个。
  1. Function zwsz(ByVal Rng)
  2. On Error Resume Next
  3. Dim Arr, Arr2, Dic
  4. Dim Str As String
  5. Dim M, N, I As Long
  6. Dim y1, y2, II, Q%
  7. Dim yy As Boolean

  8. Set Dic = CreateObject("scripting.dictionary")  '创建字典用于存储转换值
  9. Dic.Add "亿", "*100000000+"
  10. Dic.Add "千", "*1000+"
  11. Dic.Add "仟", "*1000+"
  12. Dic.Add "百", "*100+"
  13. Dic.Add "佰", "*100+"
  14. Dic.Add "十", "*10+"
  15. Dic.Add "拾", "*10+"
  16. Dic.Add "九", "9"
  17. Dic.Add "玖", "9"
  18. Dic.Add "八", "8"
  19. Dic.Add "捌", "8"
  20. Dic.Add "七", "7"
  21. Dic.Add "柒", "7"
  22. Dic.Add "六", "6"
  23. Dic.Add "陆", "6"
  24. Dic.Add "五", "5"
  25. Dic.Add "伍", "5"
  26. Dic.Add "四", "4"
  27. Dic.Add "肆", "4"
  28. Dic.Add "三", "3"
  29. Dic.Add "叁", "3"
  30. Dic.Add "二", "2"
  31. Dic.Add "贰", "2"
  32. Dic.Add "一", "1"
  33. Dic.Add "壹", "1"
  34. Arr = Dic.keys  '将字典的keys赋值给数组,便于取用
  35. If Rng <> "" Then
  36.     Str = Rng
  37. If InStr(Str, "亿") > 0 Then   '将亿替换成分隔符便于分开计算
  38.     y1 = Split(Str, "亿")(0)
  39.     y2 = Split(Str, "亿")(1)
  40.     yy = True
  41.     GoTo 0
  42. Else
  43. 0:
  44.     If yy = True Then Str = y1
  45. 1:
  46.     Q = Q + 1
  47.     Str = Replace(Str, "万", vbTab)    '将万替换成分隔符便于分开计算
  48.     For M = LBound(Arr) To UBound(Arr)  '循环替换对应的大写数字为对应阿拉伯数字
  49.         Str = Replace(Str, Arr(M), Dic(Arr(M)))
  50.     Next M
  51.    
  52.     Str = Replace(Str, "零", "")   '替换掉多余的字符
  53.     Str = Replace(Str, "+*", "*")
  54.     Arr2 = Split(Str, vbTab)   '拆分字符串为数组,方便各数量级的数字累加
  55.    
  56.     I = 0
  57.     For M = LBound(Arr2) To UBound(Arr2)
  58.         If Right(Arr2(M), 1) = "+" Then Arr2(M) = Left(Arr2(M), Len(Arr2(M)) - 1)  '替换两种可能存在的情况
  59.         If Left(Arr2(M), 1) = "*" Then Arr2(M) = Right(Arr2(M), Len(Arr2(M)) - 1)
  60.         If Arr2(M) = "" Then
  61.             If M < UBound(Arr2) Then I = I + 10000 ^ (UBound(Arr2) - M)
  62.         Else
  63.             If InStr(Arr2(M), "*") > 0 Or InStr(Arr2(M), "+") > 0 Then
  64.                 I = I + Evaluate(Arr2(M)) * 10000 ^ (UBound(Arr2) - M)
  65.             Else
  66.                 I = I + Arr2(M) * 10000 ^ (UBound(Arr2) - M)
  67.             End If
  68.         End If
  69.     Next M
  70.    
  71.     If Q = 1 And yy = True Then
  72.        Str = y2
  73.        II = I
  74.        GoTo 1
  75.     ElseIf Q = 2 Then
  76.        II = II * 100000000 + I
  77.        If y2 <> "" And I = 0 Then
  78.          zwsz = 0 '返回结果
  79.        Else
  80.          zwsz = II '返回结果
  81.        End If
  82.        Exit Function
  83.     End If
  84. End If
  85.     zwsz = I   '返回结果
  86. End If
  87. Application.Volatile  '设置为易失性函数,可以即时更新
  88. Set Dic = Nothing  '清空项目
  89. End Function
复制代码

评分

参与人数 1学分 +2 收起 理由
yjwdjfqb + 2 非常感谢蓝版老师!!!

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 20:45 , Processed in 0.438090 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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