TEXTJOIN in Excel: Combine Text with Delimiters (Replace CONCATENATE)

TEXTJOIN in Excel feature image for tutorial blog
TEXTJOIN replaces CONCATENATE with a single function that accepts a range, writes the delimiter once, and skips blank cells automatically with one TRUE/FALSE argument. This guide covers six practical examples — from comma-separated lists and address building through conditional joins with IF, date formatting with TEXT(), and line-break separators using CHAR(10).

CONCATENATE was Excel's text-joining function for decades. It worked, but it had a painful limitation: you had to list every cell individually, type the delimiter between each one, and when a cell was blank it left a double-comma gap in your result. TEXTJOIN replaces it completely. You specify the delimiter once, pass a whole range, and set a single switch to skip blank cells automatically. The result is cleaner formulas, fewer keystrokes, and no more blank-cell gaps. This guide covers the full syntax, a direct comparison with CONCATENATE, and six practical examples.

Availability: TEXTJOIN is available in Excel 2019, Excel 2021, Excel 2024, and Microsoft 365. It is not available in Excel 2016 or earlier. For older versions, use CONCATENATE or the ampersand operator with manual delimiters.

TEXTJOIN Syntax

=TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...)
ArgumentRequired?What it means
delimiter Required The character(s) inserted between each text value — a comma, space, hyphen, pipe, or any string. Use ", " for comma-space, " " for space only, or "" for no separator at all.
ignore_empty Required TRUE — blank cells are skipped and no extra delimiter is inserted. FALSE — blank cells are included, leaving a visible gap. Use TRUE in almost every real-world formula.
text1 Required The first value or range to join. Can be a single cell, a range like A2:A20, a hardcoded string, or another formula. Up to 252 text arguments total.
text2, text3... Optional Additional values or ranges. TEXTJOIN processes all arguments left to right, inserting the delimiter between each non-empty value (when ignore_empty = TRUE).

TEXTJOIN vs CONCATENATE — Why Make the Switch

Here is the same task — join five name cells with a comma separator — written with both functions:

CONCATENATE — tedious with delimiters

=CONCATENATE(A2,", ",A3,", ",A4,", ",A5,", ",A6)

Delimiter typed 4 times.

Blank in A4 → "Alice, , Carlos"

Add a cell → rewrite the formula.

TEXTJOIN — one delimiter, one range

=TEXTJOIN(", ", TRUE, A2:A6)

Delimiter written once.

Blank in A4 → "Alice, Carlos"

Add a row → formula updates.

CONCATENATE vs CONCAT vs TEXTJOIN: CONCATENATE (legacy) — lists each cell individually, no range support, no delimiter argument. CONCAT (Excel 2019+) — supports ranges, no delimiter, no blank-skipping. TEXTJOIN (Excel 2019+) — supports ranges, custom delimiter, and blank-skipping. For any task where you need a delimiter between values, TEXTJOIN is always the right choice.

Example 1: Join a List with a Comma Separator

The most common use — take a column of items and produce a single comma-separated string. TEXTJOIN processes the entire range in one formula with no need to reference each cell individually.

1
Combine a list of team members into one comma-separated string
#
A — Name
ignore_empty TRUE
ignore_empty FALSE
2
Alice
=TEXTJOIN(", ",TRUE,A2:A6)
=TEXTJOIN(", ",FALSE,A2:A6)
3
Ben
Alice, Ben, Carlos, Diana
Alice, Ben, , Carlos, Diana
4
(empty)
5
Carlos
6
Diana
Comma-space delimiter, skip blanks (recommended): =TEXTJOIN(", ", TRUE, A2:A6) Result: "Alice, Ben, Carlos, Diana" Semicolon delimiter (for European locale reporting): =TEXTJOIN("; ", TRUE, A2:A6) Pipe delimiter (for system imports): =TEXTJOIN("|", TRUE, A2:A6) No delimiter — concatenate without separator: =TEXTJOIN("", TRUE, A2:A6)
With ignore_empty = TRUE, the blank row 4 is silently skipped — no double-comma appears in the output. With FALSE, the blank becomes a visible gap. Use TRUE in almost every real-world formula.

Example 2: Build a Full Address from Parts

Address fields are rarely all filled in. Street, apartment, city, state, and postcode can have empty cells depending on the record. TEXTJOIN with ignore_empty = TRUE automatically skips missing parts without leaving extra commas or spaces.

2
Assemble a full mailing address from separate fields
A — Street
B — Apt
C — City
D — State
E — Postcode
F — Full address
42 Oak St
(empty)
Austin
TX
78701
42 Oak St, Austin, TX 78701
9 Elm Ave
Unit 4B
Dallas
TX
75201
9 Elm Ave, Unit 4B, Dallas, TX 75201
Join address parts — blank Apt field is skipped automatically (row 2): City and State joined with a space, then comma before postcode. Simple version — all parts comma-separated: =TEXTJOIN(", ", TRUE, A2, B2, C2, D2, E2) Advanced — City and State combined with space, then comma+postcode: =TEXTJOIN(", ", TRUE, A2, B2, C2&" "&D2, E2) Result row 1: "42 Oak St, Austin TX, 78701"
Mix TEXTJOIN with ampersand: Inside the text arguments, you can concatenate values with & before passing them to TEXTJOIN. This lets you build composite parts — like "Austin TX" — while still using TEXTJOIN to handle the outer comma-separation and blank-skipping.

Example 3: Conditional Join — Only Items Meeting a Criterion

Nest an IF function inside TEXTJOIN to join only the values that match a condition. IF returns the value when the condition is TRUE and an empty string when it is FALSE. With ignore_empty = TRUE, the empty strings are automatically skipped.

3
List only the days of the week marked as available
A — Day
B — Available?
Result
Monday
x
=TEXTJOIN(", ",TRUE,IF(B2:B6="x",A2:A6,""))
Tuesday
(empty)
Wednesday
x
Thursday
(empty)
Friday
x
Monday, Wednesday, Friday
Join only days where column B contains "x": IF returns the day name when B = "x", or "" when it does not. ignore_empty = TRUE skips all the "" values. =TEXTJOIN(", ", TRUE, IF(B2:B6="x", A2:A6, "")) Result: "Monday, Wednesday, Friday" Same pattern — list employees in a specific department: =TEXTJOIN(", ", TRUE, IF(B2:B100="Engineering", A2:A100, "")) List items in a price range: =TEXTJOIN(", ", TRUE, IF(C2:C100>=50, A2:A100, ""))

Example 4: Join a Multi-Column Range (Full Name Builder)

TEXTJOIN can join values from multiple columns at once. Passing a 2D range processes cells left-to-right, top-to-bottom. More commonly, you pass separate column arguments to control the order and handle blanks in individual columns.

4
Build full names from first name, middle initial, and last name
A — First
B — Middle
C — Last
With middle
Without middle
Sarah
J.
Connor
Sarah J. Connor
Sarah J. Connor
James
(empty)
Kirk
James Kirk
James Kirk
Space-separated first + middle + last (row 2 = "Sarah J. Connor"): ignore_empty TRUE skips the blank middle initial (row 3 = "James Kirk"): =TEXTJOIN(" ", TRUE, A2, B2, C2) Last name first, then first name (Last, First format): =TEXTJOIN(", ", TRUE, C2, A2) Result: "Connor, Sarah" Email address from parts (FirstName.LastName@company.com): =TEXTJOIN(".", TRUE, A2, C2) & "@company.com" Result: "Sarah.Connor@company.com"

Example 5: Join Dates and Numbers (Using TEXT for Formatting)

TEXTJOIN converts numbers to text automatically. Dates, however, are stored as serial numbers internally — passing a date cell directly to TEXTJOIN gives you a number like 46118 instead of "28-Mar-2026". Wrap the date in TEXT() before passing it to TEXTJOIN to control the display format.

5
Build a summary label combining text, numbers, and a formatted date
WRONG — date cell passed directly returns a serial number: =TEXTJOIN(" | ", TRUE, A2, B2, C2) Result: "INV-0042 | 500 | 46118" ← date is broken CORRECT — wrap date in TEXT() first: =TEXTJOIN(" | ", TRUE, A2, B2, TEXT(C2, "DD-MMM-YYYY")) Result: "INV-0042 | 500 | 02-Apr-2026" Currency-formatted number + date in a report label: =TEXTJOIN(" — ", TRUE, "Amount: "&TEXT(B2, "$#,##0.00"), "Due: "&TEXT(C2, "DD MMM YYYY")) Result: "Amount: $500.00 — Due: 02 Apr 2026"
Always wrap dates in TEXT(): TEXTJOIN does not know a cell is formatted as a date — it sees the raw serial number. Use TEXT(date_cell, "DD-MMM-YYYY") (or any format string) before passing the date into TEXTJOIN to get a readable result.

Example 6: Line-Break Separator and Special Characters

The delimiter in TEXTJOIN does not have to be a comma or space. Use CHAR(10) (line feed) to join items with a line break — each value on its own line inside one cell. Use CHAR(13)&CHAR(10) for Windows-style carriage return + line feed, or any other character code you need.

6
Join items with line breaks, bullet points, and special separators
Line break between items — enable "Wrap Text" on the cell to see each on its own line: =TEXTJOIN(CHAR(10), TRUE, A2:A10) Bullet point at the start of each item (• followed by space): =TEXTJOIN(CHAR(10)&"• ", TRUE, "• "&A2, A3:A10) Hyphen separator: =TEXTJOIN(" - ", TRUE, A2:A6) Result: "Alpha - Bravo - Charlie" Dynamic delimiter from a cell (E1 contains the separator): =TEXTJOIN(E1, TRUE, A2:A20) Change E1 to change the delimiter everywhere this formula is used
Line breaks require Wrap Text: CHAR(10) inserts a real line feed into the cell. The result only displays on multiple lines if Wrap Text is enabled on that cell. Go to Home > Wrap Text, or press Alt+H+W.

Troubleshooting TEXTJOIN Errors

#NAME? error

You are on Excel 2016 or earlier, which does not support TEXTJOIN. Use CONCATENATE or the ampersand operator instead, adding delimiters manually between each argument.

#VALUE! error

The resulting string exceeds 32,767 characters — the maximum a single Excel cell can hold. Split the join across multiple cells, or reduce the number of items being combined. Also check that all arguments are valid text, numbers, or empty strings.

Dates display as numbers

Date cells are stored as serial numbers. Wrap any date argument in TEXT(date_cell, "format") before passing it to TEXTJOIN: =TEXTJOIN(", ", TRUE, A2, TEXT(B2,"DD-MMM-YYYY")).

Extra blank gaps appearing even with ignore_empty = TRUE

Cells that appear blank but contain a space character are not treated as empty by TEXTJOIN — they contain text (a space). Use TRIM() to clean them first: =TEXTJOIN(", ", TRUE, TRIM(A2:A20)). This removes leading, trailing, and excess internal spaces before joining.

Frequently Asked Questions

  • What does TEXTJOIN do in Excel?+
    TEXTJOIN combines the text from multiple cells or a range into a single string, inserting a delimiter you specify between each value. You can also set it to automatically skip blank cells with a single TRUE/FALSE argument. It replaces CONCATENATE for almost all text-joining tasks because it is shorter, accepts ranges, and handles blank cells gracefully.
  • What is the difference between TEXTJOIN, CONCAT, and CONCATENATE?+
    CONCATENATE is the legacy function — it requires each cell listed individually, has no delimiter argument, and cannot skip blanks. CONCAT (Excel 2019+) improves on it by accepting ranges, but still has no delimiter argument and no blank-skipping. TEXTJOIN (Excel 2019+) is the most capable — it accepts ranges, has a dedicated delimiter argument, and can skip blank cells. For any task needing a delimiter between values, TEXTJOIN is the right choice.
  • What does ignore_empty do in TEXTJOIN?+
    When set to TRUE, TEXTJOIN skips any empty cells in the range and does not insert the delimiter for them. The result contains no double-commas or trailing delimiters from blank entries. When set to FALSE, blank cells are treated as empty strings and delimiters are still inserted around them — producing gaps like "Alice, , Carlos". Use TRUE for almost every real-world formula.
  • How do I use TEXTJOIN with a condition?+
    Nest an IF function inside TEXTJOIN: =TEXTJOIN(", ", TRUE, IF(B2:B10="Yes", A2:A10, "")). IF returns the value when the condition is TRUE, or an empty string when it is not. With ignore_empty = TRUE, those empty strings are automatically skipped and only the matching values are joined. This pattern works for any comparison operator or text match.
  • Why do my dates show as numbers in TEXTJOIN?+
    Excel stores dates as serial numbers internally. TEXTJOIN converts whatever value is in the cell to text — and for a date cell that means converting the number, not the displayed date string. To get a readable date, wrap the date in TEXT() with a format code: =TEXTJOIN(", ", TRUE, A2, TEXT(B2, "DD-MMM-YYYY")). This converts the date to text in your preferred format before TEXTJOIN processes it.
  • Which Excel versions support TEXTJOIN?+
    TEXTJOIN is available in Excel 2019, Excel 2021, Excel 2024, and Microsoft 365. It is not available in Excel 2016 or any earlier version. If you share workbooks with colleagues on Excel 2016, they will see a #NAME? error where TEXTJOIN formulas appear. Use CONCATENATE or the ampersand operator with manual delimiters as the compatible alternative.