對于财務人員将小寫金額轉為大寫金額是日常工作中經常遇到的問題,無論是報銷單據的填寫,還是付款單據的填寫,幾乎涉及到金額的文件中都會遇到此類問題,雖然Excel中加入NUMBERSTRING()函數,雖然該函數有三種大寫書寫格式可供選擇,但是其僅支持正整數數字,不支持有小數數字的硬傷,使得有财務人員對該函數抱有"棄之有味,食之無肉"的态度。
下面給出該問題的公式解決方案并符詳解,望對财務人員有所幫助。直接上圖
公式拆解表
說明:上圖中,A1、B1、C1單元格中存放小寫金額,分别代表三種情況:僅小數、正整數加小數、僅正整數。對應第三行是返回結果,公式存放在A5單元格:
=IF(A1>=1,NUMBERSTRING(INT(A1),2)&"元",)&SUBSTITUTE(SUBSTITUTE(TEXT(RIGHT(RMB(A1),2),"[dbnum2]0角0分;;整"),"零角",IF(A1<1,,"零")),"零分","整")
8行一下是該公式的拆分表及其結果
涉及公式:
INT():将數字向下舍入到最接近的整數,即取整。
NUMBERSTRING():小寫金額轉大寫金額,有三種模式。
IF():條件判斷,根據表達式值的真假返回不同的結果。
RMB():将數字轉為人民币格式的文本。
RIGHT():從字符串的右邊提取指定數目的字符。
TEXT():将數值轉換為按指定數字格式表示的文本。
SUBSTITUTE():在指定的字符串中替換指定的子字符串為新的字符串。
涉及公式舉例
公式分析:
我們将公式分為兩部分:
IF(A1>=1,NUMBERSTRING(INT(A1),2)&"元",)和
SUBSTITUTE(SUBSTITUTE(TEXT(RIGHT(RMB(A1),2),"[dbnum2]0角0分;;整"),"零角",IF(A1<1,,"零")),"零分","整")
公式第一部分:IF(A1>=1,NUMBERSTRING(INT(A1),2)&"元",)
對于小寫數字的整數部分我們可以直接用NUMBERSTRING()函數來處理
公式先用int()函數提取數字的整數部分,然後用if函數判斷,對于大于等于1的數字直接用NUMBERSTRING()函數将整數部分轉為大寫,小于1的數字返回空,由公式第二部分來處理
公式第二部分:SUBSTITUTE(SUBSTITUTE(TEXT(RIGHT(RMB(A1),2),"[dbnum2]0角0分;;整"),"零角",IF(A1<1,,"零")),"零分","整")
先用RMB(A1)函數将數值型數字轉為文本字符串(目的是提取字符串最後兩位的小數部分)
通RIGHT(RMB(A1),2)函數提取數字的後兩位小數部分,餘下的公式都是對提取出的小數部分來處理的
TEXT(RIGHT(RMB(A1),2),"[dbnum2]0角0分;;整")此部分略為複雜,是将提取的小數部分轉化為自定義格式的文本
TEXT()的第二參數:"[dbnum2]0角0分;;整"為自定義格式表達式,兩個分号将表達式分為三段:
正數;負數;零
第一個;前的表達式是指當TEXT()的第一參數為正數時TEXT公式返回該段表達式所表示的格式結果,
[dbnum2]是TEXT()第二參數衆多選項中的一個,表示小寫格式轉大寫格式
[dbnum2]0角0分表示對于TEXT()函數第一參數(提取的兩位小數數字)第一位小數數字轉大寫後後面跟一個“角”字,第二位小數數字轉大寫後後面跟一個“分”字
第二個;前沒有内容表示忽略負數,
第二個;後面的表達式是對于第一參為零的情況來設置的,如果數字是零,則返回一個"整"字
TEXT(RIGHT(RMB(A1),2),"[dbnum2]0角0分;;整")的返回結果就兩種情況:"幾角幾分"和"整"。
SUBSTITUTE(TEXT(RIGHT(RMB(A1),2),"[dbnum2]0角0分;;整"),"零角",IF(A1<1,,"零"))我們可以寫成如下形式
SUBSTITUTE("幾角幾分","零角",IF(A1<1,,"零"))或SUBSTITUTE("整","零角",IF(A1<1,,"零"))
對于前者,如果要轉換的數字小于1,将"幾角幾分"中出現的"零角"替換為"零",結果返回"零幾分",否則将"幾角幾分"中出現的"零角"替換為"",結果返回"幾分"
最裡層的SUBSTITUTE()函數是對“幾角”進行的處理
在理解了内層SUBSTITUTE()的原理後,外層的就好理解了
外層的SUBSTITUTE()函數是對"幾分"進行的處理,如果出現了"零分"我們就替換為"整"字。
最後兩部分公式用"&"連接符連接,返回最終的結果。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!