需求描述
對于從事金融或者會(huì )計行業(yè)的朋友,最常遇到的問(wèn)題就是人民幣大寫(xiě)金額與阿拉伯數字的相互轉化問(wèn)題。畢竟,對于發(fā)票、合同等正規文件中,需要使用人民幣大寫(xiě)金額,所以就需要將阿拉伯數字轉化為大寫(xiě)金額;但是針對于大寫(xiě)金額,我們又沒(méi)有辦法直接進(jìn)行求和、相加減的運算操作,所以我們在計算金額前,又需要將大寫(xiě)金額轉化為阿拉伯數字。
那么如何實(shí)現快速切換人民幣大寫(xiě)金額與阿拉伯數字就顯得尤為重要!
需求分析
人民幣大寫(xiě)金額與阿拉伯數字的切換可以分為以下方面:
將數字轉為大寫(xiě)金額,可以通過(guò)設置單元格的格式為'中文大寫(xiě)數字'(具體步驟:選中單元格->數字->其他數字格式->特殊->中文大寫(xiě)數字),通過(guò)設置單元格格式實(shí)現的中文金額大寫(xiě)可以直接運算
如果不希望修改格式,可以通過(guò)自定義函數使用'WorksheetFunction.Text(source.Text, '[DBNum2]')',這種方式會(huì )把數字轉化為中文大寫(xiě),如果需要顯示元角分,需要進(jìn)行特殊處理
將大寫(xiě)金額轉化為數字,可以通過(guò)建立阿拉伯數字與大寫(xiě)金額的匹配,然后通過(guò)遍歷替換,得到每一個(gè)大寫(xiě)金額對應的阿拉伯數字,實(shí)現切換。這里需要特殊處理人民幣的分位符如'拾、佰、仟、萬(wàn)、億、兆、元、角、分、零、整'
01
阿拉伯數字轉人民幣大寫(xiě)金額
'將阿拉伯數字轉化為中文大寫(xiě)數字,即金額大寫(xiě)Function NumberToRMB(source As Range) '通過(guò)Excel內置Text函數實(shí)現數字轉中文大寫(xiě) result = WorksheetFunction.Text(source.Text, '[DBNum2]') '針對帶小數的數字,特殊處理金額 If InStr(result, '.') Then yuan = Mid(result, 1, InStr(result, '.') - 1) jiao = Mid(result, InStr(result, '.') + 1, 1) fen = Mid(result, InStr(result, '.') + 2, 1) '處理元、角、分 If yuan <> '' Then NumberToRMB = yuan & '元' End If If jiao <> '' Then NumberToRMB = NumberToRMB & jiao & '角' End If If fen <> '' Then NumberToRMB = NumberToRMB & fen & '分' End If Else NumberToRMB = result & '元' End IfEnd Function
02
人民幣大寫(xiě)金額轉阿拉伯數字
'將金額大寫(xiě)(中文大寫(xiě)數字)轉化為阿拉伯數字Function RMBToNumber(source As Range)Dim dict As ObjectDim unitDict As ObjectSet dict = CreateObject('Scripting.Dictionary')Set unitDict = CreateObject('Scripting.Dictionary')'預定義中文大寫(xiě)與阿拉伯數字的對應chineseNum = '零壹貳叁肆伍陸柒捌玖'num = '0123456789''將中文大寫(xiě)與數字加入到集合dict中,便于后續匹配For i = 1 To Len(num)dict.Add Mid(chineseNum, i, 1), Mid(num, i, 1)Next i'預定義單位chinese_uom = '拾、佰、仟、萬(wàn)、億、兆、元、角、分、零、整'num_uom = '10、100、1000、10000、100000000、1000000000000、1、0.1、0.01、1、1'chinese_uom_split = Split(chinese_uom, '、')num_uom_split = Split(num_uom, '、')For i = 0 To UBound(chinese_uom_split)unitDict.Add chinese_uom_split(i), num_uom_split(i)Nexttemp = 0'遍歷中文大寫(xiě),依次替換每一個(gè)字符sourceText = source.TextFor i = 1 To Len(sourceText)Debug.Print Mid(sourceText, i, 1)current = Mid(sourceText, i, 1)'判斷是否是常規大寫(xiě),直接替換If dict.exists(current) ThenDebug.Print dict(current)temp = temp + CInt(dict(current))'如果是單位大寫(xiě),特殊處理ElseIf unitDict.exists(current) ThenIf current = '兆' Thenresult = result + tempresult = result * unitDict(current)zhao = resultresult = 0ElseIf current = '億' Thenresult = result + tempresult = result * unitDict(current)yi = resultresult = 0ElseIf current = '萬(wàn)' Thenresult = result + tempresult = result * unitDict(current)wan = resultresult = 0Elsetemp = temp * unitDict(current)result = result + tempEnd Iftemp = 0End IfDebug.Print resultNextresult = zhao + yi + wan + result + temp'輸出最終轉化后的結果RMBToNumber = resultEnd Function

聯(lián)系客服