當(dāng)前位置:首頁>職場>excel金額小寫轉(zhuǎn)大寫公式詳解(Excel中金額小寫轉(zhuǎn)大寫)
發(fā)布時間:2024-01-24閱讀(16)
對于做財務(wù)的同學(xué)應(yīng)該經(jīng)常會遇到要求把金額用大寫的方式展示吧,如下圖這樣。

今天小編就和大家分享如何把數(shù)字金額轉(zhuǎn)換為大寫金額。
1、單元格格式Excel本身自帶了中文大寫數(shù)字格式,但是實際使用不僅容易,下面我們一起來看看吧。
不知道大家還記不記得在單元格格式中數(shù)字類別類別下有個特殊格式,這個格式下就有中文大寫數(shù)字格式。

我們直接用開頭的數(shù)據(jù)來試試,看看效果,也好做個對比。

看到結(jié)果應(yīng)該知道小編為什么說不盡如意了吧。這種方式有幾個問題:①沒有元角分單位;②有小數(shù)點;③沒有包含整字。
2、NUMBERSTRING函數(shù)NUMBERSTRING函數(shù)是Excel中的一個隱藏函數(shù),就是在函數(shù)列表里查不到的,我們也就不去研究Excel出于什么原因沒有公開這個函數(shù)了。
函數(shù)格式:「=NUMBERSTRING(VALUE,TYPE)」;
函數(shù)作用;處理小寫數(shù)字轉(zhuǎn)大寫數(shù)字;
說明:VALUE表示要轉(zhuǎn)換的數(shù)字;TYPE有三種類型可選為「1、2、3」,每種類型對應(yīng)一種展示大寫方式。
注意點:這個函數(shù)只支持正整數(shù),不支持小數(shù)。
我們來看看三種類型的效果對比:

從結(jié)果上來看類型參數(shù)為2的是我們需要的,并且我們發(fā)現(xiàn)也是沒有單位沒有整字的,而且函數(shù)不能處理小數(shù)。我們可以看下效果:

而且我們還發(fā)現(xiàn)如果直接使用小數(shù),結(jié)果會被四舍五入。
不過這些都不是問題,因為是函數(shù)所有操作空間就很多,我們可以進(jìn)行加工得到我們想要的。
我們先來解決四舍五入的問題。今天我們來學(xué)習(xí)一個新函數(shù)TRUNC。這個函數(shù)很簡單,主要作用是把數(shù)字的小數(shù)部分截掉,保留整數(shù)部分,語法:TRUNC(數(shù)字)。
然后我們來解決小數(shù)部分。既然NUMBERSTRING函數(shù)只能處理整數(shù),那么如果我們把小數(shù)部分轉(zhuǎn)為整數(shù)不就行了嗎?而且我們只需要處理角和分也就是兩個字。
小編第一個想到的是截取函數(shù),然后定位到角分,方案是可以的,就是公式寫出來很長很繁瑣。
如下圖,如一個兩位小數(shù),我們首先把這個兩位小數(shù)乘以10,然后對結(jié)果截取整數(shù)部分得到金額1,那么十分位就變成個位了;然后對這個兩位小數(shù)直接截取整數(shù)部分再乘以10得到金額2,并且金額2的個位一定是0,而且金額1和金額2位數(shù)也一定相等,只要把金額1減金額2就可得到角了。

同理「=TRUNC(A5*100)-TRUNC(A5*10)*10」可得分。
現(xiàn)在四舍五入,角,分問題都解決了,我們把公式拼接一下就可以了。最終得到公式:「=NUMBERSTRING(TRUNC(B5),2)&"元"&NUMBERSTRING(TRUNC(B5*10)-TRUNC(B5)*10,2)&"角"&NUMBERSTRING(TRUNC(B5*100)-TRUNC(B5*10)*10,2)&"分"」,我們看看效果:

看到結(jié)果還是不是很理想,還是有很多問題,整數(shù)結(jié)尾應(yīng)該是"元整",角為有值分位沒值的結(jié)尾應(yīng)該是"角整",分位有值的且角位為0的應(yīng)該是"零玖分"這樣,后面不應(yīng)該有"零分"。當(dāng)然這些問題也可通過IF函數(shù)在處理,但是這就會導(dǎo)致公式很長。
小編發(fā)現(xiàn)主要問題就是在小數(shù)部分的處理上,因此我們可以選擇把小數(shù)部分復(fù)雜的處理交給VBA處理,代碼如下:
獲取小數(shù)部分大寫金額Function GetDecimal(cell) Dim arrResult() As String 截取小數(shù)點 arrResult = VBA.Split(cell, ".") Dim iArr As Integer iArr = UBound(arrResult) 沒有小數(shù)部分直接返回"元整" If iArr = 0 Then GetDecimal = GetDecimal & "元整" 有小數(shù)部分且是格式正確 ElseIf iArr = 1 Then Dim strSmall As String strSmall = arrResult(1) Dim iSmall As Integer Dim strJiao, strFen As String 獲取小數(shù)位數(shù) iSmall = Len(strSmall) 一位小數(shù)則為分 If iSmall = 1 Then strJiao = getUpperCase(strSmall) 兩位小數(shù)則為分角 ElseIf iSmall = 2 Then strJiao = getUpperCase(Left(strSmall, 1)) strFen = getUpperCase(Right(strSmall, 1)) 大于兩位小數(shù)只取前兩位分角 Else strJiao = getUpperCase(Left(strSmall, 1)) strFen = getUpperCase(Mid(strSmall, 2, 1)) End If 如 1.00 為 壹元整 If (strFen = "" Or strFen = "零") And strJiao = "零" Then GetDecimal = GetDecimal & "元整" 如 1.10 為 壹元壹角整 ElseIf (strFen = "" Or strFen = "零") And strJiao <> "零" Then GetDecimal = GetDecimal & "元" & strJiao & "角整" 如 1.01 為 壹元零壹分 ElseIf strFen <> "" And strFen <> "零" And strJiao = "零" Then GetDecimal = GetDecimal & "元" & "零" & strFen & "分" 如 1.11 為 壹元壹角壹分 ElseIf strFen <> "" And strFen <> "零" And strJiao <> "零" Then GetDecimal = GetDecimal & "元" & strJiao & "角" & strFen & "分" End If 有小數(shù)部分但是格式不正確 Else GetDecimal = GetDecimal & "數(shù)據(jù)格式有問題" End IfEnd Function數(shù)字轉(zhuǎn)大寫Private Function getUpperCase(str) As String Dim strWord As String Select Case str Case "0": strWord = "零" Case "1": strWord = "壹" Case "2": strWord = "貳" Case "3": strWord = "叁" Case "4": strWord = "肆" Case "5": strWord = "伍" Case "6": strWord = "陸" Case "7": strWord = "柒" Case "8": strWord = "捌" Case "9": strWord = "玖" Case Else: strWord = str End Select getUpperCase = strWordEnd Function
代碼中也有解釋,小編注解應(yīng)該還算清楚,不清楚的可以和小編一起探討。
最后把整數(shù)部分和小數(shù)部分結(jié)合起來,使用公式:「=NUMBERSTRING(TRUNC(B5),2)&GetDecimal(B5)」即可得到最終效果。

歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-233384.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖