首页 [精品]excel小写数字转大写

[精品]excel小写数字转大写

举报
开通vip

[精品]excel小写数字转大写[精品]excel小写数字转大写 EXCEL小写数字转大写 近来转了转几个EXCEL相关论坛,发现有部分网友在寻求数字金 额转换为人民币大写的方法。出于好奇,我在网上搜索了一番,什么 VBA、加载宏,公式函数各式方法争相亮相,应有尽有。但我的习惯 是,只要能用公式解决的问题,坚决不使用VBA。所以我就特别地关 注使用公式来生成的方法,结果是用公式的方法可谓是更加地灿烂缤 纷,使人眼花缭乱。 通过分析我收集到的二十几个公式,发现比较牛,适合我口味的 公式有三个,在此我将其列出。 公式一: SUBSTITUTE...

[精品]excel小写数字转大写
[精品]excel小写数字转大写 EXCEL小写数字转大写 近来转了转几个EXCEL相关论坛,发现有部分网友在寻求数字金 额转换为人民币大写的方法。出于好奇,我在网上搜索了一番,什么 VBA、加载宏,公式函数各式方法争相亮相,应有尽有。但我的习惯 是,只要能用公式解决的问题,坚决不使用VBA。所以我就特别地关 注使用公式来生成的方法,结果是用公式的方法可谓是更加地灿烂缤 纷,使人眼花缭乱。 通过分析我收集到的二十几个公式,发现比较牛,适合我口味的 公式有三个,在此我将其列出。 公式一: SUBSTITUTE(SUBSTITUTE(IF(A1<0,"负 ","")&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(A1<0,"负 ",""),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(A1*10),1)),"[DBNum2]"),IF(RIGHT(TRUNC(A1*10),1)="0","","角 "),TEXT(IF(RIGHT(TRUNC(A1*100),1)="0","",RIGHT(TRUNC(A1*100),1)),"[DBNum2]"),IF(RIGHT(TRUNC(A1*100),1)="0","","分")) 公式三: IF(ROUND(A1,2)=0,"",IF(ROUND(ABS(A1),2)>=1,TEXT(INT(ROUND(A BS(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 )*1>9,"","零"),IF(ROUND(ABS(A1),2)>=1,"零 ",""))&IF(RIGHT(TEXT(A1,".00"),2)*1>9,TEXT(LEFT(RIGHT(TEXT( A1,".00"),2)),"[DBNum2]")&"角 ","")&IF(RIGHT(TEXT(A1,".00"))*1>0,TEXT(RIGHT(TEXT(A1,".00" )),"[DBNum2]")&"分","整"))) 我用不同的数值对这三个公式进行了一番测试,都达到了我的要求,至少到目前为止还没有发现上述公式存在着什么错误。上述公式对负数的处理采取了不同的方法。公式一和公式二对负数是在其前部加上一个“负”字,而公式三则是按正数进行处理。我比较推崇公式三的方式,不是还有条件格式可以设置吗,若是负数就用条件格式来变为红色。 我不准备在此对上述公式进行分析解说。撰写本文的目的是我也想自己来“组装”一个所谓的通用公式。我只所以说是“组装”而不是叫什么“开发”或者是“拼凑”,是因为EXCEL的函数现成地摆在了那里,使用时就是为了达到某种目的,按照其固有的规则,将其进行有机的组合,可谓“组装”。但是在这个过程中,也是要开动脑筋的,并非是随随便便“拼凑”就能成功的。本文的目的就是想将我在“组装”公式时的思路展现出来。 若用程序设计语言(比如用C语言)来写一个人民币数字金额转大写金额会怎样考虑呢,我想每一位数字都要考虑到。但在EXCEL中,单元格格式中有一个“特殊”格式,里面就有将小写数字转换为大写数字的格式。但要注意的是,这里转换的是数字而不是金额。所以转换出来后并不存在“元”、“角”、“分”、“整”等在大写金 额中出现的字。但是,“元”只出现在整数部分的后面,而小数部分只有角分两位。这样只要利用EXCEL的“特殊”格式将数据分为整数部分、角位和分位三个部分来处理就行了。处理的顺序是先整数,再角位、再分位。 由于要分三个部分分别处理,然后根据情况分别与“元”,“角”,“分”及“整”相连接。连接的方式可以使用CONCATENATE()函数,如公式二,也可以使用连接符,。而用,来连接,公式结构似乎会相对简单清晰一些,所以我选择了用,来连接。 虽然对问题进行了分解,但需要考虑的细节相当多。 若单元格为0或者空,输出空,避免出现“零”、“零元”等字样。对非数字字符不进行处理,使用EXCEL自身的错误提示。 对负数按正数处理,再用条件格式将其转换为红色,不拟采用“负XXXXXX”的形式。 整数加“元”,若是纯整数,就只处理整数且加“整”,不再处理小数部分。若是纯小数,放在小数部分处理,不单独列出处理。角为0且分不为0,应输出“零”,只有角的就加“整” 如果有尾数,即有3位以上小数(这种情况也许很少发生,但作为一个“通用”公式,却不能不考虑这种情况)。则有两种处理方式,一是截尾,另一则是四舍五入。由于两种方式的排它性。决定做两个公式。 如果数值小于分,截尾公式输出空,而四舍五入公式则要考虑舍 入问题。若有舍入输出分,没有则输出空。 根据这个思路,我“组装”了下面两个公式。 公式四: 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(A1*100),2)*1=0,IF(ABS(A1)<0.01,"","整 "),IF(ABS(A1)<0.1,"",TEXT(RIGHT(TRUNC(A1*10)),"[dbnum2]"))& IF(RIGHT(TRUNC(A1*10))*1=0,"","角 ")&IF(RIGHT(TRUNC(A1*100))*1=0,"整 ",TEXT(RIGHT(TRUNC(A1*100)),"[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输出空,否则输出“角”。同样,这里的判断 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式也可改为LEFT(RIGHT(TEXT(A1,".00"),2))="0 " 用RIGHT(TEXT(A1,".00"))取出分位数,分位为零输出“整”,否则输出分位数。 对于负数,如果一定要用“负XXXXXX”的形式,则直接在第二个判断前加上“IF(A1<0,"负","")&”。 还有网友提出来说万位为零时不输出零不符合 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 ,为此我专门去查了一下相关 规定 关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定 。结果如下: 大写金额中间有“0”时,大写金额要写“零”字;小写金额中间连续有几个“0”时,大写金额中间可以只写一个“零”字;小写金额万位或元位是“ 0”,或者数字中间连续有几个“0”,万位、元位也是“0”,但千位、角位不是“0”时,大写金额中可以只写一个“零”字,也可以不写“零”字。 所以上述公式在当万位为零而千位不为零时,以不输出零的方式 处理,应该是符合规范的。也许正是EXCEL采取这种样式的原因。当然,如果遵照习惯非要加上这个零字也不是不可能。只不过要增加一点公式复杂度罢了。 在一个数中,万会出现几次,不管是万、十万、百万、千万,这个万就出现一次,如果是万万则是亿,如果是万亿又是兆,万兆呢,已经超出EXCEL的处理能力了。所以 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 是万字在大写金额中只可能出现一次,且只出现在整数部分。即然是这样,用SUBSTITUTE()函数就能解决问题。即判断当万位为零而千位不为零时,用“万零”来替换“万”,其它情况下不进行替换。因为EXCEL只有在这种情况下不会输出“零”。 在四舍五入公式中,因为还要考虑尾数舍入问题,判断使用了四舍五入函数ROUND(),公式四的输出整数的部分公式改为: IF(AND(RIGHT(INT(ROUND(ABS(A1),2)/10000))="0",RIGHT(INT(ROU ND(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]")) 为了一个我认为不是很必要的“零”字使公式臃肿了许多,而我喜欢简单清晰的公式,所以不愿在正式公式中采用。 自认为这两个公式已经考虑了许多的细节,但我也不敢保证没有 挂一漏万。现在暂时告一段落,若以后发现问题再来
本文档为【[精品]excel小写数字转大写】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_650122
暂无简介~
格式:doc
大小:21KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-21
浏览量:7