← Functions
concatenatetextfunctionsbeginner

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], ...)
ParameterRequiredDescription
text1YesThe first text value to join. Can be a literal string, a cell reference, or a number.
text2, ...NoAdditional 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/A or #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

FunctionUse this when...
TEXTJOINYou need a delimiter between values and want to combine a full range in one argument.
TEXTYou need to preserve number formatting (currency, dates, percentages) before joining it into a string.