【VBA】数字を英単語へ変換する

VBAで
 ・数字を英単語へ変換
できます!
※例えば「1234」を「One Thousand Twenty Four」へ変換できます。

PR

はじめに

「数字を英単語へ変換するVBAコード」は、Microsoftの公式ページに公開されています。
※一部コンパイルエラーになるため微修正が必要です。


ただ上記のVBAコードは「数字を英単語へ変換する」だけでなく、「Dollars and No Cent(通貨の単位)」も付与します。

Microsoftの公式ページに公開されているVBAコードの実行結果
Microsoftの公式ページに公開されているVBAコードの実行結果

この記事では上記で公開されているVBAコードから
 ・「通貨の単位」を付与しないように修正したVBAコードを作成
します。

PR

VBAコード

数字を英単語へ変換する
 ・ユーザー定義関数「SpellNumber」を作成
します。
※Microsoftの公式ページに公開されているVBAコードの一部を修正します。
※可読性をよくするためにインデント等も修正修正します。

Option Explicit

'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
    SpellNumber = Dollars
    
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

2つの「Select Case文」をコメントアウトしています(44~60行目)。

ユーザー定義関数「SpellNumber」の戻り値を修正しています(62、63行目)。

PR

実行結果

上記で作成したユーザー定義関数「SpellNumber」を呼び出すことで、数字を英単語へ変換できました。
※ユーザー定義関数「SpellNumber」の引数に「英単語へ変換したい数字」を指定します。

Sub sample()
    
    'ユーザー定義関数「SpellNumber」を呼び出し
    MsgBox SpellNumber(1024)
    
End Sub
実行結果
PR

参考①

数字を英単語へ変換することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

西暦を和暦へ変換することもできます。
※西暦から和暦を取得できます。

詳細は以下の記事をご確認ください。