Home / Number to words in Excel
Excel · Google Sheets

Number to words in Excel — a formula you can paste.

Two ways to spell numbers inside a spreadsheet: a modern LAMBDA that needs no macros, or the classic SpellNumber VBA function. Pick the one your Excel supports.

Option 1 — LAMBDA (Excel 365 / 2021, no macros)

Go to Formulas → Name Manager → New, name it SpellNumber, and paste this in "Refers to". Then use =SpellNumber(A1) in any cell.

=LAMBDA(num,
  LET(
    n, INT(num),
    ones, {"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine",
           "Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen",
           "Seventeen","Eighteen","Nineteen"},
    tens, {"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"},
    under100, LAMBDA(x, IF(x<20, INDEX(ones,x+1),
                 TRIM(INDEX(tens,INT(x/10)+1)&" "&INDEX(ones,MOD(x,10)+1)))),
    under1000, LAMBDA(x, TRIM(
                 IF(x>=100, INDEX(ones,INT(x/100)+1)&" Hundred ","")&
                 under100(MOD(x,100)))),
    TRIM(
      IF(INT(n/10000000)>0, under100(INT(n/10000000))&" Crore ","")&
      IF(INT(MOD(n,10000000)/100000)>0, under100(INT(MOD(n,10000000)/100000))&" Lakh ","")&
      IF(INT(MOD(n,100000)/1000)>0, under100(INT(MOD(n,100000)/1000))&" Thousand ","")&
      under1000(MOD(n,1000))
    )
  )
)
This is the Indian (lakh/crore) version. For the international million/billion grouping, replace the crore/lakh lines with thousand/million/billion steps — the structure is identical, only the divisors change.

Option 2 — VBA SpellNumber (any desktop Excel)

Press Alt + F11, choose Insert → Module, paste the code, save as a macro-enabled workbook (.xlsm), then use =SpellNumber(A1).

Function SpellNumber(ByVal n As Double) As String
    Dim ones As Variant, tens As Variant
    ones = Array("", "One", "Two", "Three", "Four", "Five", "Six", _
        "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", _
        "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")
    tens = Array("", "", "Twenty", "Thirty", "Forty", "Fifty", _
        "Sixty", "Seventy", "Eighty", "Ninety")

    Dim num As Long: num = Int(n)
    Dim res As String

    res = res & SpellGroup(Int(num / 10000000), ones, tens, "Crore ")
    num = num Mod 10000000
    res = res & SpellGroup(Int(num / 100000), ones, tens, "Lakh ")
    num = num Mod 100000
    res = res & SpellGroup(Int(num / 1000), ones, tens, "Thousand ")
    num = num Mod 1000
    res = res & SpellGroup(num, ones, tens, "")

    SpellNumber = Application.Trim(res)
End Function

Private Function SpellGroup(ByVal x As Long, ones As Variant, _
        tens As Variant, suffix As String) As String
    If x = 0 Then Exit Function
    Dim s As String
    If x >= 100 Then
        s = ones(Int(x / 100)) & " Hundred "
        x = x Mod 100
    End If
    If x >= 20 Then
        s = s & tens(Int(x / 10)) & " "
        x = x Mod 10
    End If
    If x > 0 Then s = s & ones(x) & " "
    SpellGroup = s & suffix
End Function

Google Sheets

Sheets has no LAMBDA Name Manager, so use Apps Script: Extensions → Apps Script, paste a SPELLNUMBER(n) function with the same logic as the VBA above, save, then call =SPELLNUMBER(A1). The full ready-to-paste script is on the Google Sheets page.

Need it for a whole column without a formula? The bulk converter takes a pasted column or CSV and hands back the words — no macros, no setup.