Excel CONCATENATE Function
CONCATENATE joins multiple text values into one string. It's replaced by TEXTJOIN and CONCAT in Excel 365 and 2021.
CONCATENATE joins two or more text values into a single string, returning the combined text as one result. It has been replaced by TEXTJOIN and CONCAT in Excel 365 and Excel 2021 — both handle ranges and delimiters that CONCATENATE can't. CONCATENATE still works in every current version for backward compatibility, but Microsoft's own documentation says it may not be available in future releases.
Available in: all versions of Excel, including Excel 365. Superseded by: TEXTJOIN and CONCAT, available in Excel 365 and Excel 2021.
Syntax
=CONCATENATE(text1, [text2], ...)
| Parameter | Required | Description |
|---|---|---|
text1 | Yes | The first text value to join. Can be a literal string, a cell reference, or a number. |
text2, ... | No | Additional values to join, in order. Excel 365 allows up to 255 arguments total. |
Every argument is joined in the exact order you list it, with nothing inserted between them. If you want a space, comma, or dash between values, you have to type it as its own argument.
Basic Example
You have employee first names in column A and last names in column B, and you need a single "full name" column for a mail merge.
=CONCATENATE(A2, " ", B2)
// A2 = first name, e.g. "Priya"
// " " = a literal space, typed as its own argument
// B2 = last name, e.g. "Malhotra"
This returns "Priya Malhotra". Drop the middle argument and you'd get "PriyaMalhotra" instead, CONCATENATE never adds spacing on its own.
How CONCATENATE Works
Every delimiter needs its own argument
CONCATENATE has no built-in way to insert a separator between values. Want commas between five items? You'll write four extra "," arguments by hand. This is the core limitation TEXTJOIN was built to fix — it takes a delimiter once and applies it automatically between every value.
Numbers convert to text, but formatting doesn't carry over
When you feed CONCATENATE a number, it converts the underlying value to text, not the formatted display. Reference a cell showing "$1,250.00" and CONCATENATE returns "1250", stripping the currency symbol and comma. To preserve formatting, wrap the reference in TEXT() first: =CONCATENATE("Total: ", TEXT(C2, "$#,##0.00")).
It doesn't accept ranges
Type =CONCATENATE(A2:A5) and you won't get an error. You'll just get the value from A2, silently ignoring A3 through A5. CONCATENATE requires each cell listed as a separate argument. This is one of the main reasons it's been superseded: TEXTJOIN and CONCAT both accept a range directly.
Common Use Cases
Combine a name with a title or suffix
An email list needs each contact formatted as "Dr. Priya Malhotra" instead of separate title, first name, and last name columns.
=CONCATENATE(A2, " ", B2, " ", C2)
// A2 = title, e.g. "Dr."
// B2 = first name
// C2 = last name
Build a formatted label that includes a number
A report needs a summary label like "Invoice #1023 - $450.00" pulled from three separate cells, with the dollar amount keeping its currency formatting.
=CONCATENATE("Invoice #", A2, " - ", TEXT(B2, "$#,##0.00"))
// A2 = invoice number
// TEXT(B2, ...) = preserves the currency formatting CONCATENATE would otherwise strip
Combine an address from separate columns
A mailing list stores street, city, state, and zip in separate columns, and a single-line address is needed for a merge.
=CONCATENATE(A2, ", ", B2, ", ", C2, " ", D2)
// A2 = street address
// B2 = city
// C2 = state
// D2 = zip code
Handling Errors
CONCATENATE rarely fails outright, but a few situations will break it.
Common causes of #VALUE!:
- One of the referenced cells contains an error value like
#N/Aor#REF! - You've tried to feed it an array without entering it as an array formula in older Excel builds
Common causes of #NAME?:
- The function name is misspelled, or a required closing parenthesis is missing
- You're working in a file format that doesn't recognize the function (rare, but possible in very old .xls files)
=IFERROR(CONCATENATE(A2, " ", B2), "Missing data")
If a source cell might be blank, CONCATENATE won't error, it just inserts nothing. Test with IF(A2="", "N/A", CONCATENATE(A2, " ", B2)) if you need to flag missing values instead of silently skipping them.
Notes & Gotchas
Why does CONCATENATE only return one value when I select a whole range?
CONCATENATE doesn't process ranges as a group. It only reads the first cell in whatever range you point it to. If you type =CONCATENATE(A2:A10), you'll get just the contents of A2, with no warning that the rest was ignored. Use TEXTJOIN or CONCAT if you need to combine an entire range in one formula.
Does CONCATENATE add spaces or punctuation automatically?
No. Every space, comma, dash, or line break has to be typed as its own literal argument. This is the single biggest source of "PriyaMalhotra" instead of "Priya Malhotra" errors: the formula worked exactly as written, it just didn't include a separator.
Will CONCATENATE be removed from Excel?
Microsoft keeps CONCATENATE for compatibility with older workbooks, but its own documentation flags it as legacy and notes it "may not be available in future versions of Excel." It still works fine today. New formulas should use TEXTJOIN or CONCAT instead, since neither carries that risk.
CONCATENATE treats a blank cell as an empty string, not zero and not an error. Joining "Priya", " ", and a blank last-name cell returns "Priya " with a trailing space, easy to miss, and it can throw off exact-match comparisons downstream. If you're comparing concatenated results with = or using them as lookup values, trim the result with TRIM() first to avoid mismatches that look identical but aren't.
Use TEXTJOIN or CONCAT Instead
For any new formula, use TEXTJOIN or CONCAT rather than CONCATENATE. Both accept full ranges directly, and TEXTJOIN adds a delimiter automatically instead of forcing you to type it between every argument.
// CONCATENATE = verbose, no range support
=CONCATENATE(A2, ", ", B2, ", ", C2)
// TEXTJOIN = same result, handles ranges and ignores blanks
=TEXTJOIN(", ", TRUE, A2:C2)
TEXTJOIN's second argument controls whether blank cells are skipped, set it to TRUE and empty cells won't leave stray double commas in the output. CONCAT is the simpler choice when you just need to join a range with no delimiter at all: =CONCAT(A2:C2).
Related Functions
| Function | Use this when... |
|---|---|
TEXTJOIN | You need a delimiter between values and want to combine a full range in one argument. |
TEXT | You need to preserve number formatting (currency, dates, percentages) before joining it into a string. |
Related Functions
Excel FIND Function
FIND locates the position of one text string inside another, character by character. It's case-sensitive and doesn't support wildcards, which trips up a lot of people who reach for it expecting SEARCH-like flexibility.
Excel SEARCH Function
SEARCH locates a substring inside a longer string and returns its starting position as a number. It's the function to reach for when you need a case-insensitive text match with wildcard support.
Excel AND Function
AND is the logical glue behind most multi-condition IF formulas. Learn how it evaluates conditions, where it silently breaks, and when to pair it with OR instead.
Excel AVERAGEIF Function
AVERAGEIF calculates an average based on a single condition, no helper columns needed. Here's how the syntax works, where it silently gives wrong answers, and when to switch to AVERAGEIFS.