ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wshcw

[原创] [原创]人民币大写数字相互转换

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2021-10-27 10:50 | 显示全部楼层
本帖最后由 柴工 于 2021-10-27 11:08 编辑

楼主您好,首先表达一下对前辈的仰慕与敬畏,作为一个刚刚参加工作的90后,同样对Excel深感兴趣,并以后打算长期深入研究。看到在零几年本人十几岁时前辈们在论坛上相互探讨学习进步,心中不禁感叹学习的路才刚刚开始。本帖1楼的两个压缩文件附件是不是无法下载了,试了多次都不行。

TA的精华主题

TA的得分主题

发表于 2021-10-28 10:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 柴工 于 2021-10-28 10:44 编辑

这个与用友一致的大写公式:在小数判断部分 当数值的整数为零时 会出现 零几角整  零几角几分 的情况。(1楼的两个压缩包无法下载了,能否帮忙解决一下

TA的精华主题

TA的得分主题

发表于 2021-10-29 15:48 | 显示全部楼层
本帖最后由 柴工 于 2021-10-29 19:15 编辑
wshcw 发表于 2012-5-6 00:48
与用友一致的大写公式,供大家收藏.

前几日下载了楼主的 与用友软件一致的大写公式,发现公式存在一个小问题,见下图:
与用友一致公式新旧对比.jpg
直接用楼主的表格做个对比。
发现当数值范围为0.10-0.99时,会出现 零几角整 零几角几分,显然是零是多余的;
把楼主的公式分解,发现问题出在小数判断部分:
公式分解.jpg
针对此问题进行了以下改动:

在小数判断部分,当数值范围位于0.10-0.99之间时,将多余的零用一个空值替换掉。

声明本人为初学者,写公式暂不求精简,实现功能即可!!

原公式中的小数部分:
  1. &TEXT(RIGHT(RMB(A5,2),2),"[>9][dbnum2]"&IF(MOD(ABS(A5),10)<1,0,)&"0角0分;" &IF(A5^2<1,,0)&"[>][dbnum2]0分;整")
复制代码

小数部分改后的公式:
  1. &if(And(INT(ABS(A5)+0.5%)<1,RIGHT(Round(A5,2),2)>9),SUBSTITUTE(TEXT(RIGHT(RMB(A5,2),2),"[>9][dbnum2]"&IF(MOD(ABS(A5),10)<1,0,)&"0角0分;" &IF(A5^2<1,,0)&"[>][dbnum2]0分;整"),"零","",1), TEXT(RIGHT(RMB(A5,2),2),"[>9][dbnum2]"&IF(MOD(ABS(A5),10)<1,0,)&"0角0分;" &IF(A5^2<1,,0)&"[>][dbnum2]0分;整"))  
复制代码


楼主原公式:
  1. =SUBSTITUTE(SUBSTITUTE(IF(-RMB(A2),IF(A2>0,,"(负)")&TEXT(INT(ABS(A2)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(RMB(A2),2),"[>9][dbnum2]"&IF(MOD(ABS(A2),10)<1,0,)&"0角0分;"&IF(A2^2<1,,0)&"[>][dbnum2]0分;整"),),"万",IF((MOD(ABS(A2%%),10)<1)*(MOD(ABS(A2%%),10)>=0.1),"万零","万")),"零分","整")
复制代码


改后的公式:
  1. =SUBSTITUTE(SUBSTITUTE(IF(-RMB(A2,2),IF(A2>0,,"(负)")&TEXT(INT(ABS(A2)+0.5%),"[dbnum2]G/通用格式元;;")&IF(AND(INT(ABS(A2)+0.5%)<1,RIGHT(ROUND(A2,2),2)>9),SUBSTITUTE(TEXT(RIGHT(RMB(A2,2),2),"[>9][dbnum2]"&IF(MOD(ABS(A2),10)<1,0,)&"0角0分;"&IF(A2^2<1,,0)&"[>][dbnum2]0分;整"),"零","",1),TEXT(RIGHT(RMB(A2,2),2),"[>9][dbnum2]"&IF(MOD(ABS(A2),10)<1,0,)&"0角0分;"&IF(A2^2<1,,0)&"[>][dbnum2]0分;整")),),"万",IF((MOD(ABS(A2%%),10)<1)*(MOD(ABS(A2%%),10)>=0.1),"万零","万")),"零分","整")
复制代码

另外,对公式中的以下几部分的具体的逻辑仍不明白,只能明白公式实现的功能,请各位前辈指点。
1.用RMB函数且在前面加负号是将数值四舍五入到两位小数并且判断单元格输入的是否是数字吗?
  1. -RMB(A2,2)
复制代码
2.此部分大体意思是在整数部分对万用万零进行替换,以达到大写人民币的标准写法。加粗部分是用取余数法判断该数值的大小<10万 和 >=1万,但是通过 * 连接,表达什么逻辑?
  1. IF(  <b>(MOD(ABS(A5%%),10)<1)*(MOD(ABS(A5%%),10)>=0.1)</b>,   "万零"   ,  "万")
复制代码
3.这部分是将四舍五入后的两位小数取出来,对小数进行判断并写成大写形式。加粗部分用四个&连接符组建了小数部分的文本格式,在Text函数中这样写文本格式是第一次见,不明白其中的逻辑。
  1. TEXT(RIGHT(RMB(A5,2),2),<b>"[>9][dbnum2]"&IF(MOD(ABS(A5),10)<1,0,)&"0角0分;" &IF(A5^2<1,,0)&"[>][dbnum2]0分;整")</b>
复制代码





TA的精华主题

TA的得分主题

发表于 2021-10-29 16:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-11-22 11:12 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 21:12 , Processed in 0.035530 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表