How to Concatenate Cells in Excel
The & operator concatenates cells in every Excel version but needs a manual delimiter typed between each reference; TEXTJOIN (Excel 2019+) adds a delimiter and range support in one call and can skip blanks automatically, which is why it's replaced both & chains and the old CONCATENATE function for most joining tasks.
Quick answer: For a handful of cells with a delimiter, use =TEXTJOIN(", ", TRUE, A2, B2, C2) — the TRUE skips any blank cells so you don't get doubled commas. For a whole range without a delimiter, =CONCAT(A2:A10) is shorter than a long & chain. The old CONCATENATE function still works but takes no ranges and has no delimiter argument — there's no reason to use it in new formulas.
How does the & operator concatenate cells?
The & operator glues text together one piece at a time, works in every Excel version ever released, but requires you to type the delimiter manually between every pair of cells.
=A2&" "&B2
' "John" & " " & "Smith" → "John Smith"
=A2&", "&B2&", "&C2
' Three cells joined with ", " between each —
' notice the delimiter is typed out three separate times
This gets unwieldy fast past 3-4 cells, and if a middle cell is blank, you get a doubled delimiter like "Smith,,Sales" with no way to skip it without wrapping every piece in an IF().
How does TEXTJOIN work, and why does ignore_empty matter?
TEXTJOIN takes a delimiter once, an ignore_empty flag, and then one or more cells or ranges — the delimiter is inserted automatically between every non-empty piece, and ignore_empty controls whether blanks get skipped.
=TEXTJOIN(delimiter, ignore_empty, range1, [range2], ...)
=TEXTJOIN(", ", TRUE, A2:A5)
' A2:A5 = "red", "green", (blank), "blue"
' Result: "red, green, blue" — blank skipped, no double comma
=TEXTJOIN(", ", FALSE, A2:A5)
' Result: "red, green, , blue" — blank kept as an empty slot
=TEXTJOIN(" - ", TRUE, B2, C2, D2)
' Joins individual cells, not just a contiguous range
Set ignore_empty to FALSE only when position matters — for example rebuilding a fixed-format string where an empty field still needs to occupy its slot.
How is CONCAT different from CONCATENATE and TEXTJOIN?
CONCAT (Excel 2019+) replaced CONCATENATE by accepting ranges directly, but unlike TEXTJOIN it has no delimiter argument and doesn't skip blanks — it just glues everything together with nothing in between.
=CONCAT(A2:A5)
' "red" "green" "" "blue" → "redgreenblue"
' No delimiter, blanks are not skipped (they just add nothing)
=CONCATENATE(A2,A3,A4,A5)
' Legacy function — same result as CONCAT here, but
' cannot take a range argument (A2:A5); every cell must
' be listed individually. Still works, kept for compatibility,
' not recommended for new formulas.
CONCAT is really only useful when you want zero separator between pieces and don't need to worry about blanks — for anything with a delimiter, TEXTJOIN is the better tool.
Which function should I use?
| Function | Delimiter? | Takes ranges? | Excel version |
|---|---|---|---|
& |
Manual, typed each time | No — cell by cell | All versions |
| CONCATENATE | Manual, typed each time | No — cell by cell | All versions (legacy) |
| CONCAT | None | Yes | 2019+ |
| TEXTJOIN | One argument, applied between all pieces | Yes, plus ignore_empty | 2019+ |
See TEXTSPLIT and TEXTJOIN for TEXTJOIN paired with its inverse operation, and Excel text functions for cleaning values before joining them.
What are common mistakes when concatenating cells?
- Forgetting the delimiter entirely:
=A2&B2glues "John" and "Smith" into "JohnSmith" with no space - Doubled delimiters from blank cells: the classic symptom of using CONCAT or
&without an ignore-blanks mechanism — switch to TEXTJOIN with ignore_empty=TRUE - Joining numbers without formatting first: concatenating a date cell directly returns its serial number (e.g. 45678), not the readable date — wrap it in
TEXT(A2,"mm/dd/yyyy")first - Assuming CONCAT has a delimiter argument: it doesn't — that's specifically what separates it from TEXTJOIN
Pro Tip: TEXTJOIN accepts multiple ranges in one call, not just one: =TEXTJOIN(", ", TRUE, A2:A10, C2:C10) joins both ranges' non-blank values into a single delimited list, skipping any blanks in either range — useful for combining two differently-shaped lists without a helper column.