龙空技术网

Excel VBA【案例分享】自定义函数数字转中文大写金额

VBA编程实战 125

前言:

眼前各位老铁们对“c语言求绝对值保留两位小数”大概比较关切,你们都想要学习一些“c语言求绝对值保留两位小数”的相关知识。那么小编同时在网摘上网罗了一些有关“c语言求绝对值保留两位小数””的相关文章,希望姐妹们能喜欢,朋友们一起来学习一下吧!

本文于2023年10月21日首发于本人同名公众号:VBA编程实战,更多文章案例请搜索关注!

内容提要

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

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

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

有关数字转大写金额的方法有好多种,最简洁的一种方法是利用工作表函数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~~~~~~

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

案例文件分享说明:请关注本人同名VX公众号(VBA编程实战)了解文件获取方式,免费!

标签: #c语言求绝对值保留两位小数 #vba强制转换成double