Excel125|人民幣阿拉伯數字轉中文大寫
問題來源
NUMBERSTRING函數的缺陷
韓老師此前寫過一篇文章:Excel113 | NUMBERSTRING和TEXT函數:阿拉伯數字和中文數字轉換,裡面提到人民幣數字轉中文大寫的一種方法:NUMBERSTRING函數,但:NUMBERSTRING函數的侷限是:僅能計算整數,小數部分四捨五入。
如下圖:
設置單元格格式的缺陷
設置單元格格式,可以設置成【特殊】——【中文大寫數字】,但小數部分只能“逐字直譯”成大寫,不能寫成“幾角幾分”。
以上兩種方法不行,只能求助函數了。
函數實現
公式
=SUBSTITUTE(SUBSTITUTE(IF(-RMB(A2,2),TEXT(A2,";負")&TEXT(INT(ABS(A2)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(RMB(A2,2),2),"[dbnum2]0角0分;;整"),"零元整"),"零角",IF(A2^2<1,,"零")),"零分","整")
公式分步解析
-RMB(A2,2)
按人民幣格式將數值四捨五入到兩位數並轉換成文本;
TEXT(A2,";負")
如果A2的金額小於0,則返回字符“負”;
TEXT(INT(ABS(A2)+0.5%),"[dbnum2]G/通用格式元;;")
金額取絕對值,整數部分轉換為大寫,+0.5%避免0.999元等的情況下計算出現錯誤;
TEXT(RIGHT(RMB(A2,2),2),"[dbnum2]0角0分;;整")
金額小數部分轉換為大寫;
IF(-RMB(A2,2),TEXT(A2,";負")&TEXT(INT(ABS(A2)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(RMB(A2,2),2),"[dbnum2]0角0分;;整"),"零元整")
IF進行判斷,如果金額不是0分,則返回大寫結果,否則返回零元整;
最後用兩個SUBSTITUTE函數替換“零角”為“零”,“零分”為“整”。