大家在使用Excel的時候,是否會遇到要把一個或一些阿拉伯數字轉換成中文大寫金額的計算要求呢?如果只是偶爾需要對少數幾個數字進行轉換,乾脆手工操作啦,但如果要進行轉換的數字較多或經常要轉換時,該怎麼辦呢?一向無往不勝的Excel能為你做些什麼呢?其實,這個不難,最少有三種方法可以實現。
一、 設置單元格格式:
用這個辦法能直接將阿拉伯數字轉換成中文大寫金額,而且操作簡單。右擊需要轉換的單元格,在彈出的快捷菜單中選擇「單元格格式」,然後在「數字」選項卡中選擇「自定義」,在「類型」中寫入「[DBNum2]G/通用格式"元"」後按確定即可。瞧,321是不是已經變成了「叄佰貳拾壹元」了?
可惜的是,這個辦法只能處理整數,而對帶有小數的數字無能為力。當然也有過朋友通過對此法進行一定的擴展而可以處理部分帶小數的數字,但效果不是很理想。
二、 利用中文大寫金額轉換函數:
先別急,這個函數你在Excel裡是找不到的,微軟畢竟不是大陸公司!這個函數被收集在本站開發的「Excel擴展函數集」裡,下載這個函數集,按說明進行安裝後,在Excel中運用一個叫EHDXRMB()的函數就可以將任意數字轉換成中文大寫金額。具體情況在此就不多進行介紹了。
三、 利用公式進行轉換:
我們先來了解一下什麼是Excel裡的公式與函數。
Excel之所以計算功能異常強大,百分之八十的功勞就在於用戶可以創建公式進行計算。所謂公式,實際上就是一個計算表達式(通常是包含函數與單元格引用的計算表達式)。在Excel裡,以「=」作為公式的標誌,在任何一個非文本值類型的單元格內,只要以「=」開頭,就必定是Excel公式,舉一最簡單的例子:如果A1、B1單元格的值為別為1和2,那麼如果在C3單元格內輸入「=A1+B1」,則Excel會自動將A1和B1的值相加,得到數值3,再返回給C3單元格。
再來說函數,函數其實就是包裝好的公式,它能根據你提供的參數自動進行複雜的計算,從而最大限度地減輕你的工作量。Excel內置了大量具備各種功能的函數,而且Excel還允許用戶自己添加函數(就像第二種方法中筆者寫的那個),這樣一來,在Excel裡幾乎沒有計算不出來的東西了。拿Excel中較常用到的SUM函數來說,如果要計算從A1到A100單元格的數值總和,寫公式時是用不著寫成「=A1+A2+A3+……A100」的,而只是簡單地寫成「=SUM(A1:A10)」就可以了。
Excel中有上百種函數,今天我們只講我們將要用到的幾個。其實所有這些函數的功能及詳細用法在Excel幫助文件裡都有介紹,當你遇到具體計算要求時,只要你點擊常用工具欄中「粘貼函數」按鈕,Excel會將所有的函數一一展示在你眼前,結合相應的幫助文件,你可以迅速挑選到一個適合你的函數。
1、IF函數
這是Excel裡最常用到的函數之一,它的功能是執行真假值判斷,根據邏輯測試的真假值返回不同的結果。其語法為IF(判斷表達式,當條件值為真時返回的值,當條件值為假時返回的值)。通俗地說,就是「如果……就……否則」的語法結構。比如A1單元格內為學生成績,我們現在要在B1單元格計算此成績是否及格,則公式為「=IF(A1<60,"不及格","及格")」,這樣一來,如果A1的數值小於60,B1就會顯示「不及格」,否則就顯示「及格」,是不是挺簡單?IF函數是允許嵌套的,也就是說IF函數裡面還可以有IF函數,這樣就可以執行比較複雜的判斷了。
2、TRUNC函數
這個函數可以截去指定位數的小數,如果將小數部分全部截去,就可以得到一個整數。要注意,截去是指直接捨棄,而不是四捨五入。比如A1單元格為21.147,要想在B1單元格內將它轉換為只有兩位小數的數字,則公式為「=TRUNC(A1,2)」,計算結果為21.14。
3、文本函數
文本函數是一系列對文本進行截取、合併、查找、轉換等操作的函數。下面簡單介紹一下下文中將用到的幾個:
A、LEN函數,用來計算指定文本的字符數,任何字符都將被計數,包括字母、數字、標點符號甚至空格。如「LEN("Excel")」等於5。
B、LEFT函數,可以從文本字符串的左邊開始截取指定長度的文本,如「LEFT("ExcelVBA",5)」等於「Excel」。
C、RIGHT函數,這個函數的功能與LEFT函數相似,只不過它是從右邊開始截取文本的。如「RIGHT("Office Excel",5)」等於「Excel」。
D、MID函數,這個函數還是用來截取文本的,但方式與上兩種都不同,它是從指定的位數開始截取指定長度的文本。「MID("Excel",3,3)」等於「cel」。
E、&函數
實際上這個函數的全稱應該是CONCATENATE,只不過這個名字太長不容易記住,所以乾脆就叫做&函數,它的功能是將幾個文本連結起來。比如「"電腦"&"界"&"應用"&"文萃"」等於「電腦界應用文萃」。
F、TEXT函數
這個函數其實也是一個文本函數,但因為在轉換中文大寫金額時這是一個起關鍵作用的函數,而在Excel幫助中又未詳述,所以要著重介紹一下。
TEXT函數可以將一數值轉換為按指定數字格式表示的文本,比如是否帶千分號,顯示幾位小數,是否帶貨幣符號,還有日期,時間等等。當然,最重要的是它可以將數值轉換為中文大寫,雖然不能直接將阿拉伯數字轉換為中文大寫金額,但已經足夠了。
TEXT的語法是TEXT(目標數值,格式),這個格式的種類及寫法與單元格格式中數字選項卡中顯示的相同。如TEXT(100.1,"0.00")=100.10。注意,任何數值只要被TEXT函數轉換過,不單單是顯示格式被改變了,內容也徹底變成了文本,不能再參與計算了。要將數值轉換為中文大寫,應該在函數中用「[DBNum2]」格式參數,這是在Excel幫助中沒提到的一個參數,但卻非常實用!
好了,刀我們就先磨到這裡,下面我們開始砍柴!
首先,我們要分析一下計算要求——在進行較複雜的公式創建之前,這是非常必要的一個步驟,就好像寫論文前要先列好提綱一樣,一定要先有好的規劃,才能有好的解決方案。我們已經知道,TEXT函數只能簡單地把數字轉換為中文大寫,而且只適合於整數,這也就是說,需要我們將目標數值分成元、角、分三段來轉換,然後再用&函數拼接在一起。標準的貨幣型數值包含兩位小數,因為目標數值是未知的,所以我們首先要將要轉換的數值轉換成"0.00"的格式,比如「588.1」,我們要把它轉換為「588.10」,這樣才便於後面進行分段轉換。還有一點要注意的地方是目標數值可能不只兩位小數,這時我們就要截掉多餘位數的小數(是截掉,可不是取整喲,不然的話,1.998可要變成2.00了!)
下面進行分段轉換,我們先假設一個某工作表中C2單元格中存在一個需要轉換的目標數值:5188.15,則各段計算公式分別為:
各部分轉換值
整數部分
=TEXT(TRUNC(C2),"[DBNUM2]")&"元"
角位
=TEXT(MID(C2,LEN(TEXT(TRUNC(C2,2),"0.00"))-1,1),"[DBNUM2]")&"角"
分位
=TEXT(RIGHT(TEXT(TRUNC(C2,2),"0.00"),1),"[DBNUM2]")&"分"
角分位
=D6&D7
我們把以上公式分別輸入到D5到D9單元格中,計算結果為:
各部分轉換值
單元格 整數部分
D5 伍仟壹佰捌拾捌元
角位
D6 壹角
分位
D7 伍分
角分位
D8 壹角伍分
會不會覺得公式太長?Excel的函數都是允許嵌套的,但無論怎麼嵌套,都有其固定的計算順序——與四則混合運算的計算順序一樣,先算最裡頭的一個括號,先乘除,後加減(邏輯函數例外)。按照這個規則,再加上我在前面已經把要用到的函數一一為大家進行了介紹,相信稍稍動動腦筋就能明白。萬一暫時難以理解也別著急,待一會兒在Excel裡親自試試就明白了。
好了,已經成功一半了,下面的工作是把分段轉換好的中文大寫金額連結起來,可別小看這個過程,這比剛才的工作要難得多!
對於需要進行轉換的數值,可能會有如下幾種類型:
一、 零
二、 整數
三、 既有小數部分又有整數部分的有理數
1、 只有一位小數
2、 兩位以上小數,但第一位為零
四、 純小數
1、 只有一位小數
2、 兩位以上小數,但第一位為零
對於不同的類型,連結方式是不同的,不然就會出現「零元」、「零角」、「零分」以及其他一些不符合中文大寫金額規則的連結結果。那樣的話就前功盡棄了。所以我們在分段轉換時不必考慮的這些問題在連結的時候就要好好考慮清楚了。現在IF函數要大派用場了,只有它才能進行嚴密的判斷,並根據判斷的情況進行相應的連結。
以目標數值5188.1在C2單元格為例,我們先列表說明要進行哪些判斷。在以後需要進行較複雜的判斷工作之前,建議大家也能這樣做,這樣有助於保持清醒的頭腦以組織條理分明的語句。
判斷公式
是否為零
=IF(TRUNC(C2,2)=0,TRUE,FALSE)
是否只有整數部分
=IF(TRUNC(C2,2)=TRUNC(C2),TRUE,FALSE)
是否沒有整數部分
=IF(TRUNC(C2)=0,TRUE,FALSE)
是否只有角位
=IF(RIGHT(TEXT(TRUNC(C2,2),"0.00"),1)="0",TRUE,FALSE)
是否只有分位
=IF(MID(C2,LEN(TEXT(TRUNC(C2,2),"0.00"))-1,1)="0",TRUE,FALSE)
我們把以上公式分別輸入到D11到D15單元格中,判斷結果如下表所列:
目標數值:5188.1 判斷結果
單元格
是否為零
FALSE
D11
是否只有整數部分
FALSE
D12
是否沒有整數部分
FALSE
D13
是否只有角
TRUE
D14
是否只有分
FALSE
D15
TRUE表示判斷結果為真,FALSE則為假。
好了,最後,我們要綜合以上各項判斷結果來寫出這個連結的公式:=IF(D11,"數值為零",IF(D12,D5&"整",IF(D13,IF(D14,D6&"整",IF(D15,D7,D8)),IF(D14,D5&D6&"整",IF(D15,D5&"零"&D7,D5&D8)))))。
好了,現在往C2單元格中輸入任意一個數字,看看是否能正確轉換出中文大寫金額來?本文的側重點在於告訴大家用怎樣的思路來解決問題,所以講解過程可能有些繁雜,而且整個轉換過程用到了十幾個單元格一步一步進行求解。這在實際工作中當然是不必要的。不過在對複雜問題進行計算時,用到的公式數量是於公式複雜程度成反比的,在大家對公式的運用還不是那麼熟練的時候,多用幾個單元格來創建公式也無妨,只要思路正確,最終結果肯定錯不了!當逐漸掌握公式及各種函數的用法後,就可以用最少的單元格(也就是最複雜的公式)來快速完成計算要求了。
最後還有兩個地方要提醒大家:
1、 Excel的公式中對函數的嵌套次數是有限制的,這就意味著有時候不得不用到一個以上的單元格來創建公式。就好像本文的轉換工作,用一個公式是算不出來的,因為要嵌套的層數太多!一個不行,我們可以用三個!設計思路完全相同,自己做做看!(在本人網站上有示範工作簿文件下載!)
2、 Excel的公式是不認識全形的標點符號的,所以大家在創建公式的時候務必將輸入法切換到半角下(尤其是輸入引號的時候),不然Excel會認為公式有錯誤喲!