视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
在Excel中如何实现将输入的数字转换为大写的人民币
2025-09-29 02:57:23 责编:小OO
文档

在Excel中如何实现将输入的数字转换为大写的人民币? 

作者: 李登伦    发布时间:2003-11-18 23:37:42  阅读次数:未知 

    在EXCEL97和EXCEL2000中,系统并没有提供将输入的数字直接转换为大写人民币的函数,在这里,我用编程的方式实现了这种转换。为了和系统本身提供的函数RMB()相区别(其功能是将数字转换为加¥的小写人民币格式),我这里取名为cnRMB()。大家可能会问我如何使用?好,下面我一一讲来。 

    首先将下面的程序代码存为一个文本文件,如“人民币大写.bas”,注意扩展名要用bas,然后打开EXCEL(97和2000都可以),选择“工具->宏->Visual Basic 编辑器(V)”,是不是打开了一个窗口?在打开的窗口中选择“文件->导入文件(I)...”,在对话框中选择我们上面保存的文件(“人民币大写.bas”),OK,关闭这个窗口回到EXCEL。 

    在最左上的单元格(就是A1了,你不会不知道吧?)中输入数字123,在B1单元格中输入“=cnRMB(A1)”,呵呵,看到结果了吧?就和使用系统自带的函数一样啊。好了,就这么简单,一个函数就搞定了。比用EXCEL自身提供的函数多重嵌套实现起来简单多了吧? 

    如何一劳永逸? 

    当然有办法了,把你现在的这个文件存为模板不就得了么!要注意的是在用这个模板新建文件时要“启用宏”哦。 

这段程序看起来短,可写了一天半,因为本人VB都忘得差不多了,一边查资料一边写,还真难了我好久。有不完善的地方(如只能实现最多15位数字,不能处理负值等),请大家多多指教。 

    以下为程序代码: 

Attribute VB_Name = "人民币大写" 

Rem ********************************************************************* 

Rem ** 函数名:getBitMoney() 

Rem ** 

Rem ** 功能:  转换一位数字为中文大写 

Rem ** 

Rem ** 参数:  moneyInput                  输入数字 

Rem ** 

Rem ** 功能:  返回中文大写数字 

Rem ** 

Rem ** 作者: 四川省信息通信学校 李登伦  日期: 2003/3/20 

Rem ** 

Rem *********************************************************************** 

Function getBitMoney(moneyInput) 

    Select Case moneyInput 

    Case 0 

    moneyOut = "0" 

    Case 1 

    moneyOut = "壹" 

    Case 2 

    moneyOut = "贰" 

    Case 3 

    moneyOut = "叁" 

    Case 4 

    moneyOut = "肆" 

    Case 5 

    moneyOut = "伍" 

    Case 6 

    moneyOut = "陆" 

    Case 7 

    moneyOut = "柒" 

    Case 8 

    moneyOut = "捌" 

    Case 9 

    moneyOut = "玖" 

    End Select 

    getBitMoney = moneyOut 

End Function 

Rem ********************************************************************* 

Rem ** 函数名:cnRMB() 

Rem ** 

Rem ** 参数:  money                   输入金额 

Rem ** 

Rem ** 功能:  返回中文大写金额 

Rem ** 

Rem ** 作者:  四川省信息通信学校 李登伦  日期: 2003/03/20 

Rem ** 

Rem *********************************************************************** 

Function cnRMB(money) 

    myMoney = money 

Rem    由于VB中int型数据长度为16位,EXCEL中超过15位部分会被切断为0,如输入12345670123456会被改为12345670123450。 

    If Len(myMoney) > 17 Then 

        MsgBox "你输入的数字太大了,长度不能大于15位。---【程序设计:李登伦】", , "出错啦!" 

        cnRMB = "错误:数字太大" 

        Exit Function 

    End If 

    If money <= 0 Then 

        moneyChinese = "错误:不能为负值"   

Rem负值不用进行处理 

        cnRMB = moneyChinese 

        Exit Function 

    End If 

    lenMoney = Len(money)   

Rem取得金额的位数 

    intMoney = Int(money)    

Rem用到了int()函数 

    intLen = Len(intMoney)     

Rem取得整数金额的位数 

    deciLen = lenMoney - intLen     

Rem小数位数 

    deciMoney = myMoney - intMoney     

Rem小数 

    myDeci = deciMoney 

    If deciMoney > 0 Then 

        money = intMoney 

        lenMoney = intLen 

    End If 

    leftMoney = money 

    wan = Null 

    yi = Null 

    For i = 1 To lenMoney 

        leftMoney = Left(leftMoney, lenMoney - i + 1) 

        temp = getBitMoney(Right(leftMoney, 1))   

Rem取每一位转换并插入标记 

        If i > 4 And i < 9 And temp <> "0" And IsNull(wan) Then 

         

Rem设置万位标志 

            moneyChineseTemp = "w" & moneyChineseTemp 

            wan = 1 

        End If 

        If i > 8 And temp <> "0" And IsNull(yi) Then 

         

Rem设置亿位标志 

            moneyChineseTemp = "y" & moneyChineseTemp 

            yi = 1 

        End If 

        If temp <> "0" Then 

            moneyChineseTemp = temp & i & moneyChineseTemp 

        Else 

            firstOne = Left(moneyChineseTemp, 1)  

Rem取第一个字元判断 

            If firstOne <> "0" & fistOne <> "w" & fisrtOne <> "y" And firstOne <> "" Then 

                moneyChineseTemp = temp & moneyChineseTemp 

            End If 

        End If 

    Next 

     

Rem按位置替换以上设置的标志 

    moneyChineseTemp = Replace(moneyChineseTemp, "16", "仟") 

    moneyChineseTemp = Replace(moneyChineseTemp, "15", "佰") 

    moneyChineseTemp = Replace(moneyChineseTemp, "14", "拾") 

    moneyChineseTemp = Replace(moneyChineseTemp, "13", "万") 

    moneyChineseTemp = Replace(moneyChineseTemp, "12", "仟") 

    moneyChineseTemp = Replace(moneyChineseTemp, "11", "佰") 

    moneyChineseTemp = Replace(moneyChineseTemp, "10", "拾") 

    moneyChineseTemp = Replace(moneyChineseTemp, "9", "") 

    moneyChineseTemp = Replace(moneyChineseTemp, "8", "仟") 

    moneyChineseTemp = Replace(moneyChineseTemp, "7", "佰") 

    moneyChineseTemp = Replace(moneyChineseTemp, "6", "拾") 

    moneyChineseTemp = Replace(moneyChineseTemp, "5", "") 

    moneyChineseTemp = Replace(moneyChineseTemp, "4", "仟") 

    moneyChineseTemp = Replace(moneyChineseTemp, "3", "佰") 

    moneyChineseTemp = Replace(moneyChineseTemp, "2", "拾") 

    moneyChineseTemp = Replace(moneyChineseTemp, "1", "") 

    moneyChineseTemp = Replace(moneyChineseTemp, "0", "零") 

    moneyChineseTemp = Replace(moneyChineseTemp, "w", "万") 

    moneyChineseTemp = Replace(moneyChineseTemp, "y", "亿") 

    moneyChinese = moneyChineseTemp & "元" 

     

Rem处理小数部分,四舍五入。 

    If deciMoney > 0 Then 

        deciMoney = Round(deciMoney, 5) & "00" 

        deciM = Right(deciMoney, Len(deciMoney) - 1) 

        deciMoney1 = Left(deciM, 3) 

        carry = Val(Right(deciMoney1, 1))  

Rem进位 

        If carry >= 5 Then 

            deciMoney1 = Left(deciMoney1, 2) + 1 & "0" 

        End If 

        deciMoney = FormatNumber(deciMoney1 / 10) / 100 

        t1 = Right(deciMoney, Len(deciMoney) - 1) 

        t2 = Right(deciMoney, Len(deciMoney) - 2) 

        firstDec = Left(t1, 1)     

Rem第一位小数 

        secondDec = Left(t2, 1)    

Rem第二位小数 

        If firstDec = 0 Then 

             dec1 = "零" 

        Else 

             dec1 = getBitMoney(firstDec) & "角" 

        End If 

        If secondDec = 0 Or secondDec = "" Then 

            dec2 = "" 

        Else 

            dec2 = getBitMoney(secondDec) & "分" 

        End If 

        dec = dec1 & dec2 

        If dec1 = "零" And (dec2 = "0" Or dec2 = "") Then 

            dec = "" 

        End If 

    End If 

    If deciMoney = 0 Then 

        moneyChinese = moneyChinese & "正" 

    Else 

        moneyChinese = moneyChinese & dec & "正" 

    End If 

    If myMoney < 1 Then 

        moneyChinese = dec 

    End If 

     

Rem去掉多余的"零" 

    lMoney = moneyChinese 

    For i = 1 To Len(moneyChinese) 

        moneyChinese = Replace(moneyChinese, "零零", "零") 

    Next 

    cnRMB = moneyChinese 

End Function 

通信地址:四川省信息通信学校实验室 李登伦  

邮编:618000 QQ:1049707 

电子邮件: ldl@scxt.net 

下载本文
显示全文
专题