万内整数数字转换大写汉字
vba实现
先上代码
Sub test()
Dim a(1 To 10) As String '大写汉字数组
Dim tmpStr As String '提取原单元格字符串
Dim count(1 To 4) As String '单位数组
Dim num As Integer '统计当前单位
Dim Time As Integer '统计当前零进行判断
a(1) = "零"
a(2) = "壹"
a(3) = "贰"
a(4) = "叁"
a(5) = "肆"
a(6) = "伍"
a(7) = "陆"
a(8) = "柒"
a(9) = "捌"
a(10) = "玖"
count(1) = "圆整"
count(2) = "拾"
count(3) = "佰"
count(4) = "仟"
Length = UBound(a) - LBound(a) + 1 '获取长度
Time = 0
newValueStr = ""
oriValueStr = Trim(Str(ActiveCell.Value)) '去除头尾部空格,
ActiveCell.Offset(0, 1).Select '将当前单元格移到右边
num = Len(oriValueStr) '获取总长
For i = 1 To Len(oriValueStr) '字符串从左往右进行判断
tmpStr = Mid(oriValueStr, i, 1)
'MsgBox (tmpStr)
If tmpStr = 0 Then '判断特殊情况0
If Time = 0 Then 'time这里负责判断0分支
newValueStr = newValueStr & a(tmpStr + 1)
Time = 1
End If
num = num - 1
Else
If tmpStr = 1 And i = Len(oriValueStr) - 1 And Len(oriValueStr) = 2 Then '判断俩位数时十位数是否为1进行处理
newValueStr = newValueStr & count(num)
num = num - 1
Else
newValueStr = newValueStr & a(tmpStr + 1) & count(num)
num = num - 1
Time = 0
End If
End If
Next i
If Time = 1 Then '如果个位及前几位都为零,做特殊判断
If Len(newValueStr) = 1 Then
newValueStr = newValueStr & count(1)
Else
newValueStr = Left(newValueStr, Len(newValueStr) - 1)
newValueStr = newValueStr & count(1)
End If
End If
ActiveCell.Value = newValueStr '结果返回,结束
End Sub
Output:
xlsm
9 | 玖圆整 |
0 | 零圆整 |
1 | 壹圆整 |
123 | 壹佰贰拾叁圆整 |
102 | 壹佰零贰圆整 |
311 | 叁佰壹拾壹圆整 |
1234 | 壹仟贰佰叁拾肆圆整 |
1023 | 壹仟零贰拾叁圆整 |
1002 | 壹仟零贰圆整 |
2001 | 贰仟零壹圆整 |
3000 | 叁仟圆整 |
130 | 壹佰叁拾圆整 |
31 | 叁拾壹圆整 |
3001 | 叁仟零壹圆整 |
3100 | 叁仟壹佰圆整 |
9876 | 玖仟捌佰柒拾陆圆整 |
12 | 拾贰圆整 |
111 | 壹佰壹拾壹圆整 |
10 | 拾圆整 |
11 | 拾壹圆整 |
21 | 贰拾壹圆整 |
101 | 壹佰零壹圆整 |
110 | 壹佰壹拾圆整 |
3000 | 叁仟圆整 |
200 | 贰佰圆整 |