艾合麦提尼亚孜·艾合麦提江
(和田师范专科学校数学与信息学院,新疆 和田 848000)
Microsoft Excel实现金额数字维文大写转换
艾合麦提尼亚孜·艾合麦提江
(和田师范专科学校数学与信息学院,新疆 和田 848000)
财务工作中经常使用金额数字大写,利用编程法可以方便地实现金额数字的维文大写转换。本文阐述了编写SpellNumber函数并调用实现金额数字维文大写的方法。
Microsoft Excel;金额数字维文大写
一般会计工作中经常会遇到货币金额小写转换成大写的问题。比如说: 支票,发票,收款单,缴款单,借款单等都是使用金额大写。一般制单人逐一输入,输入有点复杂,而且很难保证拼写无误,下面我们介绍,用Microsoft Excel自动转换人民币金额小写转换维文大写的方法。
在Microsoft Excel中实现人民币金额小写转换维文大写,存在以下两个问题:
(一)办公室自动化软件里面没有现成的函数。
(二)Microsoft Excel的Visual Basic代码框不能直接写维吾尔文。
为了解决以上的两个问题我们在Microsoft Excel 中定义一个维文金额数大小写转换函数,写代码时维吾尔文字母的ASCII码提出来,然后用ChrW函数转换维文,最后单元格里面显示金额数维文大写。
先要打开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编辑器”窗口。按照以上步骤我们已经定义了一个实现维文金额小写转换成维文大写的函数,即SpellNumber 函数。
如果我们在Excel工作簿中要实现维文大写自动转换,就是要调用SpellNumber 函数。比如:如果要把A列单元格人民币金额小写数字转换成维文大写并且在B列相应的单元格显示出来,那么首先在B2单元格中输入=SpellNumber(A2)按Enter键。然后选B2单元格拖动填充手柄往下拉自动填充,直到A列单元格人民币金额小写数字都转换成大写。如果经常使用人民币小写转换成维文大写,可以在窗口中由菜单栏单击“另存为”命令,“另存为”对话框中另存为Excel加载宏,文件名为“人民币金额维文大写转换.xla”以便使用。
(一)人民币金额数不管是在文本格式还是数字格式都可以自动转换。
(二)人民币金额数小数点后部分自动四舍五入保留两位小数。
(三)容易理解,使用方便。
(四)有利于促进人民币金额数大写的规范。
(五)有利于提高财务人员工作效率,节省时间。
[1] 李东海,龙建祥,高建平. Excel 2010实战办公技巧精粹[M].北京:兵器工业出版社,2012:501-513.
2017-09-20
艾合麦提尼亚孜·艾合麦提江(1987-),男,维吾尔族,新疆和田人,理学硕士研究生,和田师范专科学校数学与信息学院教师。研究方向:数值泛函、计算机文字信息处理。