艾合麥提尼亞孜·艾合麥提江
(和田師范??茖W校數(shù)學與信息學院,新疆 和田 848000)
Microsoft Excel實現(xiàn)金額數(shù)字維文大寫轉(zhuǎn)換
艾合麥提尼亞孜·艾合麥提江
(和田師范??茖W校數(shù)學與信息學院,新疆 和田 848000)
財務(wù)工作中經(jīng)常使用金額數(shù)字大寫,利用編程法可以方便地實現(xiàn)金額數(shù)字的維文大寫轉(zhuǎn)換。本文闡述了編寫SpellNumber函數(shù)并調(diào)用實現(xiàn)金額數(shù)字維文大寫的方法。
Microsoft Excel;金額數(shù)字維文大寫
一般會計工作中經(jīng)常會遇到貨幣金額小寫轉(zhuǎn)換成大寫的問題。比如說: 支票,發(fā)票,收款單,繳款單,借款單等都是使用金額大寫。一般制單人逐一輸入,輸入有點復(fù)雜,而且很難保證拼寫無誤,下面我們介紹,用Microsoft Excel自動轉(zhuǎn)換人民幣金額小寫轉(zhuǎn)換維文大寫的方法。
在Microsoft Excel中實現(xiàn)人民幣金額小寫轉(zhuǎn)換維文大寫,存在以下兩個問題:
(一)辦公室自動化軟件里面沒有現(xiàn)成的函數(shù)。
(二)Microsoft Excel的Visual Basic代碼框不能直接寫維吾爾文。
為了解決以上的兩個問題我們在Microsoft Excel 中定義一個維文金額數(shù)大小寫轉(zhuǎn)換函數(shù),寫代碼時維吾爾文字母的ASCII碼提出來,然后用ChrW函數(shù)轉(zhuǎn)換維文,最后單元格里面顯示金額數(shù)維文大寫。
先要打開Excel工作簿,然后單擊菜單欄選 “工具→宏→Visual Basic編輯器”。在“Visual Basic編輯器”窗口中選擇“插入→模塊”命令,窗口中輸入如下代碼:
Function SpellNumber(ByVal MyNumber)
Dim Dollars, Cents, Temp
Dim DecimalPlace, Count
ReDim Place(9) As String
Place(2) = ChrW(32) amp; ChrW(1605) amp; ChrW(1609) amp; ChrW(1709) amp; ChrW(32)
Place(3) = ChrW(32) amp; ChrW(1605) amp; ChrW(1609) amp; ChrW(1604) amp; ChrW(1610) amp; ChrW(1608) amp; ChrW(1606) amp; ChrW(32)
Place(4) = ChrW(32) amp; ChrW(1605) amp; ChrW(1609) amp; ChrW(1604) amp; ChrW(1610) amp; ChrW(1575) amp; ChrW(1585) amp; ChrW(1583) amp; ChrW(32)
Place(5) = ChrW(32) amp; ChrW(1578) amp; ChrW(1585) amp; ChrW(1604) amp; ChrW(1609) amp; ChrW(1610) amp; ChrW(1608) amp; ChrW(1606) amp; ChrW(32)
MyNumber = Trim(Str(MyNumber))
' Position of decimal place 0 if none.
DecimalPlace = InStr(MyNumber, “.”)
' Convert cents and set MyNumber to dollar amount.
If DecimalPlace gt; 0 Then
Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) amp; _“00”, 2))
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If
Count = 1
Do While MyNumber lt;gt; “”
Temp = GetHundreds(Right(MyNumber, 3))
If Temp lt;gt; “” Then Dollars = Temp amp; Place(Count) amp; Dollars
If Len(MyNumber) gt; 3 Then
MyNumber = Left(MyNumber, Len(MyNumber) - 3)
Else
MyNumber = “”
End If
Count = Count + 1
Loop
Dollars = Dollars amp; ChrW(32) amp; ChrW(1610) amp; ChrW(1736) amp; ChrW(1749) amp; ChrW(1606) amp; ChrW(32)
Select Case Cents
Case “”
Cents = “ ”
Case Else
Cents = Cents amp; ChrW(32) amp; ChrW(1662) amp; ChrW(1735) amp; ChrW(1709) amp; ChrW(32)
End Select
If Dollars = ChrW(32) amp; ChrW(1610) amp; ChrW(1736) amp; ChrW(1749) amp; ChrW(1606) amp; ChrW(32) Then
SpellNumber = Cents
Else
SpellNumber = Dollars amp; Cents
End If
End Function
' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber)
Dim Result As String
If Val(MyNumber) = 0 Then Exit Function
MyNumber = Right(“000” amp; MyNumber, 3)
' Convert the hundreds place.
If Mid(MyNumber, 1, 1) lt;gt; “0” Then
Result = GetDigit(Mid(MyNumber, 1, 1)) amp; ChrW(32) amp; ChrW(1610) amp; ChrW(1736) amp; ChrW(1586) amp; ChrW(32)
End If
' Convert the tens and ones place.
If Mid(MyNumber, 2, 1) lt;gt; “0” Then
Result = Result amp; GetTens(Mid(MyNumber, 2))
Else
Result = Result amp; GetDigit(Mid(MyNumber, 3))
End If
GetHundreds = Result
End Function
' Converts a number from 10 to 99 into text.
Function GetTens(TensText)
Dim Result As String
Result = “” ' Null out the temporary function value.
' If value between 10-99...
Select Case Val(Left(TensText, 1))
Case 1: Result = ChrW(1574) amp; ChrW(1608) amp; ChrW(1606) amp; ChrW(32)
Case 2: Result = ChrW(1610) amp; ChrW(1609) amp; ChrW(1711) amp; ChrW(1609) amp; ChrW(1585) amp; ChrW(1605) amp; ChrW(1749) amp; ChrW(32)
Case 3: Result = ChrW(1574) amp; ChrW(1608) amp; ChrW(1578) amp; ChrW(1578) amp; ChrW(1735) amp; ChrW(1586) amp; ChrW(32)
Case 4: Result = ChrW(1602) amp; ChrW(1609) amp; ChrW(1585) amp; ChrW(1609) amp; ChrW(1602) amp; ChrW(32)
Case 5: Result = ChrW(1574) amp; ChrW(1749) amp; ChrW(1604) amp; ChrW(1604) amp; ChrW(1609) amp; ChrW(1603) amp; ChrW(32)
Case 6: Result = ChrW(1574) amp; ChrW(1575) amp; ChrW(1578) amp; ChrW(1605) amp; ChrW(1609) amp; ChrW(1588) amp; ChrW(32)
Case 7: Result = ChrW(1610) amp; ChrW(1749) amp; ChrW(1578) amp; ChrW(1605) amp; ChrW(1609) amp; ChrW(1588) amp; ChrW(32)
Case 8: Result = ChrW(1587) amp; ChrW(1749) amp; ChrW(1603) amp; ChrW(1587) amp; ChrW(1749) amp; ChrW(1606) amp; ChrW(32)
Case 9: Result = ChrW(1578) amp; ChrW(1608) amp; ChrW(1602) amp; ChrW(1587) amp; ChrW(1575) amp; ChrW(1606) amp; ChrW(32)
Case Else
End Select
Result = Result amp; GetDigit _
(Right(TensText, 1)) ' Retrieve ones place.
GetTens = Result
End Function
' Converts a number from 1 to 9 into text.
Function GetDigit(Digit)
Select Case Val(Digit)
Case 1: GetDigit = ChrW(1576) amp; ChrW(1609) amp; ChrW(1585)
Case 2: GetDigit = ChrW(1574) amp; ChrW(1609) amp; ChrW(1603) amp; ChrW(1603) amp; ChrW(1609)
Case 3: GetDigit = ChrW(1574) amp; ChrW(1736) amp; ChrW(1670)
Case 4: GetDigit = ChrW(1578) amp; ChrW(1734) amp; ChrW(1578)
Case 5: GetDigit = ChrW(1576) amp; ChrW(1749) amp; ChrW(1588)
Case 6: GetDigit = ChrW(1574) amp; ChrW(1575) amp; ChrW(1604) amp; ChrW(1578) amp; ChrW(1749)
Case 7: GetDigit = ChrW(1610) amp; ChrW(1749) amp; ChrW(1578) amp; ChrW(1578) amp; ChrW(1749)
Case 8: GetDigit = ChrW(1587) amp; ChrW(1749) amp; ChrW(1603) amp; ChrW(1603) amp; ChrW(1609) amp; ChrW(1586)
Case 9: GetDigit = ChrW(1578) amp; ChrW(1608) amp; ChrW(1602) amp; ChrW(1602) amp; ChrW(1735) amp; ChrW(1586)
Case Else: GetDigit = “”
End Select
End Function
寫完代碼以后我們單擊保存,退出“Visual Basic編輯器”窗口。按照以上步驟我們已經(jīng)定義了一個實現(xiàn)維文金額小寫轉(zhuǎn)換成維文大寫的函數(shù),即SpellNumber 函數(shù)。
如果我們在Excel工作簿中要實現(xiàn)維文大寫自動轉(zhuǎn)換,就是要調(diào)用SpellNumber 函數(shù)。比如:如果要把A列單元格人民幣金額小寫數(shù)字轉(zhuǎn)換成維文大寫并且在B列相應(yīng)的單元格顯示出來,那么首先在B2單元格中輸入=SpellNumber(A2)按Enter鍵。然后選B2單元格拖動填充手柄往下拉自動填充,直到A列單元格人民幣金額小寫數(shù)字都轉(zhuǎn)換成大寫。如果經(jīng)常使用人民幣小寫轉(zhuǎn)換成維文大寫,可以在窗口中由菜單欄單擊“另存為”命令,“另存為”對話框中另存為Excel加載宏,文件名為“人民幣金額維文大寫轉(zhuǎn)換.xla”以便使用。
(一)人民幣金額數(shù)不管是在文本格式還是數(shù)字格式都可以自動轉(zhuǎn)換。
(二)人民幣金額數(shù)小數(shù)點后部分自動四舍五入保留兩位小數(shù)。
(三)容易理解,使用方便。
(四)有利于促進人民幣金額數(shù)大寫的規(guī)范。
(五)有利于提高財務(wù)人員工作效率,節(jié)省時間。
[1] 李東海,龍建祥,高建平. Excel 2010實戰(zhàn)辦公技巧精粹[M].北京:兵器工業(yè)出版社,2012:501-513.
2017-09-20
艾合麥提尼亞孜·艾合麥提江(1987-),男,維吾爾族,新疆和田人,理學碩士研究生,和田師范專科學校數(shù)學與信息學院教師。研究方向:數(shù)值泛函、計算機文字信息處理。