本帖最后由 柴工 于 2021-10-29 19:15 编辑
前几日下载了楼主的 与用友软件一致的大写公式,发现公式存在一个小问题,见下图:
直接用楼主的表格做个对比。
发现当数值范围为0.10-0.99时,会出现 零几角整 零几角几分,显然是零是多余的;
把楼主的公式分解,发现问题出在小数判断部分:
针对此问题进行了以下改动:
在小数判断部分,当数值范围位于0.10-0.99之间时,将多余的零用一个空值替换掉。
声明本人为初学者,写公式暂不求精简,实现功能即可!!
原公式中的小数部分:- &TEXT(RIGHT(RMB(A5,2),2),"[>9][dbnum2]"&IF(MOD(ABS(A5),10)<1,0,)&"0角0分;" &IF(A5^2<1,,0)&"[>][dbnum2]0分;整")
复制代码
小数部分改后的公式:- &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分;整"))
复制代码
楼主原公式:- =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),"万零","万")),"零分","整")
复制代码
改后的公式:- =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函数且在前面加负号是将数值四舍五入到两位小数并且判断单元格输入的是否是数字吗?
2.此部分大体意思是在整数部分对万用万零进行替换,以达到大写人民币的标准写法。加粗部分是用取余数法判断该数值的大小<10万 和 >=1万,但是通过 * 连接,表达什么逻辑?
- IF( <b>(MOD(ABS(A5%%),10)<1)*(MOD(ABS(A5%%),10)>=0.1)</b>, "万零" , "万")
复制代码 3.这部分是将四舍五入后的两位小数取出来,对小数进行判断并写成大写形式。加粗部分用四个&连接符组建了小数部分的文本格式,在Text函数中这样写文本格式是第一次见,不明白其中的逻辑。
- 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>
复制代码
|