VBAで
・数字を英単語へ変換
できます!
※例えば「1234」を「One Thousand Twenty Four」へ変換できます。
はじめに
「数字を英単語へ変換するVBAコード」は、Microsoftの公式ページに公開されています。
※一部コンパイルエラーになるため微修正が必要です。
ただ上記のVBAコードは「数字を英単語へ変換する」だけでなく、「Dollars and No Cent(通貨の単位)」も付与します。
この記事では上記で公開されているVBAコードから
・「通貨の単位」を付与しないように修正したVBAコードを作成
します。
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
実行結果
上記で作成したユーザー定義関数「SpellNumber」を呼び出すことで、数字を英単語へ変換できました。
※ユーザー定義関数「SpellNumber」の引数に「英単語へ変換したい数字」を指定します。
Sub sample()
'ユーザー定義関数「SpellNumber」を呼び出し
MsgBox SpellNumber(1024)
End Sub
参考①
数字を英単語へ変換することもできます。
詳細は以下の記事をご確認ください。
参考②
西暦を和暦へ変換することもできます。
※西暦から和暦を取得できます。
詳細は以下の記事をご確認ください。