How to Convert Numbers to Words in Excel (SpellNumber)
By WordsForNumbers Editorial Team · Updated 2026-09-30 · 26 min read

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)
- Press Alt + F11 to open the Visual Basic Editor.
- Go to Insert → Module and paste Microsoft's SpellNumber function (search "Microsoft SpellNumber VBA" for the current code).
- Save the workbook as .xlsm (macro-enabled).
- 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.
| Goal | Formula |
|---|---|
| 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
- Put your amounts in column A and the formula (for example ="Rupees "&SpellNumber(A1)&" only") in cell B1.
- Double-click the fill handle (the small square at B1's corner) to copy the formula down the entire column.
- Select column B, copy it, then Paste Special → Values to freeze the words as plain text before sharing the file.
- 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.
