CONCAT

CONCAT joins text from multiple cells or ranges into one string. The modern replacement for CONCATENATE - same job, but CONCAT accepts ranges (CONCAT(A2:A6)) where CONCATENATE only accepts individual cells. For delimiter or skip-empty support, use TEXTJOIN.

TextBeginner
Purpose
Join two or more text values into a single string. Accepts ranges as well as individual cells.
Returns
A single text string
Syntax
=CONCAT(text1, [text2], ...)
Excel version
Excel 2019 and Excel 365

How CONCAT works

CONCAT walks through every value you give it (cells, ranges, or literal strings) and sticks them end to end with nothing between them. No delimiter, no spacing, no skip-blanks switch. Whatever you pass in is what you get back, glued together in order.

The big upgrade over CONCATENATE is range support. CONCAT(A2:A6) joins five cells in one shot. CONCATENATE could not do this - you had to type out CONCATENATE(A2, A3, A4, A5, A6) cell by cell, which got painful fast. CONCAT also stays useful as a replacement for the & operator when you have more than two or three pieces to combine.

Because CONCAT has no built-in delimiter, you supply spaces, commas, or punctuation by typing them as literal strings between the references. =CONCAT(A2, " ", B2) puts a space between first and last name. =CONCAT(A2, ", ", B2) puts a comma-space. If you find yourself typing the same separator over and over, switch to TEXTJOIN.

= CONCAT(text1, [text2], ...)

Arguments

ArgumentTypeRequiredDescription
text1range or text✓ RequiredThe first value, cell, range, or literal string to join. A range like A2:A6 joins every cell in order with nothing between them. A single cell, a typed literal in quotes, or the output of another function all work.
text2, ...range or text✗ OptionalAdditional values to append. Up to 253 text arguments, total string length capped at 32,767 characters. Mix and match cells, ranges, and literal separators (" ", ", ", " - ") to control spacing.

Combine first name + last name into a full name

The classic CONCAT case. First name in column A, last name in column B, full name produced in column C. The trick is the literal " " between them - without it the two names slam together with no space.

This is a per-row formula. Write =CONCAT(A2, " ", B2) in C2, grab the fill handle, drag down through C9. Each row joins its own first and last name independently.

=CONCAT(A2, " ", B2)
  • A2 -> the first-name cell on this row (blue)
  • " " -> a literal space between the two names - if you forget it, the result is 'SarahChen'
  • B2 -> the last-name cell on this row (purple)
  • Per-row formula -> write it once in C2 and drag down through C9 to fill the column
  • Result -> "Sarah Chen" lands in C2, "James Miller" in C3, and so on down the column
C2
fx
=CONCAT(A2, " ", B2)
ABCDE
1FirstLastFull name
2SarahChenSarah Chen← formula
3JamesMillerJames Miller↓ drag down
4MariaSantosMaria Santos
5DavidBrownDavid Brown
6EmmaDavisEmma Davis
7AlexKimAlex Kim
8CarlosGomezCarlos Gomez
9JennyLiuJenny Liu
Formula entered in cell C2 and dragged down through C9. Each row joins its own first and last name with a single space between.
Eight pairs of first/last names roll up into eight full names in column C. The literal space between A2 and B2 is what keeps 'Sarah' and 'Chen' from concatenating into 'SarahChen'.
If your first-name column might be empty for some rows (single-name people, missing data), the space still gets inserted and you end up with a leading space like ' Chen'. Wrap the result in TRIM if that's a concern: =TRIM(CONCAT(A2, " ", B2)).

CONCAT a whole range in one shot

Here is what CONCAT does that CONCATENATE never could: accept a range as a single argument. =CONCAT(A2:E2) joins five cells in one shot, no commas between the references, no painful retyping.

Below, each row has address parts spread across columns A through E (street, city, state, zip, country). CONCAT(A2:E2) glues them together. The catch is that CONCAT has no delimiter, so you either pre-format your cells with trailing punctuation, or you accept the no-space result and clean it up later (or just use TEXTJOIN, which was built for this).

=CONCAT(A2:E2)
  • A2:E2 -> a five-cell range on this row - CONCAT joins them in order, left to right
  • No delimiter -> CONCAT does not insert anything between cells, so include trailing spaces or commas in the source data if you want them
  • CONCATENATE could not do this -> the older function rejected ranges - you had to write CONCATENATE(A2, B2, C2, D2, E2) one cell at a time
  • Per-row formula -> drag from F2 down through F4 to fill the column
  • Better fit for TEXTJOIN -> if you want clean commas and skip-blanks behavior, TEXTJOIN(", ", TRUE, A2:E2) is the cleaner choice
F2
fx
=CONCAT(A2:E2)
ABCDEFGH
1Street City, ST Zip, CountryMailing line
2742 Evergreen Terrace, Springfield, IL 62704, USA742 Evergreen Terrace, Springfield, IL 62704, USA← formula
31600 Pennsylvania Ave, Washington, DC 20500, USA1600 Pennsylvania Ave, Washington, DC 20500, USA↓ drag down
4221B Baker Street, London, NW1 6XE, UK221B Baker Street, London, NW1 6XE, UK
Three rows of address parts. Each source cell includes its own trailing punctuation (', ' or ' ') so the concatenated result reads as a proper address. CONCAT does not insert anything between cells on its own.

CONCAT vs the & operator: same result, different syntax

The & operator does exactly what CONCAT does for two or three cells, and a lot of veterans reach for & before CONCAT out of habit. Below, columns C and D produce identical full names from the same source - one uses CONCAT, the other uses &.

Pick whichever reads better in context. For two or three pieces, & is shorter and easier on the eyes: A2 & " " & B2. For five or more pieces, or when you have a whole range to join, CONCAT wins because you can pass A2:F2 in one go.

=CONCAT(A2, " ", B2)   vs   =A2 & " " & B2
  • CONCAT version -> =CONCAT(A2, " ", B2) - more verbose but reads like a function call
  • & version -> =A2 & " " & B2 - operator-style, shorter for two or three items
  • Identical output -> both produce 'Sarah Chen', byte-for-byte the same
  • When to use & -> two or three pieces, you want the formula to stay short
  • When to use CONCAT -> many pieces, or you want to pass a whole range like CONCAT(A2:F2)
C2
fx
=CONCAT(A2, " ", B2)
ABCDEF
1FirstLastCONCAT result& result
2SarahChenSarah ChenSarah Chen← formula
3JamesMillerJames MillerJames Miller↓ drag down
4MariaSantosMaria SantosMaria Santos
5DavidBrownDavid BrownDavid Brown
6EmmaDavisEmma DavisEmma Davis
7AlexKimAlex KimAlex Kim
8CarlosGomezCarlos GomezCarlos Gomez
9JennyLiuJenny LiuJenny Liu
Column C uses =CONCAT(A2, " ", B2). Column D uses =A2 & " " & B2. Same source cells, identical output - choose whichever syntax reads better for the situation.
Same eight rows of source data, two different syntaxes, byte-identical output. Both columns are correct. Reach for & when you have a few pieces; reach for CONCAT when you have many or a range.

Build standardized emails from first + last names

Onboarding 50 new hires and IT needs an email list in the firstname.lastname@acme.co format. The pattern is CONCAT + LOWER, in one nested formula, dragged down the column.

LOWER forces consistent casing even when the source data is messy - typing 'SARAH' or 'sarah' or 'Sarah' all collapse to 'sarah' on output. This kind of normalization in the formula itself is faster than asking HR to fix their export.

=CONCAT(LOWER(A2), ".", LOWER(B2), "@acme.co")
  • LOWER(A2) -> force lowercase on the first name, so 'Sarah' becomes 'sarah'
  • "." -> the literal dot separator between first and last name
  • LOWER(B2) -> force lowercase on the last name, even if HR's export is inconsistent
  • "@acme.co" -> the literal domain suffix
  • Per-row formula -> write it once in C2, drag down through C9 - each row produces its own email
  • Result -> "sarah.chen@acme.co" in C2, "james.miller@acme.co" in C3, and so on
C2
fx
=CONCAT(LOWER(A2), ".", LOWER(B2), "@acme.co")
ABCDE
1FirstLastEmail
2SarahChensarah.chen@acme.co← formula
3JAMESMillerjames.miller@acme.co↓ drag down
4MariaSANTOSmaria.santos@acme.co
5davidbrowndavid.brown@acme.co
6EmmaDavisemma.davis@acme.co
7AlexKimalex.kim@acme.co
8CarlosGomezcarlos.gomez@acme.co
9JennyLiujenny.liu@acme.co
10
Formula entered in cell C2 and dragged down through C9. Even though some source names are capitalized inconsistently (SARAH, james), LOWER normalizes every row to clean lowercase output.
Eight standardized emails generated from messy mixed-case source data. The two LOWER calls inside CONCAT do the case normalization without needing a helper column. The same pattern produces product codes, SKUs, and any other ID where consistent casing matters.
Same pattern works for product codes (=CONCAT(UPPER(A2), "-", TEXT(B2, "0000"))) or report titles (=CONCAT("Q", A2, " ", B2, " Report")). Nesting LOWER, UPPER, PROPER, or TEXT inside CONCAT is the workhorse pattern for building any standardized string.

When CONCAT gets ugly: switch to TEXTJOIN

CONCAT works for the simple cases. The moment you start typing the same delimiter five times in a row, you have outgrown it.

Below, the same five-name roster is joined into one comma-separated string two ways. The CONCAT version is awkward and easy to break. The TEXTJOIN version is one clean call. Same output, but TEXTJOIN also skips blanks automatically.

=CONCAT(A2, ", ", A3, ", ", A4, ", ", A5, ", ", A6)   vs   =TEXTJOIN(", ", TRUE, A2:A6)
  • CONCAT version -> five cell references and four literal delimiters, hand-typed - one typo and the formula breaks
  • TEXTJOIN version -> one delimiter, one range, one boolean - reads in a glance
  • Same output -> both produce 'Sarah, James, Maria, David, Alex'
  • TEXTJOIN bonus -> the TRUE argument skips blanks, so an empty cell in the middle doesn't create a double comma
  • Rule of thumb -> more than three cells with the same delimiter? Switch to TEXTJOIN
D2
fx
=TEXTJOIN(", ", TRUE, A2:A6)
ABCDEF
1NameCONCAT versionTEXTJOIN version
2SarahSarah, James, Maria, David, AlexSarah, James, Maria, David, Alex← formula
3James
4Maria
5David
6Alex
7
8
9
10
Column C shows the CONCAT version with hand-typed delimiters. Column D shows the cleaner TEXTJOIN equivalent. Both produce the same output - TEXTJOIN just gets there with less typing and a built-in skip-blanks switch.
Five names, two ways to roll them up. The CONCAT formula in C2 takes nine arguments and hand-typed commas. The TEXTJOIN formula in D2 takes three arguments and a range. Same string, much less typing - and TEXTJOIN keeps going gracefully if you add more rows.
Even worse: the CONCAT version is fragile. Add a name in row 7 and the CONCAT formula does not pick it up - you have to edit the formula. The TEXTJOIN version just grows its range to A2:A7 and keeps working. For any growing list, TEXTJOIN is the right choice.

Where people go wrong

  1. Forgetting the delimiter between cells

    CONCAT does not insert anything between values. =CONCAT(A2, B2) joins 'Sarah' and 'Chen' into 'SarahChen' with no space. Beginners run into this within the first ten seconds of using the function.

    Fix: Include the separator as a literal string between the references: =CONCAT(A2, " ", B2) for a space, =CONCAT(A2, ", ", B2) for a comma-space, =CONCAT(A2, "-", B2) for a hyphen. Whatever character you want in the result, you have to type.
  2. Reaching for CONCATENATE out of habit

    CONCATENATE still works in modern Excel for backward compatibility, and a lot of older spreadsheets and tutorials use it. But it does not accept ranges - CONCATENATE(A2:A6) errors out. Anything CONCATENATE does, CONCAT does better.

    Fix: Default to CONCAT (or & for two-three pieces, or TEXTJOIN when you need a delimiter and skip-blanks). Only stay on CONCATENATE if you have to support Excel 2016 or earlier where CONCAT does not exist.
  3. Long CONCAT chains that should be TEXTJOIN

    =CONCAT(A2, ", ", B2, ", ", C2, ", ", D2, ", ", E2) is technically valid but painful to read, painful to edit, and breaks the moment you add a sixth column. Every comma-space is hand-typed and easy to forget on one of the joins.

    Fix: Switch to =TEXTJOIN(", ", TRUE, A2:E2). One delimiter argument, one range, automatic skip-blanks. Reads better, scales as you add columns, and handles missing cells without leaving double commas.
  4. Treating the CONCAT result as a number

    CONCAT always returns text. Even when every input is a number, the joined output is a string. =CONCAT(A2, B2) where A2 is 100 and B2 is 50 returns the text "10050", not the number 10050. Try to do math on it and you get #VALUE! errors.

    Fix: If you need the result as a number, wrap with VALUE: =VALUE(CONCAT(A2, B2)). If you genuinely want to add the two numbers (not concatenate), use + instead: =A2 + B2. CONCAT is for text output only.

Notes

  • CONCAT was added in Excel 2019. Available in Excel 2019, Excel 2021, Excel 365, and Excel for the web. Excel 2016 and earlier do not have it - fall back to CONCATENATE or & on those versions.
  • CONCATENATE (the older sibling) is still supported in modern Excel for backward compatibility. It works fine for two or three cells but cannot accept a range.
  • The & operator does the same thing for two or three strings: =A2 & " " & B2. More readable when you only have a few pieces to combine.
  • CONCAT accepts ranges: =CONCAT(A2:A6) joins five cells with no delimiter. CONCATENATE could not do this - one of the main reasons CONCAT replaced it.
  • The result is always text, never a number, even if every input is a number. Wrap with VALUE() if you need to convert the joined string back to a number.
  • Empty cells in a range are skipped silently. No double-delimiter problem like the old CONCATENATE+& chains had, because there is no delimiter to double in the first place.
  • Maximum result length is 32,767 characters (the standard Excel cell limit). Hitting this in normal work is rare; usually you have other problems if you are joining that much text.
  • For delimiter support (commas, semicolons, line breaks between items) or auto-skip-blanks behavior, use TEXTJOIN instead. CONCAT is for raw glue-the-strings-together; TEXTJOIN is for formatted lists.

Now prove it

Reading about CONCAT is one thing.

Generating 200 standardized employee emails from a raw HR export with mixed casing and trailing whitespace, in five minutes, before the new-hire orientation starts, is completely different.

These exercises put CONCAT into the real workplace patterns: full-name columns from first/last splits, email and username generators, product codes from category + sequence numbers, and address strings for mail-merge.

Here is the thing about CONCAT.

You can read this page and still hesitate the first time HR drops a 300-row CSV on your desk and asks for a clean email column by end of day.

That gap, between knowing what CONCAT does and being able to write a nested CONCAT + LOWER + TRIM on autopilot, is what CellSkill is built to close.

Not with more reading.

With practice on scenarios that look like your actual job.

Start practicing CONCAT for free →
Free account . No credit card . Cancel anytime
Practice CONCAT
CONCAT & CONCATENATE in Excel: Join Text Cells · CellSkill