Excel精英培训网

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

[已解决]求老师们帮我一个数值转大写的VBA代码 (效果见附件)

[复制链接]
发表于 2016-9-13 17:03 | 显示全部楼层 |阅读模式
求老师们帮我一个数值转大写的VBA代码 (效果见附件)
最佳答案
2016-9-14 14:41
本帖最后由 today0427 于 2016-9-14 15:24 编辑
(, 下载次数: 40)

谢谢大神提醒,因为没有模拟到这种数据,所以出现问题了,前面加了一个if判断就好了
  1. Public Function lbc(M)  '鲁班尺
  2.     If InStr(M, ".") = 0 Then
  3.         lbc = Application.Text(M, "[DBnum2]") & "丈"
  4.         If lbc = "零丈" Then lbc = ""
  5.         lbc = IIf(lbc = "", lbc, "为鲁班尺  " & lbc)
  6.         Exit Function
  7.     End If
  8.     lbc = Replace(Application.Text(Round(M + 0.00000001, 3), "[DBnum2]"), ".", "丈")
  9.     lbc = IIf(Left(Right(lbc, 4), 1) = "丈", Left(lbc, Len(lbc) - 2) & "尺" & Left(Right(lbc, 2), 1) _
  10.     & "寸" & Right(lbc, 1) & "分", IIf(Left(Right(lbc, 3), 1) = "丈", Left(lbc, Len(lbc) - 1) & "尺" _
  11.     & Right(lbc, 1) & "寸", IIf(Left(Right(lbc, 2), 1) = "丈", lbc & "尺", lbc)))
  12.     lbc = Replace(Replace(Replace(Replace(Replace(lbc, "零丈零尺零寸", ""), "零丈零尺", ""), "零丈", ""), "零尺", ""), "零寸", "")
  13.     lbc = "为鲁班尺  " & lbc
  14. End Function
复制代码

数值转大写 .rar

2.48 KB, 下载次数: 11

发表于 2016-9-13 18:30 | 显示全部楼层
本帖最后由 Excel学徒123 于 2016-9-13 18:43 编辑
  1. Option Explicit

  2. Function ChangeCode(rng As Range) As String
  3.     Dim strText$, StrLeft$, strRight$, strRst$, strVal$
  4.     Dim i%, j%
  5.     Dim blComma As Boolean
  6.     Dim arrName, arrCode
  7.     arrName = Array("尺", "寸", "分")
  8.     arrCode = Array("", "十", "百", "千", "万", "十万", "百万", "千万", "亿")
  9.     blComma = (InStr(rng.Value, ".") > 0)
  10.     If blComma Then
  11.         StrLeft = Left(rng.Value, InStr(rng, ".") - 1)
  12.         strRight = Replace(rng.Value, StrLeft & ".", "")
  13.         For i = 1 To Len(strRight)
  14.             If Mid(strRight, i, 1) * 1 <> 0 Then
  15.                 strText = strText & Application.WorksheetFunction.Text(Mid(strRight, i, 1), "[DBNum2]0") & arrName(i - 1)
  16.             End If
  17.         Next
  18.         If Len(StrLeft) = 0 Then
  19.             strRst = "为鲁班尺 " & strText
  20.         Else
  21.             If Len(StrLeft) > 1 Then
  22.                 For j = 1 To Len(StrLeft)
  23.                     strVal = strVal & Application.WorksheetFunction.Text(Mid(StrLeft, j, 1), "[DBNUM2]0") & arrCode(Len(StrLeft) - j)
  24.                 Next
  25.             Else
  26.                 strVal = Application.WorksheetFunction.Text(StrLeft, "[DBNum2]0")
  27.             End If
  28.             strRst = "为鲁班尺 " & strVal & "丈" & strText
  29.         End If
  30.     End If
  31.     ChangeCode = strRst
  32. End Function
复制代码
勉强写了个自定义函数,没写完,忙着下班,自己参考下吧

评分

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

查看全部评分

回复

使用道具 举报

发表于 2016-9-14 14:18 | 显示全部楼层
本帖最后由 fjmxwrs 于 2016-9-14 14:30 编辑
huangxuejin 发表于 2016-9-13 21:25
现在可以了,好使,再次表示感谢,


空值为空,非数值为错误值,修改简化如下

  1. Function LBC(rng)
  2. Dim i, i1%, T1$, T2$
  3. If rng <> "" Then
  4. If Int(rng) < rng Then
  5. i = Mid(rng, InStr(rng, ".")) * 1000
  6. T1 = Application.Text(i, "[DBNum2]0尺0寸0分")
  7. T1 = Replace(Replace(Replace(Replace(T1, "零尺零寸零分", ""), "零尺", ""), "零寸", ""), "零分", "")
  8. End If
  9. i1 = Int(rng)
  10. If i1 > 0 Then
  11. T2 = Application.Text(i1, "[DBNum2]")
  12. T2 = T2 & "丈"
  13. End If
  14. LBC = " 为鲁班尺 " & T2 & T1
  15. Else
  16. LBC = ""
  17. End If
  18. End Function
复制代码

数值转大写 .rar

9.58 KB, 下载次数: 2

评分

参与人数 1 +1 收起 理由
huangxuejin + 1 感谢感谢!优化了太多。

查看全部评分

回复

使用道具 举报

发表于 2016-9-13 19:01 | 显示全部楼层
  1. Function LBC(rng)
  2. Dim i%, iT1$$$$
  3. rng1 = rng
  4. i = rng * 1000
  5. If i < 10 Then
  6. iT1 = Application.Text(i, "[DBNum2] 为鲁班尺 0分")
  7. ElseIf i < 100 Then
  8. iT1 = Application.Text(i, "[DBNum2] 为鲁班尺 0寸0分")
  9. ElseIf i < 1000 Then
  10. iT1 = Application.Text(i, "[DBNum2] 为鲁班尺 0尺0寸0分")
  11. Else
  12. iT1 = Application.Text(i, "[DBNum2] 为鲁班尺 0丈0尺0寸0分")
  13. End If
  14. LBC = iT1
  15. End Function
复制代码

评分

参与人数 2 +7 收起 理由
huangxuejin + 1 很给力
today0427 + 6 学习了!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-9-13 20:58 | 显示全部楼层
Excel学徒123 发表于 2016-9-13 18:30
勉强写了个自定义函数,没写完,忙着下班,自己参考下吧

好使,在此衷心的感谢您,在百忙之中帮了我,谢谢谢谢......
回复

使用道具 举报

发表于 2016-9-13 21:05 | 显示全部楼层
huangxuejin 发表于 2016-9-13 20:58
好使,在此衷心的感谢您,在百忙之中帮了我,谢谢谢谢......

不谢,代码还需要修改,有时间再搞,现在晕得厉害,解决之后不介意给个最佳就OK



评分

参与人数 2 +7 收起 理由
huangxuejin + 1
today0427 + 6 喝多了就不要辛苦工作了斑竹大人!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-9-13 21:05 | 显示全部楼层
fjmxwrs 发表于 2016-9-13 19:01

感谢您百忙之中抽出时间帮我编写了代码,再次麻烦你帮我看一下第二行的 代码运行时显示红色,(Dim i%, iT1$$$$)什么问题帮我看看。




回复

使用道具 举报

发表于 2016-9-13 21:15 | 显示全部楼层
huangxuejin 发表于 2016-9-13 21:05
感谢您百忙之中抽出时间帮我编写了代码,再次麻烦你帮我看一下第二行的 代码运行时显示红色,(Dim i%, i ...

多了几个美元符号,保留1个就可以了

评分

参与人数 2 +7 收起 理由
today0427 + 6 棒!什么时候能看懂大神的代码就好了!
huangxuejin + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-9-13 21:25 | 显示全部楼层
Excel学徒123 发表于 2016-9-13 21:15
多了几个美元符号,保留1个就可以了

现在可以了,好使,再次表示感谢,
回复

使用道具 举报

发表于 2016-9-13 22:42 | 显示全部楼层
huangxuejin 发表于 2016-9-13 21:05
感谢您百忙之中抽出时间帮我编写了代码,再次麻烦你帮我看一下第二行的 代码运行时显示红色,(Dim i%, i ...
  1. Function LBC(rng)
  2. Dim i, i1%, j%, j1%, T1$$$$, T2$$$$
  3. If rng <> "" Then
  4. If Int(rng) < rng Then
  5. j = InStr(rng, ".")
  6. i = Mid(rng, j + 1)
  7. j1 = Len(i)
  8. i = i * 1
  9. If j1 = 1 Then
  10. T1 = Application.Text(i, "[DBNum2]0尺")
  11. ElseIf j1 = 2 Then
  12. If i > 9 Then
  13. T1 = Application.Text(i, "[DBNum2]0尺0寸")
  14. Else
  15. T1 = Application.Text(i, "[DBNum2]0寸")
  16. End If
  17. Else
  18. If i > 99 Then
  19. T1 = Application.Text(i, "[DBNum2]0尺0寸0分")
  20. ElseIf i > 9 Then
  21. T1 = Application.Text(i, "[DBNum2]0寸0分")
  22. Else
  23. T1 = Application.Text(i, "[DBNum2]0分")
  24. End If
  25. End If
  26. End If
  27. i1 = Int(rng)
  28. If i1 > 0 Then
  29. T2 = Application.Text(i1, "[DBNum2]")
  30. T2 = T2 & "丈"
  31. End If
  32. LBC = " 为鲁班尺 " & T2 & T1
  33. Else
  34. LBC = ""
  35. End If
  36. End Function
复制代码
几种可能的情况都写了,请看附件

数值转大写 .rar

9.14 KB, 下载次数: 5

评分

参与人数 1 +1 收起 理由
huangxuejin + 1

查看全部评分

回复

使用道具 举报

发表于 2016-9-13 22:44 | 显示全部楼层
huangxuejin 发表于 2016-9-13 21:05
感谢您百忙之中抽出时间帮我编写了代码,再次麻烦你帮我看一下第二行的 代码运行时显示红色,(Dim i%, i ...

那个美元符号是上传代码时自动添加的,保留一个即可,那是定义变量类型为文本型的

评分

参与人数 1 +1 收起 理由
huangxuejin + 1 赞一个

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 19:03 , Processed in 0.438290 second(s), 26 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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