Excel精英培训网

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

[已解决]中文小写转阿拉伯数字

[复制链接]
发表于 2016-12-20 23:12 | 显示全部楼层 |阅读模式
本帖最后由 cunfu2010 于 2016-12-21 09:58 编辑

如题,如何用VBA代码实现中文小写转阿拉伯数字
想法:能不能以A列单元格中的字符串为依据进行转换,比如,取每个单元格中的“级”前面的字符串,存到动态数组中,然后判断,如果新取的字符中有一个字符则用InStr("一二三四五六七八九十", Left(arr(i, 1), 1))直接进行转换,如果新取的字符串中有两个字符则分别取第一个、第二个字符用InStr("一二三四五六七八九十", Left(arr(i, 1), 1))转换并用&把转换结果连接,同样,如果新取字符串中有三个字符,依法转换连接。不知道可行不?
最佳答案
2016-12-21 09:06
  1. Function DTX(s)
  2.     Dim str$, i%
  3.     s = Replace(s, "级", "")
  4.     str = "〇一二三四五六七八九"
  5.     str2 = Replace(s, "十", "*10+")
  6.     For i = 1 To 10
  7.         str2 = Replace(str2, Mid(str, i, 1), i - 1)
  8.     Next
  9.     If Left(str2, 1) = "*" Then str2 = 1 & str2
  10.     If Right(str2, 1) = "+" Then str2 = Mid(str2, 1, Len(str2) - 1)
  11.     DTX = Evaluate("(" & str2 & ")*1") & "级"
  12. End Function

  13. Sub tt()
  14. Dim arr(), i%
  15. arr = Sheet1.UsedRange
  16. For i = 1 To UBound(arr)
  17. Sheet1.Cells(i, 4) = DTX(arr(i, 1))
  18. Next
  19. End Sub
复制代码

中文小写转阿拉伯数字.rar

7.07 KB, 下载次数: 24

发表于 2016-12-21 09:06 | 显示全部楼层    本楼为最佳答案   
  1. Function DTX(s)
  2.     Dim str$, i%
  3.     s = Replace(s, "级", "")
  4.     str = "〇一二三四五六七八九"
  5.     str2 = Replace(s, "十", "*10+")
  6.     For i = 1 To 10
  7.         str2 = Replace(str2, Mid(str, i, 1), i - 1)
  8.     Next
  9.     If Left(str2, 1) = "*" Then str2 = 1 & str2
  10.     If Right(str2, 1) = "+" Then str2 = Mid(str2, 1, Len(str2) - 1)
  11.     DTX = Evaluate("(" & str2 & ")*1") & "级"
  12. End Function

  13. Sub tt()
  14. Dim arr(), i%
  15. arr = Sheet1.UsedRange
  16. For i = 1 To UBound(arr)
  17. Sheet1.Cells(i, 4) = DTX(arr(i, 1))
  18. Next
  19. End Sub
复制代码

中文小写转阿拉伯数字(百内).zip

11.89 KB, 下载次数: 32

评分

参与人数 1 +3 收起 理由
cunfu2010 + 3 很给力,学习了

查看全部评分

回复

使用道具 举报

发表于 2016-12-21 09:36 | 显示全部楼层
  1. Function DTX(s)
  2.     Dim str$, i%
  3.     s = Replace(s, "级", "")
  4.     str = "〇一二三四五六七八九"
  5.     str2 = "十百千万"
  6.     str3 = s
  7.     For i = 1 To 4
  8.         str3 = Replace(str3, Mid(str2, i, 1), "*" & 10 ^ i & "+")
  9.     Next
  10.     For i = 1 To 10
  11.         str3 = Replace(str3, Mid(str, i, 1), i - 1)
  12.     Next
  13.     If Left(str3, 1) = "*" Then str3 = 1 & str3
  14.     If Right(str3, 1) = "+" Then str3 = Mid(str3, 1, Len(str3) - 1)
  15.     DTX = Evaluate("(" & str3 & ")*1") & "级"
  16. End Function
复制代码
到万,级别能到这里应该差不多了

评分

参与人数 1 +3 收起 理由
cunfu2010 + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-12-21 09:40 | 显示全部楼层

感谢,非常感谢。高手啊!不知道按我的想法:以A列单元格中的字符串为依据进行转换,比如,取每个单元格中的“级”前面的字符串,存到动态数组中,然后判断,如果新取的字符中有一个字符则用InStr("一二三四五六七八九十", Left(arr(i, 1), 1))直接进行转换,如果新取的字符串中有两个字符则分别取第一个、第二个字符用InStr("一二三四五六七八九十", Left(arr(i, 1), 1))转换并用&把转换结果连接,同样,如果新取字符串中有三个字符,依法转换连接。不知道可行不?
纯属个人瞎想,求个论证。(我没写出来,
回复

使用道具 举报

 楼主| 发表于 2016-12-21 09:42 | 显示全部楼层
苏子龙 发表于 2016-12-21 09:36
到万,级别能到这里应该差不多了

到万就足够用了,谢谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 14:42 , Processed in 0.240134 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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