阿拉伯数字转人民币大写的方法

阿拉伯数字转人民币大写的方法


假设原数值在A1,在其他单元格套用以下公式即可:

公式一:

=SUBSTITUTE(SUBSTITUTE(IF(A10,负,)&TEXT(TRUNC(ABS(ROUND(A1,2))),[DBNum2])&元&IF(ISERR(FIND(.,ROUND(A1,2))),,TEXT(RIGHT(TRUNC(ROUND(A1,2)10)),[DBNum2]))&IF(ISERR(FIND(.0,TEXT(A1,0.00))),角,)&IF(LEFT(RIGHT(ROUND(A1,2),3))=.,TEXT(RIGHT(ROUND(A1,2)),[DBNum2])&分,IF(ROUND(A1,2)=0,,整)),零元零,),零元,)

公式二:
=CONCATENATE(IF(A10,负,),TEXT(IF(TRUNC(A1)=0,,TRUNC(ABS(A1))),[DBNum2]),IF(INT(TRUNC(A1))=0,,元),TEXT(IF(OR(ABS(A1)0.1,TRUNC(A1)=A1),,RIGHT(TRUNC(A110),1)),[DBNum2]),IF(RIGHT(TRUNC(A110),1)=0,,角),TEXT(IF(RIGHT(TRUNC(A1100),1)=0,,RIGHT(TRUNC(A1100),1)),[DBNum2]),IF(RIGHT(TRUNC(A1100),1)=0,,分))

公式三:
=IF(ROUND(A1,2)=0,,IF(ROUND(ABS(A1),2)=1,TEXT(INT(ROUND(ABS(A1),2)),[DBNum2])&元,)&IF(RIGHT(TEXT(A1,.00),2)1=0,整,IF(RIGHT(TEXT(A1,.00),4)1=1,IF(RIGHT(TEXT(A1,.00),2)19,,零),IF(ROUND(ABS(A1),2)=1,零,))&IF(RIGHT(TEXT(A1,.00),2)19,TEXT(LEFT(RIGHT(TEXT(A1,.00),2)),[DBNum2])&角,)&IF(RIGHT(TEXT(A1,.00))10,TEXT(RIGHT(TEXT(A1,.00)),[DBNum2])&分,整)))

公式四:

如果是小额金额,可以用

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(NUMBERSTRING(INT(A1),2)&圆&TEXT(MOD(A1,1)100,[dbnum2]0角0分),零角零分,整),零角,零),零分,整)

公式五:
=IF(A1=0,,IF(ABS(A1)0.995,,TEXT(INT(ROUND(ABS(A1),2)),[DBNum2])&元)&IF(RIGHT(TEXT(A1,.00),2)1=0,IF(ABS(A1)0.005,,整),TEXT(IF(ABS(A1)0.095,,LEFT(RIGHT(TEXT(A1,.00),2))),[dbnum2])&IF(LEFT(RIGHT(TEXT(A1,.00),2))1=0,,角)&IF(RIGHT(TEXT(A1,.00))1=0,整,TEXT(RIGHT(TEXT(A1,.00)),[dbnum2])&分)))

公式六:
=IF(A1=0,,IF(ABS(A1)1,,TEXT(TRUNC(ABS(A1)),[DBNum2])&元)&IF(RIGHT(TRUNC(A1100),2)1=0,IF(ABS(A1)0.01,,整),IF(ABS(A1)0.1,,TEXT(RIGHT(TRUNC(A110)),[dbnum2]))&IF(RIGHT(TRUNC(A110))1=0,,角)&IF(RIGHT(TRUNC(A1100))1=0,整,TEXT(RIGHT(TRUNC(A1100)),[dbnum2])&分)))


公式五是四舍五入公式,公式六则是截尾公式。两个公式的结构其实是一样的,只是使用了不同的函数。

下面用公式五来说明:

TEXT(INT(ROUND(ABS(A1),2)),[DBNum2])&元用来处理整数部分,考虑到纯小数及舍入问题,增加一个判断ABS(A1)0.995,用0.995,即保证了正常的舍入,又避免了出现0.9945也进行舍入的错误。

用RIGHTB(TEXT(A1,.00),2)1=0来判断是不是纯整数,是就输出“整”,后面就不用处理了。因为TEXT函数输出的是文本值,所以在这里有两种处理方法,一是就是本式,二是RIGHTB(TEXT(A1,.00),2)=00。

LEFT(RIGHT(TEXT(A1,.00),2))是取出角位数,增加一个判断ABS(A1)0.095是为了在只有分票的情况下角位避免出现“零”的字样,0.095也是考虑了尾数的舍入问题。

IF(LEFT(RIGHT(TEXT(A1,.00),2))1=0,,

角),角位是0输出空,否则输出“角”。同样,这里的判断表达式也可改为LEFT(RIGHT(TEXT(A1,.00),2))=0

用RIGHT(TEXT(A
1,.00))取出分位数,分位为零输出“整”,否则输出分位数。

对于负数,如果一定要用“负XXXXXX”的形式,则直接在第二个判断前加上“IF(A10,负,)&”。

关于万位为零时的输出规范,相关规定如下:

小写金额中间有“0”时,大写金额要写“零”字;小写金额中间连续有几个“0”时,大写金额中间可以只写一个“零”字;小写金额万位或元位是“ 0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但千位、角位不是“0”时,大写金额中可以只写一个“零”字,也可以不写“零”字。

所以上述公式在当万位为零而千位不为零时,以不输出零的方式处理,应该是符合规范的。也许正是EXCEL采取这种样式的原因。当然,如果遵照习惯非要加上这个零字也不是不可能。只不过要增加一点公式复杂度罢了。

在一个数中,万会出现几次?不管是万、十万、百万、千万,这个万就出现一次,如果是万万则是亿,如果是万亿又是兆,万兆呢?已经超出EXCEL的处理能力了。所以答案是万字在大写金额中只可能出现一次,且只出现在整数部分。即然是这样,用SUBSTITUTE()函数就能解决问题。即判断当万位为零而千位不为零时,用“万零”来替换“万”,其它情况下不进行替换。因为EXCEL只有在这种情况下不会输出“零”。

在四舍五入公式中,因为还要考虑尾数舍入问题,判断使用了四舍五入函数ROUND(),公式五的输出整数的部分公式改为:

=IF(AND(RIGHT(INT(ROUND(ABS(A1),2)10000))=0,RIGHT(INT(ROUND(ABS(A1),2)1000))0),SUBSTITUTE(TEXT(INT(ROUND(ABS(A1),2)),[DBNum2]),万,万零),TEXT(INT(ROUND(ABS(A1),2)),[DBNum2]))

而截断公式不用考虑尾数舍入问题,直接用TRUNC()取万位和千位数来判断。相应地公式六的整数部分亦改为:

=IF(AND(RIGHT(TRUNC(ABS(A1)10000))=0,RIGHT(TRUNC(ABS(A1)1000))0),SUBSTITUTE(TEXT(TRUNC(ABS(A1)),[DBNum2]),万,万零),TEXT(TRUNC(ABS(A1)),[DBNum2]))

相关文档
最新文档