본문 바로가기

엑셀로 풀어가는 세상

레이의 VBA정복기7- 숫자를 영어로 변환하는 방법

지난 글 '레이의 VBA정복기6- 숫자를 한글 또는 한자로 변환하는 법'에서 엑셀 함수 'NUMBERSTRING'를 이용하면 될 것을 굳이 VBA코드로 작업한 이유로 '다음에 올릴 예정인 포스트와 연관되어 있습니다'라고 밝혔습니다.

인터넷 검색을 통해서 알아본 결과, 숫자를 한글 또는 한자로 변환하는 방법을 많이 얻을 수 있습니다(이곳에 가시면 NUMBERSTRING함수 이외에 다양한 방법이 있음). 그러나 숫자를 영어로 변환하는 방법에 대한 검색 결과는 VBA코드를 이용하는 방법외에는 없었습니다.
이런 이유로 '레이의 VBA정복기6'를 올리게 된 것 입니다.

좌우지간, 엑셀에서 숫자를 영어로 전환하는 VBA코드을 아래와 같이 올립니다.
아래의 코드를 '레이의 VBA정복기6- 숫자를 한글 또는 한자로 변환하는 법'에 설명된 방법대로 설정하시면 됩니다.

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
 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


반응형