在Excel中将数字转换为单词

在Excel中将数字转换为单词,excel,vba,Excel,Vba,我有下面的代码用于将数字转换为单词。但是我如何编辑没有小数的数字的代码,并且“and”位于正确的位置 例如 250-250美元,零美分 250-马来西亚令吉200和50 首先,我希望得到正确的“和”位置 第二,货币可以放在开头 'Main Function Function SpellNumber(ByVal MyNumber) Dim Dollars, Cents, Temp Dim DecimalPlace, Count ReDim Place(9) As Strin

我有下面的代码用于将数字转换为单词。但是我如何编辑没有小数的数字的代码,并且“and”位于正确的位置

例如

250-250美元,零美分

250-马来西亚令吉200和50

首先,我希望得到正确的“和”位置

第二,货币可以放在开头

'Main Function
Function SpellNumber(ByVal MyNumber)
    Dim Dollars, Cents, Temp
    Dim DecimalPlace, Count
    ReDim Place(9) As String
    Place(2) = " Thousand "
    Place(3) = " Million "
    Place(4) = " Billion "
    Place(5) = " Trillion "
    ' String representation of amount.
    MyNumber = Trim(Str(MyNumber))
    ' Position of decimal place 0 if none.
    DecimalPlace = InStr(MyNumber, ".")
    ' Convert cents and set MyNumber to dollar amount.
    If DecimalPlace > 0 Then
        Cents = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _
                  "00", 2))
        MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
    End If
    Count = 1
    Do While MyNumber <> ""
        Temp = GetHundreds(Right(MyNumber, 3))
        If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
        If Len(MyNumber) > 3 Then
            MyNumber = Left(MyNumber, Len(MyNumber) - 3)
        Else
            MyNumber = ""
        End If
        Count = Count + 1
    Loop
    Select Case Dollars
        Case ""
            Dollars = "No Dollars"
        Case "One"
            Dollars = "One Dollar"
         Case Else
            Dollars = Dollars & " Dollars"
    End Select
    Select Case Cents
        Case ""
            Cents = " and No Cents"
        Case "One"
            Cents = " and One Cent"
              Case Else
            Cents = " and " & Cents & " Cents"
    End Select
    SpellNumber = Dollars & Cents
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" & MyNumber, 3)
    ' Convert the hundreds place.
    If Mid(MyNumber, 1, 1) <> "0" Then
        Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
    End If
    ' Convert the tens and ones place.
    If Mid(MyNumber, 2, 1) <> "0" Then
        Result = Result & GetTens(Mid(MyNumber, 2))
    Else
        Result = Result & 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 Val(Left(TensText, 1)) = 1 Then   ' If value between 10-19...
        Select Case Val(TensText)
            Case 10: Result = "Ten"
            Case 11: Result = "Eleven"
            Case 12: Result = "Twelve"
            Case 13: Result = "Thirteen"
            Case 14: Result = "Fourteen"
            Case 15: Result = "Fifteen"
            Case 16: Result = "Sixteen"
            Case 17: Result = "Seventeen"
            Case 18: Result = "Eighteen"
            Case 19: Result = "Nineteen"
            Case Else
        End Select
    Else                                 ' If value between 20-99...
        Select Case Val(Left(TensText, 1))
            Case 2: Result = "Twenty "
            Case 3: Result = "Thirty "
            Case 4: Result = "Forty "
            Case 5: Result = "Fifty "
            Case 6: Result = "Sixty "
            Case 7: Result = "Seventy "
            Case 8: Result = "Eighty "
            Case 9: Result = "Ninety "
            Case Else
        End Select
        Result = Result & GetDigit _
            (Right(TensText, 1))  ' Retrieve ones place.
    End If
    GetTens = Result
End Function

' Converts a number from 1 to 9 into text. 
Function GetDigit(Digit)
    Select Case Val(Digit)
        Case 1: GetDigit = "One"
        Case 2: GetDigit = "Two"
        Case 3: GetDigit = "Three"
        Case 4: GetDigit = "Four"
        Case 5: GetDigit = "Five"
        Case 6: GetDigit = "Six"
        Case 7: GetDigit = "Seven"
        Case 8: GetDigit = "Eight"
        Case 9: GetDigit = "Nine"
        Case Else: GetDigit = ""
    End Select
End Function'
的主要功能
函数SpellNumber(ByVal MyNumber)
暗淡的美元、美分、临时工
昏暗的地方,伯爵
将位置(9)重拨为字符串
排名(2)=“千”
排名(3)=“百万”
排名(4)=“十亿”
排名(5)=“万亿”
'金额的字符串表示形式。
MyNumber=修剪(Str(MyNumber))
'如果没有,小数点后0位的位置。
小数位数=仪表(MyNumber,“.”)
'转换美分并将MyNumber设置为美元金额。
如果小数点>0,则
仙=根(左(中(我的数字,小数点+1)和_
"00", 2))
MyNumber=修剪(左侧(MyNumber,小数点位置-1))
如果结束
计数=1
当我的号码为“”时执行此操作
Temp=get数百(右(MyNumber,3))
如果为“临时”,则美元=临时和地点(计数)和美元
如果Len(MyNumber)>3,则
MyNumber=左(MyNumber,Len(MyNumber)-3)
其他的
MyNumber=“”
如果结束
计数=计数+1
环
选择案例美元
案例“”
美元=“没有美元”
案例“一”
美元=“一美元”
其他情况
美元=美元和“美元”
结束选择
选择每箱分
案例“”
美分=“没有美分”
案例“一”
美分=“和一美分”
其他情况
美分=“和”&美分&“美分”
结束选择
拼写数字=美元和美分
端函数
'将数字从100-999转换为文本
函数get数百(ByVal MyNumber)
将结果变暗为字符串
如果Val(MyNumber)=0,则退出函数
MyNumber=右侧(“000”和MyNumber,3)
“把几百个地方都换了。
如果Mid(MyNumber,1,1)“0”,则
结果=GetDigit(Mid(MyNumber,1,1))和“百”
如果结束
'转换十和一的位置。
如果Mid(MyNumber,2,1)“0”,则
结果=结果和GetTens(Mid(MyNumber,2))
其他的
结果=结果和GetDigit(Mid(MyNumber,3))
如果结束
Get=结果
端函数
'将10到99之间的数字转换为文本。
函数GetTens(TensText)
将结果变暗为字符串
Result=“”清空临时函数值。
如果Val(Left(TensText,1))=1,则“如果值介于10-19之间…”。。。
选择案例值(文本)
案例10:Result=“十”
案例11:Result=“十一”
案例12:Result=“十二”
案例13:Result=“十三”
案例14:Result=“十四”
案例15:Result=“十五”
案例16:Result=“十六”
案例17:结果=“十七”
案例18:Result=“十八”
案例19:结果=“十九”
其他情况
结束选择
Else'如果值介于20-99之间。。。
选择案例值(左(文本,1))
案例2:结果=“二十”
案例3:结果=“三十”
案例4:结果=“四十”
案例5:结果=“五十”
案例6:结果=“六十”
案例7:结果=“70”
案例8:结果=“八十”
案例9:结果=“90”
其他情况
结束选择
Result=Result&GetDigit_
(右(TensText,1))'检索一个位置。
如果结束
GetTens=结果
端函数
'将从1到9的数字转换为文本。
函数GetDigit(数字)
选择案例值(数字)
案例1:GetDigit=“一”
案例2:GetDigit=“两个”
案例3:GetDigit=“三”
案例4:GetDigit=“四”
案例5:GetDigit=“五”
案例6:GetDigit=“六”
案例7:GetDigit=“七”
案例8:GetDigit=“八”
案例9:GetDigit=“九”
其他情况:GetDigit=“”
结束选择
结束函数'

下一个代码将执行(我理解)您需要的操作,但仅适用于不带小数的数字。否则,您必须描述哪些是林吉特子倍数,如果它们是十进制除法,一个单位为单数,res为复数,等等。。。 您必须使用第二个(可选)参数True调用'SpellNumber
函数。对于美元,请使用
False
或不使用参数。。。请参阅并使用
testSpell()
sub进行测试

Sub testSpell()
  Debug.Print SpellNumber(2450, True)
End Sub

'Main Function
Function SpellNumber(ByVal MyNumber, Optional RinggitCurrency As Boolean) As String
    Dim Dollars, Cents, Temp
    Dim DecimalPlace, Count
    ReDim Place(9) As String
    Place(2) = " Thousand "
    Place(3) = " Million "
    Place(4) = " Billion "
    Place(5) = " Trillion "
    ' String representation of amount.
    MyNumber = Trim(str(MyNumber))
    ' Position of decimal place 0 if none.
    DecimalPlace = InStr(MyNumber, ".")
    ' Convert cents and set MyNumber to dollar amount.
    If DecimalPlace > 0 Then
        Cents = GetTens(left(Mid(MyNumber, DecimalPlace + 1) & _
                  "00", 2))
        MyNumber = Trim(left(MyNumber, DecimalPlace - 1))
    End If
    Count = 1
    Do While MyNumber <> ""
        Temp = GetHundreds(Right(MyNumber, 3), IIf(RinggitCurrency, True, False))
        If Temp <> "" Then Dollars = Temp & Place(Count) & Dollars
        If Len(MyNumber) > 3 Then
            MyNumber = left(MyNumber, Len(MyNumber) - 3)
        Else
            MyNumber = ""
        End If
        Count = Count + 1
    Loop
    Select Case Dollars
        Case ""
            Dollars = "" ' "No Dollars"
        Case "One"
            Dollars = IIf(RinggitCurrency = True, "Ringgit Malaysia one ", "One Dollar")
         Case Else
            Dollars = IIf(RinggitCurrency = True, "Ringgit Malaysia " & Dollars, Dollars & " Dollars")
    End Select
    Select Case Cents
        Case ""
            Cents = "" ' " and No Cents"
        Case "One"
            Cents = " and One Cent"
              Case Else
            Cents = " and " & Cents & " Cents"
    End Select
    SpellNumber = Dollars & Cents
End Function

' Converts a number from 100-999 into text
Function GetHundreds(ByVal MyNumber, Optional boolRinggit As Boolean = False)
    Dim Result As String
    If val(MyNumber) = 0 Then Exit Function
    MyNumber = Right("000" & MyNumber, 3)
    ' Convert the hundreds place.
    If Mid(MyNumber, 1, 1) <> "0" Then
        Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
    End If
    ' Convert the tens and ones place.
    If Mid(MyNumber, 2, 1) <> "0" Then
        Result = Result & IIf(boolRinggit = True, "and " & GetTens(Mid(MyNumber, 2)), GetTens(Mid(MyNumber, 2)))
    Else
        Result = Result & 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 val(left(TensText, 1)) = 1 Then   ' If value between 10-19...
        Select Case val(TensText)
            Case 10: Result = "Ten"
            Case 11: Result = "Eleven"
            Case 12: Result = "Twelve"
            Case 13: Result = "Thirteen"
            Case 14: Result = "Fourteen"
            Case 15: Result = "Fifteen"
            Case 16: Result = "Sixteen"
            Case 17: Result = "Seventeen"
            Case 18: Result = "Eighteen"
            Case 19: Result = "Nineteen"
            Case Else
        End Select
    Else                                 ' If value between 20-99...
        Select Case val(left(TensText, 1))
            Case 2: Result = "Twenty "
            Case 3: Result = "Thirty "
            Case 4: Result = "Forty "
            Case 5: Result = "Fifty "
            Case 6: Result = "Sixty "
            Case 7: Result = "Seventy "
            Case 8: Result = "Eighty "
            Case 9: Result = "Ninety "
            Case Else
        End Select
        Result = Result & GetDigit _
            (Right(TensText, 1))  ' Retrieve ones place.
    End If
    GetTens = Result
End Function

' Converts a number from 1 to 9 into text.
Function GetDigit(Digit)
    Select Case val(Digit)
        Case 1: GetDigit = "One"
        Case 2: GetDigit = "Two"
        Case 3: GetDigit = "Three"
        Case 4: GetDigit = "Four"
        Case 5: GetDigit = "Five"
        Case 6: GetDigit = "Six"
        Case 7: GetDigit = "Seven"
        Case 8: GetDigit = "Eight"
        Case 9: GetDigit = "Nine"
        Case Else: GetDigit = ""
    End Select
End Function '
子测试拼写()
调试。打印拼写数字(2450,真)
端接头
"主要功能",
函数SpellNumber(ByVal MyNumber,可选RinggitCurrency作为布尔值)作为字符串
暗淡的美元、美分、临时工
昏暗的地方,伯爵
将位置(9)重拨为字符串
排名(2)=“千”
排名(3)=“百万”
排名(4)=“十亿”
排名(5)=“万亿”
'金额的字符串表示形式。
MyNumber=修剪(str(MyNumber))
'如果没有,小数点后0位的位置。
小数位数=仪表(MyNumber,“.”)
'转换美分并将MyNumber设置为美元金额。
如果小数点>0,则
仙=根(左(中(我的数字,小数点+1)和_
"00", 2))
MyNumber=修剪(左侧(MyNumber,小数点位置-1))
如果结束
计数=1
当我的号码为“”时执行此操作
Temp=get数百(右(MyNumber,3),IIf(RinggitCurrency,True,False))
如果为“临时”,则美元=临时和地点(计数)和美元
如果Len(MyNumber)>3,则
MyNumber=左(MyNumber,Len(MyNumber)-3)
其他的
MyNumber=“”
如果结束
计数=计数+1
环
选择案例美元
案例“”
美元=“无美元”
案例“一”
美元=