ExcelTool.io

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.

Text

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], ...)
ArgumentRequiredWhat it does
text1RequiredThe 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, ...OptionalUp 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

Related Tools