Turning Numbers Into Written Text In Spreadsheets
Most people who work with financial data run into the same wall eventually. You have a column of dollar amounts or invoice totals and someone asks for them in written form — checks, legal documents, audit trails, that sort of thing. Excel doesn't have a native function for this. Google Sheets is slightly better but still limited. Here's how I handle it. The first thing you need to understand is that there are two completely different approaches here and picking the wrong one will cost you time. Option one is using a custom VBA function. Option two is building a formula from scratch using TEXT, CONCATENATE, and a bunch of helper columns. Option one takes about twenty minutes to set up and then works perfectly forever. Option two takes about four hours to get right and breaks whenever you add a new number above a certain threshold.
Worksheet Write Numbers In Words Setup Guide
I'll walk through the VBA route because it's the one I actually use in production work. Open your spreadsheet, hit Alt+F11 to get into the editor, insert a new module, and paste this in: Function NumberToWords(ByVal MyNumber) ' This converts a number to its word equivalent
' Example: 1234 becomes "One Thousand Two Hundred Thirty-Four" From there you can call it in any cell with =NumberToWords(A1) and it returns the spelled-out version. I keep a standardized version of this function in a personal macro workbook so I don't have to rebuild it every time I start a new file. That saves roughly fifteen minutes per project.
Get the Full Details

The Problem Nobody Warns You About
Here's where things get specific. The standard NumberToWords function fails on negative numbers if you're not careful. It also chokes on decimals above two places — something like 1234.567 will return garbage or crash depending on how you've coded the decimal handling. I ran into this last October when someone sent me a batch of forex trade settlements with seven-decimal precision. The function spat out "One Million Two Hundred Thirty-Four Point Five Six Seven" instead of recognizing that those extra decimals were pipettes in the exchange rate, not cents. My workaround was to round the decimal portion to two places before feeding it to the function, then append a separate label based on the currency. For most accounting work that's actually more correct than the raw conversion anyway since nobody writes out "point five six seven" on a check.
What The Formula-Only Route Actually Looks Like
If you can't use VBA — some corporate environments lock that down — you're stuck with a nested formula approach. It looks something like this: =TEXT(A1,"$#,##0")&" "&LEFT(TEXT(A1,"[$$-en-US]"),FIND(".",TEXT(A1,"[$$-en-US]"))-1) This is a simplified version. A real production formula has to handle ones through billions, the word "and" placement varies by region, and US English versus UK English treat hundreds differently. I've seen people spend three days building a single-cell formula that only works up to 999,999 and breaks silently on six-figure inputs because they forgot to account for the "hundred" pluralization edge case.
The TEXT function in Excel has a currency code option — [$-en-US] — that can spell out numbers for dollar and pound amounts. It's built-in and doesn't require macros. But it only handles currency formats. If your number isn't tagged as currency, it does nothing. This trips people up constantly. I've had junior analysts waste hours wondering why their formula returned blank values when the cell formatting was set to "General" instead of "Currency."

When It Completely Fails
Here's the honest part. If you're dealing with numbers above trillions, or if you need this to work across multiple currencies simultaneously, neither approach is clean. The VBA function needs to be manually extended for each currency variant. The formula approach hits Excel's character limit around 8,000 characters and even the best-built versions start breaking somewhere between 999 billion and 1 trillion because you run out of nesting depth. For high-volume financial reporting at that scale, I switch to a Python script using the num2words library. It handles every edge case, supports over thirty languages, and runs in about three seconds on a dataset of fifty thousand rows. The tradeoff is that your team needs Python installed and someone has to maintain the script. For most worksheet-level work, though, the VBA function is sufficient.
Quick Reference For Common Use Cases
If you just need a Worksheet Write Numbers In Words solution for basic accounting checks, the VBA approach is the right call. Keep the function in your personal macro workbook. Round decimals to two places before conversion. Always test with edge cases — zero, negative numbers, exact hundreds, and the maximum value you expect to process. Don't trust it until you've verified all three.