Excel中数字转换为中文大写的几种方法记得几年之前,一个朋友问我,如何在EXCEL中将金额转换成中文大写?
本以为用单元格格式很容易解决,其实不然,因这其中涉及到小数点的转换及元
角分的判断,所以它比想象中的问题要麻烦很多。现整理出来,供大家参考!
仔细想来,其实实现数字读法的方法实际上至少有五种,即单元格替换、
VB编程法、自动更正法及工作表函数的替换法等。用VB编程实际上是最复杂的一种方法(但也是一劳永逸的方法),在很多时候完全可以用较简单的方法实excel中round函数的使用方法
现。以下分别介绍这几种方法。
1、单元格替换
如果只是为了将数值转换为中文大写,可直接选择单元格,然后单击…格式/单元格‟,在单元格格式对话框中选择…分类/特殊‟,在…类型‟中选择…中文大写数字‟,最后单击…确定‟。
2、自动更正法
使用自动更正功能,可以简化用户对大写汉字的输入操作,例如可以将
“1//”定义更正为“壹”,那么当要输入“壹”时,就可通过键入“1//”来实现。另外,这种
定义以后不仅在Excel中有效,在Word中也同样有效,因为“自动更正”程序是Office组件所公用的。
用“自动更正”是最简单易行的,用户可自由、方便地输入要写的大写读法。
然而它的局限性也很明显,即它虽然给使用者提供了输入大写数字的方便手段,
但终究还是需要人工输入,不能自动、实时地依当前的实际数字结果进行更新。
3、工作表函数替换法
要做到数值的自动更新,一般都会想到用VB构造函数法,但其实我们可采用一个简单的方法,即工作表函数的替换法。顾名思义,所谓“工作表函数的替换法”,就是将原来的结果换去一部分。那么换什么,又怎样换?
我们知道,在Excel中,提供了多种数字的显示格式。其中文版实际上也包括数字的大写读法显示格式,但遗憾的是这个功能对一般用户来说基本上不能用,因为Microsoft在实现这个数字显示格式时犯
了一个小小的错误,例如“33.56”这个数,它显示出来的是“叁拾叁.伍陆”。很显然,没有将小数点作有效处理。
虽然这个显示格式是错的,但其劳动成果还是能为我们所用——只要能设法将其小数点作有效处理。做到这一点也并不难,可以先将数字以其内置的中文大写显示格式转变为文本格式,即使用TEXE( )函数将其结果转化为字符串,然后
将小数点“.”用汉字“点”换掉(使用SUBSTITUTE( )函数)。
例如,若要将B1单元格内容重写为大写,则可以在单元格中输入如下公式:=SUBSTITUTE(TEXT(B1,"G/通用格式"),".","点")
使用这样一个小小的公式应当说并不复杂,不过,这样做仍不能满足某些情况下的要求,因为使用大写表示数额一般只应用于财会方面,其他很少这么用。
在上例中,对数字“33.56”,往往要求结果写为“叁拾叁元伍角陆分”。那么,如何将“33.00”写为“叁拾叁元整”呢?
实现这一功能的逻辑也不太复杂。我们可以看到,Excel显示格式的小数点前的数字读法是没有错的,可将其取出来作为一个字符串;小数点后面的数字则麻烦些,必取出来,再以低位是否都为“0”来判断
是要写“整”还是“零”。还要将“元”、“角”、“分”等字串适当地插入,最后把几个字串连接起来就行了。我们仍将B1单元格内容作格式转化,则具体实现如下: =TEXT(INT(B1),"[DBNum2][$-804]G/通用格式")&"元"&IF((INT(B1*10)-
INT(B1)*10)=0,"
",TEXT(INT(B1*10)-INT(B1)*10,"[DBNum2][$-804]G/通用格式")&"角
")&IF((INT(B1*100)-INT(B1*10)*10)=0,"整",TEXT(INT(B1*100)-
INT(B1*10)*10,"[DBNum2][$-804]G/通用格式")&"分")
写这么一长串的公式看来似乎有些吓人,但是,如果在常要修改数据的表中或在模板里以这个方法实现大写汉字显示的话,则以后不但省事而且不易出错。
4、VB编程法的思路
可以用VB写一个函数,以后可像Excel的内部函数一样直接被调用,不过这需要熟悉VB编程。在编程过程中可用一般的方法调用VB函数,也可以借用我们前面所列“代换法”中的函数。但前面的公式中用的大多是Excel的工作表函数,在VB中不能直接使用,若非要用,也只能通过层次关系调用它(即用“
Application WorksheetFunction”方式调用)。但笔者认为最好自己用VB 函数写,因为这样的话,较通用且可移植性好。若只用VB函数,具体方法与代换法也有
类似之处,但小数点前的处理要复杂得多,相应的代码也太长。
5、自定义函数法
显然上面的转换方法比较麻烦。其实,我们可以事先自定义一个函数,然后
再用自定义的函数来转换。
(1)、执行“工具?宏?Visual Basic编辑器”命令,进入“Visual Basic编辑”窗口。执行“插入?模块”命令,插入一个模块(如“模块1”),双击“模块1”在窗口右边展开“模块1(代码)”编辑窗口,输入如下代码。
Function chenyustudio(q)
ybb = Round(q * 100) '将输入的数值扩大100倍,进行四舍五入
y = Int(ybb / 100) '截取出整数部分
j = Int(ybb / 10) - y * 10 '截取出十分位
f = ybb - y * 100 - j * 10 '截取出百分位
zy = Application.WorksheetFunction.Text(y, "[dbnum2]") '将整数部分转为中文大写
zj = Application.WorksheetFunction.Text(j, "[dbnum2]") '将十分位转为中文大写
zf = Application.WorksheetFunction.Text(f, "[dbnum2]") '将百分位转为中文大写
chenyustudio = zy & "元" & "整"
d1 = zy & "元"
If f <> 0 And j <> 0 Then
chenyustudio = d1 & zj & "角" & zf & "分"
If y = 0 Then
chenyustudio = zj & "角" & zf & "分"
End If
End If
If f = 0 And j <> 0 Then
chenyustudio = d1 & zj & "角" & "整"
If y = 0 Then
chenyustudio = zj & "角" & "整"
End If
End If
If f <> 0 And j = 0 Then
chenyustudio = d1 & zj & zf & "分"
If y = 0 Then
chenyustudio = zf & "分"
End If
End If
If q = "" Then
chenyustudio = 0 '如没有输入任何数值为0
End If
End Function
(2)、输入完成后,关闭VBA编辑窗口返回工作表状态。(3)、如果要转换C2单元格的数值,并将结果保存的D2单元格中,只要在D2单元格中输入公式:=chenyustudio(C2),确认即可。注意:通常情况下,自定义的函数只适应于定制的工作簿中,如果要在其它
工作簿中使用,请将其制作为加载宏,然后加载一下即可。当然大家通过比较不难发现各种方法的优点,如果是想把金额转换成中文数
字的,我建议用第三种或第五种方法!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论