CONCATENATE Generator
Join text from several cells, with your own spaces or punctuation between them.
CONCATENATE
Join text from several cells, with your own spaces or punctuation between them.
The first cell or value to join. Literal text needs quotes, for example "Mr. ".
CONCATENATE never adds spaces on its own, so put the separator here in quotes, for example " " or ", ".
The next cell or value to join. Add more arguments inside the brackets if you need them.
=CONCATENATE(A2, " ", B2)Worked Example
A2 contains Ada and B2 contains Lovelace, and you want a full name in column C.
=CONCATENATE(A2, " ", B2)Returns: Returns the text Ada Lovelace, with the single space supplied by the quoted middle argument.
Checks Before You Paste
- •In Excel, CONCATENATE takes arguments one at a time, not ranges: =CONCATENATE(A2:A10) never joins the column. It returns only the value on the formula's own row, or spills one unchanged value per row. Use CONCAT(A2:A10) or TEXTJOIN(", ", TRUE, A2:A10) for a whole range.
- •CONCATENATE inserts nothing between items, so every space, comma, or dash has to be its own quoted argument, for example =CONCATENATE(A2, ", ", B2).
- •Numbers and dates arrive stripped of their formatting: a date joins as its serial number, so 5 August 2026 becomes 46239. Wrap it in TEXT first, for example =CONCATENATE(A2, " - ", TEXT(B2, "mm/dd/yyyy")).
How CONCATENATE works
Availability: CONCATENATE works in every version of Excel still in circulation (2007 through Microsoft 365), in Excel for Mac, and in Google Sheets. Microsoft classes it as a compatibility function replaced by CONCAT in Excel 2019 and later, but it has not been removed and existing formulas keep calculating. TEXTJOIN, the version with a delimiter argument, arrived alongside CONCAT in Excel 2019 and is also in Google Sheets.
CONCATENATE joins values end to end and returns one text string. Each thing you want joined is a separate argument, up to 255 of them, and Excel puts nothing at all between them: =CONCATENATE(A2, B2) on Ada and Lovelace gives AdaLovelace, not Ada Lovelace. Every space, comma, dash and slash you want in the result has to be supplied as its own quoted argument. This is the single behaviour that surprises people most, and it is deliberate - the function has no opinion about separators.
The ampersand operator does exactly the same job with less typing: =A2 & " " & B2 is identical in result and speed to =CONCATENATE(A2, " ", B2). Where the two differ is in a formula's readability once it gets long. A row of ampersands and quote marks is hard to scan; a named function with commas between the pieces is a little easier to audit. Choose whichever your team reads faster, because Excel does not care.
The real limitation is ranges. =CONCATENATE(A2:A10) does not join a column. In older Excel it uses implicit intersection and returns only the value on the formula's own row, or #VALUE! if the formula sits outside the range's rows; in Microsoft 365 it spills nine unchanged values down the sheet. If you want a whole range joined, CONCAT(A2:A10) accepts ranges, and TEXTJOIN(", ", TRUE, A2:A10) accepts ranges, inserts your delimiter between values, and can skip the blanks.
Values arrive stripped of their display formatting, because concatenation reads the underlying value rather than the number format applied to the cell. A cell showing 15% joins as 0.15, a cell showing $1,250.00 joins as 1250, and a date joins as its serial number - 1 March 2026 becomes 46082. Wrap those arguments in TEXT with an explicit format code to keep the formatting you can see on screen.
Syntax
=CONCATENATE(text1, [text2], [text3], ...)| Argument | Required | What it does |
|---|---|---|
text1 | Required | The first item to join: a cell reference, a number, or literal text in double quotes. A single argument is legal and simply returns that value as text. |
text2, text3, ... | Optional | Up to 254 further items, joined in the order you list them. Separators are ordinary arguments, so " " or ", " goes in as its own item. Excel refuses more than 255 arguments in total, and the whole formula is capped at 8,192 characters. |
More worked examples
A2 holds 12 Bridge Road, B2 holds Leeds and C2 holds LS1 4AP, and you want one address line for a mail merge.
=CONCATENATE(A2, ", ", B2, " ", C2)Returns: 12 Bridge Road, Leeds LS1 4AP
Two different separators, each supplied as its own quoted argument: a comma-space after the street and a plain space before the postcode.
B2 holds the number 1250.5, formatted on screen as $1,250.50, and you want it inside a sentence.
=CONCATENATE("Balance due: ", TEXT(B2, "$#,##0.00"))Returns: Balance due: $1,250.50
Without the TEXT wrapper the same formula returns Balance due: 1250.5, because concatenation reads the stored value and ignores the cell's number format.
A2 holds a contact name and B2 holds their job title, and you want both on two lines inside one cell.
=CONCATENATE(A2, CHAR(10), B2)Returns: The name on the first line and the title on the second - but only after you switch Wrap Text on for that cell.
CHAR(10) is the line-feed character. Until Wrap Text is enabled the cell renders it as a small box or ignores it entirely, and the row height may need adjusting too. On Mac Excel, CHAR(13) sometimes behaves better in older files.
Common mistakes
- Passing a range instead of individual arguments
- =CONCATENATE(A2:A10) looks like it should join the column but does not. Pre-2021 Excel applies implicit intersection and returns a single value from the formula's own row, or #VALUE! when there is no matching row; Microsoft 365 spills the range unchanged. Use =CONCAT(A2:A10) (Excel 2019 and later) or =TEXTJOIN(", ", TRUE, A2:A10) when a range is what you actually have.
- Dates come out as five-digit numbers
- =CONCATENATE("Due ", A2) with a date in A2 returns Due 46082, because Excel stores dates as serial numbers. Format the argument explicitly: =CONCATENATE("Due ", TEXT(A2, "dd/mm/yyyy")) returns Due 01/03/2026.
- Currency, percentages and leading zeros lose their formatting
- The same problem hits any formatted number. A cell displaying 7.5% joins as 0.075, and a product code shown as 00421 through a custom format joins as 421. TEXT(A2, "0.0%") and TEXT(A2, "00000") restore them.
- The result is text, so it stops behaving like a number
- Even =CONCATENATE(A2) on a numeric cell returns text. The result left-aligns, is skipped by SUM and AVERAGE, and sorts alphabetically so 10 lands before 9. If you need a number back out, wrap it: =VALUE(CONCATENATE(A2, B2)).
- Trailing separators when a cell is empty
- =CONCATENATE(A2, ", ", B2) on a row where B2 is blank returns Leeds, with a stranded comma and space. CONCATENATE has no skip-empty option; TEXTJOIN(", ", TRUE, A2, B2) does, and its second argument TRUE drops the empty values along with their delimiter.
Frequently Asked Questions
& and CONCATENATE are equivalent in every practical way - same result, same performance, both take arguments one at a time. CONCAT, added in Excel 2019, is the one genuine upgrade: it accepts ranges, so =CONCAT(A2:D2) joins four cells that CONCATENATE would need listed individually. None of the three insert a separator; only TEXTJOIN does that.
No. Microsoft lists it under compatibility functions and recommends CONCAT for new work, but CONCATENATE still calculates in Microsoft 365 and there has been no announced removal date. Workbooks built on it are safe; the reason to move to CONCAT or TEXTJOIN is capability, not deprecation. Going the other way matters more - a file using TEXTJOIN opened in Excel 2016 shows #NAME?.
Excel stores 1 March 2026 as the number 46082 and only draws it as a date because of the cell's number format. Concatenation works on the stored value, so the format is lost. Wrap the date argument in TEXT with the format you want, for example TEXT(A2, "d mmm yyyy").
Join CHAR(10) as one of the arguments, then turn on Wrap Text for the result cell from the Home tab. Without Wrap Text the break is stored but not drawn, which is why the cell often looks unchanged. If you then need the single-line version back, =SUBSTITUTE(A2, CHAR(10), ", ") converts the breaks to commas.
Not in one call - 255 arguments is a hard limit, and the 8,192-character formula length usually bites first. Nesting CONCATENATE inside CONCATENATE gets around the argument cap but produces a formula nobody can maintain. For anything at that scale use TEXTJOIN with a range, which has no such limit on the number of cells.
Related Tools
TEXTJOIN Generator
Join a whole range with one delimiter and skip the blanks automatically.
TEXT Function Generator
Build the format code that keeps dates and currency readable inside a joined string.
Combine Columns
Merge two or more columns of an uploaded workbook without writing a formula at all.
TRIM Generator
Clean stray spaces out of the source cells before you join them.