Spell a number (not currency)

PetrickM

Board Regular
Joined
Aug 31, 2007
Messages
106
Good morning! I am using Excel 2003 and have a column within my spreadsheet that, through a formula, inserts a decimal that has formatting to show as a percent. I would like to know who to convert that number to words. I saw spellnumber (and love it!) but don't know how to edit it so that it converts properly.

Any help you be greatly appreciated!

Thank you!
Marcy
 

Excel Facts

Wildcard in VLOOKUP
Use =VLOOKUP("Apple*" to find apple, Apple, or applesauce
Please "spell" out what you expect.
e.g.
A1=0.01
B1=SpellOut(A1)=Zero point zero one.

A1=21.43
B1=SpellOut(A1)=Twenty-One point Forty-Three
 
Upvote 0
Cell W2 has the formula "=IF(U2="Bob's Crab House",0.95,0.9)" If U2="Bob's Crab House", then W2 returns .95, with formatting becomes 95%. I would like a formula in V2 that, when W2 returns 95%, says "Ninety-five"

Thank you!
Marcy
 
Upvote 0
If you are checking for 0.95 then no spell routine is needed.

If you do use a spell routine, then multiple by 100.
V2 =If(w2=0.95,SpellNumber(w2*100),"whatever")
 
Upvote 0
The percentage can be anything, not just .95. It will only be .95 if the value in the referenced cell is that specified. Otherwise, I enter the percent. Yes, it is correct to assume that the value will never exceed 100. I could write an extremely long formula ex."=if(W2=.01,"One",if(W2=.02,"Two", etc. but it would be much more helpful if I could use something like spellnumber, which I use often, but don't know how to edit properly to meet these criteria.

Thank you!
Marcy
 
Upvote 0
I modified one of routines posted on this web site. It might work for you. You can set the 2nd parameter to True if you want currency. If you enter a number with more than 2 decimal places, it will trunctate the result.

Put this in a Module. Use it as a UDF. e.g. =SpellNumber(A1*100)
Code:
' Main Function *
'****************

'=SpellNumber(95)
Sub test()
  MsgBox SpellNumber(95)
End Sub

Function SpellNumber(MyNumber, Optional bMoney = False)
  Dim Dollars, Cents, Temp
  Dim DecimalPlace, Count
  Dim iNumber
  
  ReDim Place(9) As String
  Place(2) = " Thousand "
  Place(3) = " Million "
  Place(4) = " Billion "
  Place(5) = " Trillion "
  
  iNumber = MyNumber
  ' 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
  
  If bMoney = True Then
    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
    Exit Function
  End If
  
  If iNumber <> CInt(iNumber) Then
    SpellNumber = Dollars & " point " & Cents
    Exit Function
  End If
  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
 
Upvote 0
Brilliant! I have inserted it and it is grand! One question - when I insert the number, "90", it returns "Ninety", which is perfect. For the formula, the formula returns ".95" which is then automatically formatted to show "95". The code returns this as "point Ninety-five." How do I edit the code to remove the "point"?

As you can tell, code is all Greek to me. Anytime I have tried to edit something I have made a mess!

Thank you!
Marcy
 
Upvote 0

Forum statistics

Threads
1,224,824
Messages
6,181,186
Members
453,020
Latest member
Mohamed Magdi Tawfiq Emam

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top