財務單據常需將阿拉伯數字轉為「壹佰貳拾叁元整」等中文大寫。網路流傳數十種公式,經測試篩選,有三大經典公式最穩健通用。本文詳解三式優劣,並揭露自製通用公式的核心邏輯。
=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(ABS(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"),2)*1>0,TEXT(RIGHT(TEXT(A1,".00"),1)),"[DBNum2]")&"分","整")))
特點: 對負數按正數處理(不加「負」字),建議搭配條件格式將負數標紅。邏輯最精簡、效能最好,處理「零元」「整」「零角」等邊界情況最精準。
所有公式核心仰賴 Excel 特殊格式代碼 [DBNum2]:
作者提出將問題分解為三獨立模組,再用 `&` 串接:
再用 `IF` 處理邊界:零值顯示空白、負數改用條件格式標紅、非數值回傳錯誤值。
理解 `[DBNum2]` 與分段邏輯,不再盲目複製貼上,才能在異常資料面前從容調適。