CONCAT vs CONCATENATE: Which to Use & 10 Real‑World Examples

CONCAT Vs. CONCATENATE FUNCTION IN EXCEL TUTORIAL Feature Image
CONCAT replaced CONCATENATE as Excel’s standard text-joining function — but many users still reach for the older name out of habit. This guide explains the four ways to concatenate in Excel, shows exactly when to use each one, and walks through 10 real-world examples covering full names, postal addresses, order codes, date labels, conditional suffixes, and comma-separated lists. Whether you’re joining two cells or an entire column, you’ll find the right formula here.

Excel has four ways to join text — the ampersand operator (&), CONCATENATE, CONCAT, and TEXTJOIN — and choosing the wrong one leads to long, fragile formulas that break when data changes. The short answer is simple: use CONCAT instead of CONCATENATE in all new files. CONCAT supports ranges, is shorter to type, and does everything CONCATENATE does. Furthermore, when you need a separator between values, use TEXTJOIN instead.

This guide explains each method clearly, compares them side by side, and walks through 10 practical examples you can use immediately. Consequently, you will never need to count commas in a CONCATENATE formula again.

Availability: The ampersand (&) and CONCATENATE work in all Excel versions. CONCAT and TEXTJOIN require Excel 2019, Excel 2021, Excel 2024, or Microsoft 365. They are also supported in Google Sheets.

What Are the Four Ways to Concatenate in Excel?

Each method has a specific strength. Understanding when to use each one prevents the most common mistakes and keeps formulas readable.

Method& operatorCONCATENATECONCATTEXTJOIN
Supports ranges❌ No❌ No✅ Yes✅ Yes
Custom delimiterManual — add between each valueManual — add between each valueManual — add between each value✅ Write once
Skip blank cells❌ No❌ No❌ No✅ Yes (ignore_empty)
Available sinceAll versionsAll versionsExcel 2019 / 365Excel 2019 / 365
Best forShort, ad hoc joinsLegacy compatibility onlyJoins without a delimiterJoins with a delimiter

What Is the Syntax for Each Function?

CONCAT and CONCATENATE share similar syntax. TEXTJOIN adds two arguments before the text values.

Ampersand — join values with & between each one: value1 & value2 & value3 CONCATENATE — list each value as a separate argument (legacy): =CONCATENATE(text1, [text2], ...) CONCAT — same as CONCATENATE but also accepts ranges (modern): =CONCAT(text1, [text2], ...) TEXTJOIN — add a delimiter and skip blanks automatically (most powerful): =TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...) delimiter → the separator to insert between values (e.g. ", " or " - ") ignore_empty → TRUE to skip blank cells, FALSE to include them as gaps
Stop using CONCATENATE in new files: Microsoft has not deprecated CONCATENATE, but it no longer appears in Excel's autocomplete suggestions in newer versions. CONCAT does everything CONCATENATE does and additionally accepts ranges — making it strictly better. The only reason to keep CONCATENATE is backward compatibility with Excel 2016 or earlier.

Examples 1–5: Everyday Concatenation Tasks

1
Combine first name and last name with a space

Joining a first and last name is the most common concatenation task. All four methods work, but the ampersand is the most readable for this simple case. TEXTJOIN is particularly useful here because it can skip the middle name if the cell is blank.

A — First
B — Middle
C — Last
Result
Sarah
(blank)
Jones
Sarah Jones
James
R.
Smith
James R. Smith
Simple first + last (all versions): A2 & " " & C2 → "Sarah Jones" =CONCATENATE(A2, " ", C2) → "Sarah Jones" (same result) =CONCAT(A2, " ", C2) → "Sarah Jones" (modern preferred) With optional middle name — TEXTJOIN skips blank cells automatically: ignore_empty=TRUE means a blank B2 produces "Sarah Jones", not "Sarah Jones". =TEXTJOIN(" ", TRUE, A2, B2, C2) → "Sarah Jones" or "James R. Smith"
2
Build a full postal address in one cell

Address fields often include blank cells — for instance, a missing second address line. TEXTJOIN with ignore_empty=TRUE handles this cleanly. Additionally, CHAR(10) creates a line break so the address appears across multiple lines in one cell (requires Wrap Text to be enabled).

Data: A=Street, B=Line2 (optional), C=City, D=Postcode. Comma-separated single-line address — CONCAT: =CONCAT(A2, ", ", C2, ", ", D2) → "14 Oak Street, London, EC1A 1BB" Multi-line address with optional Line 2 — TEXTJOIN skips blank B2: CHAR(10) is the line-break character. Enable Wrap Text in the result cell. =TEXTJOIN(CHAR(10), TRUE, A2, B2, C2, D2) → 14 Oak Street London EC1A 1BB (Line 2 is skipped because B2 is blank)
3
Generate an email address from name components

Building email addresses from first name, last name, and domain is a common HR and IT task. CONCAT keeps the formula short. Wrapping with LOWER ensures the output is always lowercase — email addresses are case-insensitive but inconsistent capitalisation looks unprofessional.

Data: A=First name, B=Last name, C=Domain (e.g. "@company.com"). Build an email address in lowercase: =LOWER(=CONCAT(A2, ".", B2, C2)) → "sarah.jones@company.com" First initial + last name style (e.g. s.jones@company.com): LEFT extracts just the first character of the first name. =LOWER(=CONCAT(LEFT(A2,1), ".", B2, C2)) → "s.jones@company.com" Ampersand version — equally readable for a simple two-field join: =LOWER(A2 & "." & B2 & C2)

Examples 4 and 5: Working with Numbers and Dates

4
Create an order reference code from parts

Order reference codes typically combine a region prefix, a year, and a sequence number. CONCAT joins all three parts cleanly. TEXT() formats the number with leading zeros. Consequently, the code always has a consistent, fixed-length format.

Data: A=Region ("EAST"), B=Year (2026), C=Sequence number (7). Build an order code like "EAST-2026-0007": =CONCAT(A2, "-", B2, "-", TEXT(C2, "0000")) → "EAST-2026-0007" TEXT("0000") pads the sequence number with leading zeros to 4 digits. Ampersand equivalent — same result, equally readable for 3 parts: A2 & "-" & B2 & "-" & TEXT(C2,"0000") Dynamic year from today — no hardcoding needed: YEAR(TODAY()) extracts the current year automatically. =CONCAT(A2, "-", YEAR(TODAY()), "-", TEXT(C2,"0000"))
5
Join text with a formatted date

Dates are stored as serial numbers in Excel. Passing a date cell directly to CONCAT produces a number like 46118 instead of a readable date. The fix is to wrap the date in TEXT() first and specify the format you want. This pattern applies to all four concatenation methods.

Data: A=Report name ("Q1 Sales"), B=Date cell (e.g. 07-Apr-2026). Problem — CONCAT without TEXT() returns a number: =CONCAT(A2, " as at ", B2) → "Q1 Sales as at 46118" ← wrong! B2 is a date serial number. Fix — wrap the date in TEXT() with the display format you need: =CONCAT(A2, " as at ", TEXT(B2, "dd-mmm-yyyy")) → "Q1 Sales as at 07-Apr-2026" Using TODAY() for a self-updating label: The date refreshes every time the workbook recalculates. =CONCAT("Printed: ", TEXT(TODAY(), "dd-mmm-yyyy")) → "Printed: 07-Apr-2026"
TEXT() controls the format, not just the appearance: TEXT(B2, "dd-mmm-yyyy") converts the date serial number to a genuine text string in the format you specify. The same approach works for times, currency, and any other formatted value — pass the cell through TEXT() before concatenating it.

Examples 6–10: Advanced Concatenation Techniques

6
Join an entire column range — CONCAT advantage over CONCATENATE

CONCATENATE cannot accept a range — you must list every cell individually. CONCAT, by contrast, accepts a single range argument. This is the single most important practical difference between the two functions.

Join all product codes in A2:A10 into one string (no separator). CONCATENATE — must list every cell (tedious, breaks when rows are added): =CONCATENATE(A2,A3,A4,A5,A6,A7,A8,A9,A10) CONCAT — one range argument. Adding rows to the data does NOT require editing: The range expands automatically if the data lives in a Table. =CONCAT(A2:A10) → "WIDGET001GADGET002PRO003..." (all codes joined, no separator) Add a separator — use TEXTJOIN instead when you need one between values: CONCAT has no delimiter argument, so TEXTJOIN is the correct choice here. =TEXTJOIN(", ", TRUE, A2:A10) → "WIDGET001, GADGET002, PRO003"
7
Skip blank cells automatically — TEXTJOIN ignore_empty

When data has gaps, CONCAT produces double separators — for example, "London, , EC1A". TEXTJOIN eliminates this entirely. Setting ignore_empty to TRUE skips any blank cells in the range. As a result, the output is always clean regardless of which optional fields the user leaves empty.

A
B (blank)
C
CONCAT (bad)
TEXTJOIN (good)
London
(empty)
EC1A
"London, , EC1A"
"London, EC1A"
CONCAT with separators — blank cells produce a double comma: A2="London", B2=(blank), C2="EC1A" =CONCAT(A2, ", ", B2, ", ", C2) → "London, , EC1A" ← double comma gap TEXTJOIN with ignore_empty=TRUE — blank B2 is skipped cleanly: =TEXTJOIN(", ", TRUE, A2, B2, C2) → "London, EC1A" ← clean, no gap Same with a range — works over many rows: Any blank within A2:A20 is automatically excluded from the result. =TEXTJOIN(", ", TRUE, A2:A20)
8
Conditional concatenation — add a suffix only when a condition is met

Nesting IF inside CONCAT adds text conditionally. This pattern is useful for status labels, exception flags, and any case where the output string should change based on the data in another cell.

Add " (OVERDUE)" to a task name if the deadline has passed. Data: A=Task name, B=Due date. IF checks whether the due date is in the past; CONCAT appends the suffix. =CONCAT(A2, IF(B2<TODAY(), " (OVERDUE)", "")) → "Submit report (OVERDUE)" if overdue, or "Submit report" if not Append a department suffix only when the department cell is not blank: An empty department cell adds nothing — no extra spaces or brackets appear. =CONCAT(A2, IF(C2<>"", " — " & C2, "")) → "James Smith — Finance" or "James Smith" (if C2 is blank) Combine multiple conditional suffixes using nested IFs or SWITCH: =CONCAT(A2, " [", SWITCH(D2, "High","!", "Low","-", "="), "]") → "Project Alpha [!]" or "Project Alpha [-]" or "Project Alpha [=]"

Examples 9 and 10: Dynamic Labels and Lists

9
Build a dynamic sentence from cell values

Inserting live cell values into a sentence template is a powerful reporting technique. The resulting cell reads like natural language and updates automatically whenever the source data changes. CONCAT handles this naturally by mixing text strings and cell references in any order.

Data: A=Region ("East"), B=Month ("March"), C=Sales (£48,500), D=Target (£45,000). Build a plain-English summary sentence: =CONCAT("The ", A2, " region achieved £", TEXT(C2, "#,##0"), " in ", B2, ", exceeding its target of £", TEXT(D2,"#,##0"), ".") → "The East region achieved £48,500 in March, exceeding its target of £45,000." Add a conditional clause — include "exceeding" or "missing": IF checks whether actual beats target; CONCAT inserts the right phrase. =CONCAT("The ", A2, " region ", IF(C2>=D2, "exceeded", "missed"), " its target in ", B2, ".") → "The East region exceeded its target in March."
10
Create a comma-separated list from a column — TEXTJOIN's signature use case

Turning a column of values into a single comma-separated list is something CONCATENATE and CONCAT cannot do efficiently. TEXTJOIN was designed specifically for this pattern — it accepts the entire range and writes the separator just once. This is the clearest reason to use TEXTJOIN over CONCAT.

Data: A2:A10 holds a list of attendee names. Create a comma-separated list in one cell for a meeting invite. TEXTJOIN — writes the separator once, handles the whole range: TRUE means blank cells in the range are skipped automatically. =TEXTJOIN(", ", TRUE, A2:A10) → "Sarah, James, Priya, Marcus, Ellen" CONCATENATE equivalent — must list every cell and add commas manually: Adding a new attendee requires rewriting the formula. =CONCATENATE(A2,", ",A3,", ",A4,", ",A5,", ",A6) ← fragile — adding row 11 requires editing the formula TEXTJOIN with two non-adjacent ranges: Combine names from A and B columns — separate non-adjacent ranges with a comma. =TEXTJOIN("; ", TRUE, A2:A10, C2:C10) → "Sarah; James; Priya; Anna; Ben"
Use Excel Tables as your source range for TEXTJOIN. Table references like =TEXTJOIN(", ", TRUE, tblAttendees[Name]) expand automatically when rows are added — the formula never needs editing as the list grows.

Which Function Should You Use?

A single decision tree covers almost every scenario. First, ask whether the file needs to work in Excel 2016 or earlier. If yes, use CONCATENATE or the ampersand. If not, use CONCAT or TEXTJOIN depending on whether you need a separator.

The Decision Tree

Two or three values without a separator → use the ampersand (&). Many values or a range without a separator → use CONCAT. Any number of values with a consistent separator → use TEXTJOIN. Backward compatibility with Excel 2016 required → use CONCATENATE or the ampersand. Additionally, whenever blank cells might produce double separators, TEXTJOIN with ignore_empty=TRUE is always the safest choice.

Quick rule: In new files, never write CONCATENATE. Use CONCAT for no-delimiter joins. Use TEXTJOIN for delimiter joins. Use the ampersand for short, ad hoc joins where readability matters most.

Common Concatenation Problems and How to Fix Them

Date shows as a number instead of a date

Dates are stored as serial numbers internally. CONCAT and the ampersand convert them directly — producing results like "46118" instead of "07-Apr-2026". Fix this by wrapping the date cell in TEXT() before concatenating: =CONCAT(A2, " — ", TEXT(B2, "dd-mmm-yyyy")). The TEXT format string controls how the date appears in the output.

Double separators from blank cells

CONCAT and the ampersand do not skip blank cells. Consequently, a blank middle-name cell produces "Sarah Jones" (double space) or "London, , EC1A" (double comma). Switch to TEXTJOIN with ignore_empty=TRUE, or wrap each optional field in IF: IF(B2<>"", " " & B2, "").

#VALUE! error from CONCAT

CONCAT returns #VALUE! when the combined string exceeds 32,767 characters — Excel's cell limit. This is uncommon in normal use but can happen when joining large ranges. Additionally, TEXTJOIN has the same limit. Split the join into smaller segments or reconsider whether a single cell is the right place for very long strings.

#NAME? error in CONCAT or TEXTJOIN: These functions do not exist in Excel 2016 or earlier. When a file containing CONCAT or TEXTJOIN is opened in an older version, every formula using them displays #NAME?. For cross-version files, use CONCATENATE or the ampersand, and avoid TEXTJOIN's ignore_empty feature entirely.

Frequently Asked Questions

  • What is the difference between CONCAT and CONCATENATE?+
    CONCAT is the modern replacement for CONCATENATE. The two functions produce identical results when given individual cell references. The key difference is that CONCAT accepts ranges — you can write =CONCAT(A2:A10) to join ten cells in one argument. CONCATENATE cannot accept ranges and requires you to list every cell individually. CONCAT is available in Excel 2019, Excel 2021, Excel 2024, and Microsoft 365. CONCATENATE works in all Excel versions. For new files, always use CONCAT.
  • When should I use TEXTJOIN instead of CONCAT?+
    Use TEXTJOIN whenever you need a separator between the joined values — a comma, space, hyphen, or any other character. CONCAT has no delimiter argument, so you must manually add separators between every value, which is tedious and error-prone. TEXTJOIN also has a built-in option to skip blank cells automatically (ignore_empty=TRUE). Specifically, the comma-separated list use case (Example 10) and the blank-safe address join (Example 7) are TEXTJOIN's strongest scenarios.
  • Why does my concatenated date show as a number?+
    Excel stores dates as serial numbers internally — for example, 07 April 2026 is stored as 46118. When you pass a date cell to CONCAT or use the ampersand, Excel converts the serial number to text rather than the formatted date. The fix is to wrap the date in TEXT() with your desired format: =CONCAT("Report: ", TEXT(B2, "dd-mmm-yyyy")). The format string inside TEXT() controls how the date appears — use "dd/mm/yyyy", "mmmm d, yyyy", or any valid format.

More Questions About Excel Concatenation

  • Is the ampersand (&) faster than CONCAT?+
    For short joins of two or three values, the ampersand is marginally faster because it uses fewer function-call overheads. In practice, the difference is imperceptible unless you have hundreds of thousands of rows recalculating simultaneously. For readability, use whichever feels cleaner for the specific formula. The ampersand is often easier to read for short joins; CONCAT is clearer when mixing many values and static strings.
  • Can CONCAT join numbers and text together?+
    Yes. CONCAT automatically converts numbers to text during concatenation. For example, =CONCAT("Order #", 42) produces "Order #42". However, the number is converted using its raw stored value — formatting applied in the cell (such as currency or decimal places) is not preserved. To control number formatting in the output, wrap the number in TEXT() first: =CONCAT("Total: £", TEXT(C2, "#,##0.00")) produces "Total: £1,234.56".
  • Does TEXTJOIN work in Google Sheets?+
    Yes. TEXTJOIN, CONCAT, and CONCATENATE all work in Google Sheets with identical syntax. The ampersand operator also works identically. One small difference: Google Sheets does not have Flash Fill (Excel's Ctrl+E pattern-filling shortcut), but all formula-based concatenation approaches work the same way across both platforms.