大贤者
精华
|
战斗力 鹅
|
回帖 0
注册时间 2008-2-20
|
楼主 |
发表于 2025-8-7 12:50
|
显示全部楼层
本帖最后由 阿菠萝13 于 2025-8-19 11:18 编辑
受5楼公式启发,写出了更简单的公式——
数据量不大于8位的话:
=SUBSTITUTE(NUMBERSTRING(INT(A1),2),"万",IF(AND(MOD(INT(A1/10^4),10)=0,MOD(INT(A1/10^3),10)>0),"万零","万"))
数据量不大于12位的话:
=SUBSTITUTE(SUBSTITUTE(NUMBERSTRING(INT(A1),2),
"万",IF(AND(MOD(INT(A1/10^4),10)=0,MOD(INT(A1/10^3),10)>0),"万零","万")),
"亿",IF(OR(AND(MOD(INT(A1/10^8),10)=0,MOD(INT(A1/10^7),10)>0),AND(MOD(INT(A1/10^4),10^4)=0,MOD(INT(A1/10^3),10)>0)),"亿零","亿"))
解释一下,先将数值转为EXCEL内置中文大写数字格式,然后当万位(10^4)为0且千位不为0时:将汉字“万”替换为“万零”、否则照旧;再当亿位(10^8)为0且千万位不为0时、或整个万级为0且千位不为0时:将汉字“亿”替换为“亿零”、否则照旧。目前只考虑到这步,数据量还没大到要考虑兆位(10^12),如果需要考虑的话依葫芦画瓢再嵌套一层即可
顺便说一下,5楼的公式在处理角分时是有问题的,会出现"伍角零分"之类的错误结果,而我主楼里仅仅是考虑将整数转为会计大写,并未考虑元角分这些字的处理
___________________________________
今天抽空把非整数时的角分处理也完成了,并在最外层放一个iferror,最后结果如下——
=IFERROR(
SUBSTITUTE(SUBSTITUTE(NUMBERSTRING(INT(A1),2),
"万",IF(AND(MOD(INT(A1/10^4),10)=0,MOD(INT(A1/10^3),10)>0),"万零","万")),
"亿",IF(OR(AND(MOD(INT(A1/10^8),10)=0,MOD(INT(A1/10^7),10)>0),AND(MOD(INT(A1/10^4),10^4)=0,MOD(INT(A1/10^3),10)>0)),"亿零","亿"))&"元"
&
IF(MOD(INT(A1*10),10)=0,"",TEXT(MOD(INT(A1*10),10),"[dbnum2]")&"角")
&
IF(AND(MOD(INT(A1*10),10)=0,MOD(INT(A1*100),10)<>0),"零","")
&
IF(MOD(INT(A1*100),10)=0,"整",TEXT(MOD(INT(A1*100),10),"[dbnum2]")&"分"),""
)
|
|