摘要
帮你速读文章内容
数字转中文大写金额自定义函数,包括基本思路、实现过程和VBA代码解析。该函数将数字转换为中文大写金额,处理特殊情况,如两个以上“零”、“整”、负数等。该函数未经过完全测试,欢迎指正。
摘要由作者通过智能技术生成
有用

本文于2023年10月21日首发于本人同名其他平台,更多文章案例请搜索关注!

内容提要

  • 数字转中文大写金额自定义函数

大家好,我是冷水泡茶,最近有点忙,疏于更新,请谅解。

今天给大家分享一个自定义函数:数字转大写金额

有关数字转大写金额的方法有好多种,最简洁的一种方法是利用工作表函数Text,把数字转换成中文大写,再处理一下元角分,这个函数在我们公众号里也分享过。

今天分享的是我自己刚写的,可能有人会觉得有点多余,人家都写好了,何必多此一举呢?我倒不是这样看,一个问题,从不同的角度去看,采用不同的方法去解决,对我们的思维能力是一种锻炼。下面,我们就一起来看看吧。

基本思路与实现过程

1、我们把0~9的数字对应的中文金额大写字符放到一个数组里。

2、再把元角分,拾佰仟等单位也对应放到一个数组里。

3、我们把数字拆分成单独的字符,并将对应的大写字符、单位字符进行组合,存到数组里。

4、把数组所有元素连接在一起,形成一个基本的大写金额字符串strNum。

5、处理特殊情况,比如两个以上“零”、“整”、负数等。

VBA代码

在模块1里,NumToChar自定义函数:

Function NumToChar(Number As Double) As String    Dim strNum As String    Dim arrNum(), arrChar(), arrUnits(), arr()    Dim k As Integer    Temp = Abs(Round(Number, 2)) * 100    strNum = CStr(Temp)    arrChar = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")    arrUnits = Array("分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟", "京")    For i = Len(strNum) To 1 Step -1        ReDim Preserve arr(k)        arr(k) = Mid(strNum, i, 1)        If arr(k) = 0 Then            If InStr("元万亿兆", arrUnits(k)) Then                arr(k) = arrUnits(k)            Else                arr(k) = "零"            End If        Else            arr(k) = arrChar(arr(k)) & arrUnits(k)        End If        k = k + 1    Next    strNum = ""    For i = UBound(arr) To LBound(arr) Step -1        strNum = strNum & arr(i)    Next    If Round(Number, 0) = Number Then        strNum = Left(strNum, InStr(strNum, "元")) & "整"    ElseIf Round(Number, 1) = Number Then        strNum = Left(strNum, InStr(strNum, "角")) & "整"    End If    Do While InStr(strNum, "零零") > 0       strNum = Replace(strNum, "零零", "零")    Loop    strNum = Replace(strNum, "零兆", "兆")    strNum = Replace(strNum, "零亿", "亿")    strNum = Replace(strNum, "零万", "万")    strNum = Replace(strNum, "零元", "元")    strNum = Replace(strNum, "兆亿", "兆")    strNum = Replace(strNum, "兆万", "兆")    strNum = Replace(strNum, "亿万", "亿")    If Number < 0 Then        strNum = "负" & strNum    ElseIf Number = 0 Then        strNum = "零元整"    End If    NumToChar = strNumEnd Function

代码解析:

1、line5~6,把数字保留两位小数,取绝对值再乘上100,目的是剔除负号、小数点的影响。再把数字转换成字符串strNum。

2、line9~22,循环strNum字符串的长度到1,依次截取一个字符存到数组arr里。如果数字为0,则如果对应的单位是“元万亿兆”,则把单位存到数组里,如果不是,则存字符“零”到数组里,如果数字不为0,则把其对应的中文大写字符与单位组合起来,存到数组中。

3、line24~26,把数组arr的所有元素连接起来,形成基本的中文大写字符。

4、line27~31,如果数字没有分、角的,在后面加“整”。

5、line32~34,把连续2个零替换为1个零。

6、line35~41,再替换掉不需要的字符。

7、line42~46,如果原始数据是负数,在前面加一个“负”字,如果是0,直接写成“零元整”。

8、这个自定义函数没有经过完全测试,不排除有Bug的可能性。如有发现,欢迎指正。

好,今天就这样,我们下期再会。

~~~~~~End~~~~~~

喜欢就点个赞、点在看、留言评论、分享一下呗!感谢支持!

举报/反馈

VBA编程实战

553获赞 752粉丝
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
关注
0
0
收藏
分享