Skip to main content

Spell Number Function

 


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

  • @2
  • Comments

    1. Life has been filled with challenges ever since my husband left me and move on with another woman. Most times i had thought of ending it all. Things became worst when I lost my home, family and all to Hurricane Matthew and I became a refugee in my own country, Haiti. The only property I had left was an Internet-enabled phone in my pocket. One faithful day, i found one grandpa on the Internet, on Face-book. Someone from the US had testified of many great things that Grandpa omrodion had done for her and her family. I contacted him and the rest they say is history.Today i am happily married to a soldier I met in camp, and i am getting my happiness back again. I cannot keep this happiness to myself because i am not selfish. You too can contact dromorodion on E-mail: Dromorodion@gmail.com or call him on phone +2349072046883 whatsapp.

      ReplyDelete

    Post a Comment

    Popular posts from this blog

    Number convert to words

    Number convert to words  Virtual Learning Earning Channel Steps to Add the Macro Open Excel and press ALT + F11 to open the VBA Editor . Click Insert > Module . Copy and paste the code below into the module. Close the VBA Editor and return to Excel. Use the function in a cell like =NumberToWords(A1) . VBA Code for Digit-by-Digit Conversion Function NumberToWords(ByVal MyNumber As String) As String     Dim i As Integer     Dim Result As String     Dim Digit As String          ' Loop through each digit in the number     For i = 1 To Len(MyNumber)         Digit = Mid(MyNumber, i, 1)         Select Case Digit             Case "0": Result = Result & " Zero"             Case "1": Result = Result & " One"             Case "2": Result = Result & " Two"     ...

    Add Record & Save Record into another Microsoft Excel Sheet

    I want macro only select that records from Sno 1 to 10 which have code and ONLY Transfer values to anther sheet in excel ? Below is a VBA macro designed to copy only the values (not formulas) from rows with a valid Code (non-empty in the "Code" column) for Sno 1 to 10 from the source sheet and paste them into the target sheet. Sub CopyValidRecords()     Dim SourceSheet As Worksheet, TargetSheet As Worksheet     Dim LastRow As Long, TargetRow As Long     Dim i As Long     ' Set worksheets     Set SourceSheet = ThisWorkbook.Sheets("Source") ' Replace "Source" with your source sheet name     Set TargetSheet = ThisWorkbook.Sheets("Target") ' Replace "Target" with your target sheet name     ' Find the next empty row in the target sheet     TargetRow = TargetSheet.Cells(TargetSheet.Rows.Count, "A").End(xlUp).Row + 1     ' Loop through Sno 1 to 10 in the source sheet     For i = 1 To 10 ...