Spell function in excel


In Microsoft Excel, you can't directly write a function like a traditional programming language. However, you can use VBA (Visual Basic for Applications) to create custom functions, like a "spell" function, which converts numbers into words.

Here's an example of how to write a VBA spell function that converts numbers to words in Excel:

Step-by-step guide to create the function:

  1. Open Excel.
  2. Press Alt + F11 to open the VBA editor.
  3. In the VBA editor, click Insert > Module.
  4. Paste the following code into the module:

 

Function SpellNumber(ByVal MyNumber)

    Dim Units As String

    Dim Cents As String

    Dim DecimalPlace As Integer

    Dim Count As Integer

    Dim Place(9) As String

    Dim Hundreds As String

    

    Place(2) = " Thousand "

    Place(3) = " Million "

    Place(4) = " Billion "

    Place(5) = " Trillion "


    ' Convert MyNumber to a string if it's not already.

    MyNumber = Trim(CStr(MyNumber))


    ' Find position of decimal point (if any).

    DecimalPlace = InStr(MyNumber, ".")


    ' Convert cents and set MyNumber to dollars 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 <> ""

        Hundreds = GetHundreds(Right(MyNumber, 3))

        If Hundreds <> "" Then Units = Hundreds & Place(Count) & Units

        If Len(MyNumber) > 3 Then

            MyNumber = Left(MyNumber, Len(MyNumber) - 3)

        Else

            MyNumber = ""

        End If

        Count = Count + 1

    Loop


    SpellNumber = Application.Trim(Units)

    

    ' Append cents if applicable.

    If Cents <> "" Then SpellNumber = SpellNumber & " and " & Cents & " Cents"

End Function


Private Function GetHundreds(ByVal MyNumber)

    Dim Result As String

    If Val(MyNumber) = 0 Then Exit Function

    MyNumber = Right("000" & MyNumber, 3)

    If Mid(MyNumber, 1, 1) <> "0" Then

        Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "

    End If

    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


Private Function GetTens(TensText)

    Dim Result As String

    Result = ""

    If Val(Left(TensText, 1)) = 1 Then

        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: Result = ""

        End Select

    Else

        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: Result = ""

        End Select

        Result = Result & GetDigit(Right(TensText, 1))

    End If

    GetTens = Result

End Function


Private 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


  • After pasting the code, press Ctrl + S to save the workbook as a macro-enabled workbook (with a .xlsm extension).

  • Close the VBA editor by pressing Alt + Q.

  • You can now use the SpellNumber function in your Excel worksheet, just like any other Excel function. For example, in a cell, you can type:

  • =SpellNumber(1000.56) One Thousand and Fifty-Six Cents

  • Comments