|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
借用413191246se老师地盘,再分享一段重新写的RMB大写代码,文本搜索过程全部用正则处理,并吸收了他人好的经验技巧。
还是那句话,小写转大写用处不是很大,主要是换一下脑筋,算是与413191246se老师和喜爱的坛友互相交流吧。
- Private Sub 人民币大写()
- s$ = ActiveDocument.Range.Text '整篇文本赋予s$
- With CreateObject("VBScript.RegExp") '建立正则对象
- .Global = True '全局查找或替换
- .Pattern = "[\d.,,\u0020\u3000\u00A0]+(?=元)" '小写模式串
- Set g = .Execute(s) '返回小写集合对象
- For j = g.Count - 1 To 0 Step -1 '倒序循环处理
- n = g.Item(j).Value '获取小写金额
- If n Like "*.*.*" Then MsgBox n & "元<--小数点过多!": GoTo sk
- '下列正则表达式对小写作规范处理
- .Pattern = "[\u0020\u3000\u0009\u00A0,,]" '去掉空格及数字分节号
- n = .Replace(n, "") '替换成空字符
- n = Format(n * 100, "0") '将小写化成整数
- If Len(n) > 15 Then MsgBox "数字超出15位啦! ": GoTo sk '金额超万亿位就退出
- Caps = ""
- '下列For语句循环替换成大写
- For i = 0 To Len(n) - 1 '按数字位数循环替换
- s1 = Mid(n, Len(n) - i, 1) '从末位起逐位取数字
- s2 = Mid("零壹贰叁肆伍陆柒捌玖", s1 + 1, 1) '取相应数字的大写
- s3 = Mid("分角元拾佰仟万拾佰仟亿拾佰仟万", i + 1, 1) '从左边起逐位取单位
- Caps = s2 & s3 & Caps '连接数字大写与单位大写
- Next i
- '下列正则表达式去掉多余的"零"
- .Pattern = "(零[仟佰拾角分])+零?"
- Caps = .Replace(Caps, "零")
- .Pattern = "零?([亿万元])(零万)?"
- Caps = .Replace(Caps, "$1")
- .Pattern = "零$"
- Caps = .Replace(Caps, "整")
- If n = 0 Then Caps = "零元整"
- '下列三行插入RMB大写(于小写之前)
- st = g.Item(j).FirstIndex '取得小写前的位置号
- Selection.SetRange Start:=st, End:=st '光标定位于插入点
- Selection.InsertBefore Text:="人民币" & Caps '插入大写金额
- sk:
- Next j
- End With
- End Sub
复制代码 |
|