How to Convert Numbers to Words in Excel (SpellNumber)

By WordsForNumbers Editorial Team · Updated 2026-09-30 · 26 min read

How to Convert Numbers to Words in Excel (SpellNumber)
Quick answer

Excel has no built-in number-to-words function. Use the SpellNumber VBA macro: press Alt+F11, insert a module, paste the SpellNumber code, then type =SpellNumber(A1). For Indian rupees, use a modified macro that outputs lakh/crore (code below).

Method 1: SpellNumber VBA macro (Microsoft's official code)

  1. Press Alt + F11 to open the Visual Basic Editor.
  2. Go to Insert → Module and paste Microsoft's SpellNumber function (search "Microsoft SpellNumber VBA" for the current code).
  3. Save the workbook as .xlsm (macro-enabled).
  4. In any cell, type =SpellNumber(125000) → "One Hundred Twenty Five Thousand".

Note: the stock SpellNumber uses the International system and US-style wording. For Pakistani/Indian rupee work, adapt it (Method 2) or convert your figures with our free tool and paste the results.

Method 2: Indian rupees version (lakh/crore)

Modify the macro's scale array from thousand/million/billion to thousand/lakh/crore/arab and adjust the digit grouping (first group of 3, then groups of 2). Search for "SpellNumber Indian rupees VBA" — several maintained versions exist on GitHub and Stack Overflow. Always test with 100000 → "One Lakh" and 10000000 → "One Crore" before trusting it on invoices.

Method 3: No macros — use an online converter

If macros are blocked by your office IT policy (common in banks), convert amounts with our tool's Bulk mode: paste a column of numbers, copy the words column, and paste into Excel. No code, no security warnings.

Google Sheets alternative

Google Sheets has no SpellNumber either. Use Extensions → Apps Script with a number-to-words script, or the bulk-convert-and-paste workflow above.

Making the output cheque-ready

Wrap the macro in a formula so the cell prints bank-style text: ="Rupees "&SpellNumber(A1)&" only" turns 125000 into "Rupees One Hundred Twenty Five Thousand only". Use =PROPER(SpellNumber(A1)) for sentence case. One catch: stock SpellNumber rounds or drops decimals, so split rupees and paise into two steps first with =INT(A1) for rupees and =ROUND((A1-INT(A1))*100,0) for paise, then convert each part. Always test the full pipeline on 100000 → "One Lakh" with an Indian version before running it across an invoice sheet.

Troubleshooting: when the macro won't run

  • #NAME? error — the module isn't saved in this workbook, or the function was renamed. Re-insert the module via Alt+F11 and save as .xlsm.
  • Macros disabled — go to File → Options → Trust Center and enable macros for the file, or get IT approval first.
  • Wrong output on large numbers — stock SpellNumber caps out; test with 1000000000 before trusting it on real data.
  • Excel Online or mobile — VBA doesn't run there at all. Use desktop Excel, or the bulk-converter paste workflow.
GoalFormula
Bank-style line="Rupees "&SpellNumber(A1)&" only"
Sentence case=PROPER(SpellNumber(A1))
Paise part=ROUND((A1-INT(A1))*100,0)

Google Sheets: a complete Apps Script function

In Google Sheets, open Extensions → Apps Script, paste the function below, save the project, and call it like any formula: =NUMWORDS(A1). It recalculates automatically like a normal formula, and the Indian scales (crore, lakh, thousand) are built in — no plugin needed. If your team works in Excel for the web instead, the same logic ports to Office Scripts (TypeScript) via the Automate tab.

function NUMWORDS(n) { const o=['','one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen']; const t=['','','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']; const two=x=>x<20?o[x]:t[x/10|0]+(x%10?'-'+o[x%10]:''); const three=x=>{const h=x/100|0,r=x%100;return (h?o[h]+' hundred'+(r?' ':''):'')+(r?two(r):'');}; if(!n) return 'zero'; let s='',v=Math.floor(Math.abs(n)); const c=v/10000000|0; if(c){s+=three(c)+' crore '; v%=10000000;} const l=v/100000|0; if(l){s+=two(l)+' lakh '; v%=100000;} const th=v/1000|0; if(th){s+=three(th)+' thousand '; v%=1000;} if(v) s+=three(v); return (n<0?'minus ':'')+s.trim(); }

Bulk conversion across a whole column

  1. Put your amounts in column A and the formula (for example ="Rupees "&SpellNumber(A1)&" only") in cell B1.
  2. Double-click the fill handle (the small square at B1's corner) to copy the formula down the entire column.
  3. Select column B, copy it, then Paste Special → Values to freeze the words as plain text before sharing the file.
  4. For recurring reports, save the workbook as a .xlsm template so the macro travels with the file — or skip macros entirely and convert in bulk with our amount converter.

Indian digit grouping with a custom number format

Excel's default comma style uses International grouping (1,000,000). For Indian grouping (10,00,000), select the cells, press Ctrl+1, choose Custom, and enter #,##,##0 — or #,##,##0.00 when paise matter. The display changes to lakh/crore style while the underlying values stay numeric, so your SpellNumber formulas keep working and the sheet matches how Indian banks print amounts.

Infographic: convert numbers to words in Excel in 3 steps — open the VBA editor, paste the SpellNumber code, use =SpellNumber(A1)
Infographic: convert numbers to words in Excel in 3 steps — open the VBA editor, paste the SpellNumber code, use =SpellNumber(A1)

Frequently asked questions

Is there a formula to convert numbers to words in Excel?
No built-in formula exists. You need the SpellNumber VBA macro, an add-in, or an external converter.
How do I get "lakh" in Excel SpellNumber?
Use a modified Indian-rupees version of the macro that replaces million/billion scales with lakh/crore/arab and regroups digits.
Why does my company block macros?
VBA macros can carry malware, so many organizations disable them. The bulk online converter workflow avoids macros entirely.
Can Google Sheets convert numbers to words?
Not natively — use an Apps Script function or convert externally and paste the results in.
Why do I get #NAME? when I type =SpellNumber(A1)?
Excel can't find the function — the VBA module isn't in this workbook or was renamed. Re-insert the module via Alt+F11 and save the file as .xlsm.
How do I add "Rupees" and "only" around the result?
Concatenate: ="Rupees "&SpellNumber(A1)&" only".
Does SpellNumber handle paise or decimals?
No — it rounds or drops them. Split the amount with =INT(A1) for rupees and =ROUND((A1-INT(A1))*100,0) for paise, then convert each part.
Does the macro work in Excel Online?
No. VBA macros only run in desktop Excel for Windows/Mac. Online and mobile users should use the bulk-converter paste workflow instead.
How do I make SpellNumber available in every workbook?
Store the module in your Personal Macro Workbook (PERSONAL.XLSB): record any dummy macro with 'Personal Macro Workbook' selected, then paste SpellNumber into its module via Alt+F11. It loads with every Excel session — call =PERSONAL.XLSB!SpellNumber(A1).
Does Excel for Mac support the SpellNumber macro?
Yes — desktop Excel for Mac runs VBA, so the same Alt+F11 (or Tools → Macro) workflow applies. It still won't work in Excel for the web or the mobile apps.
What is Office Scripts, and can it replace VBA?
Office Scripts is Excel's modern TypeScript-based automation that runs in Excel for the web, where VBA can't run. You can write a number-to-words script in the Automate tab and run it on OneDrive or SharePoint workbooks — the best option if your team lives in the browser.

Related

← All guides