← Functions
textjointextfunctionsintermediate

Excel TEXTJOIN Function

TEXTJOIN combines text from multiple cells into one string, joined by a delimiter you choose, with an option to skip blanks.

TEXTJOIN combines text from multiple cells or ranges into a single string, using a delimiter you specify to separate each piece. It returns text, always. The setting people miss most often: ignore_empty skips truly blank cells, but not a formula that returns an empty string. That distinction causes more confusion than anything else in this function.

Available in: Excel 365, Excel 2021, Excel 2019. Not available in Excel 2016 or earlier.

Syntax

=TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...)
ParameterRequiredDescription
delimiterYesThe character or string placed between each joined value. Wrap it in quotes: ", " for a comma and space, "-" for a hyphen, "" for no separator at all.
ignore_emptyYesTRUE skips blank cells so you don't end up with double delimiters. FALSE includes them, which can leave gaps like John,,Smith.
text1YesThe first value, cell, or range to join. Can be a single cell, a full range, or a typed string.
text2, ...NoAdditional values, cells, or ranges. You can add up to 252 total text arguments.

Setting ignore_empty to FALSE doesn't throw an error when a cell is blank. It just inserts a delimiter with nothing between it and the next value, which produces awkward output like trailing commas at the end of a list. Use TRUE unless you specifically need to preserve blank positions.

Basic Example

You're building a directory and want to combine first name, middle initial, and last name into one cell, skipping the middle initial when it's blank.

=TEXTJOIN(" ", TRUE, A2, B2, C2)

// " "  = space between each piece
// TRUE = skip B2 if the middle initial is blank
// A2, B2, C2 = first name, middle initial, last name

If A2 is "Maria", B2 is empty, and C2 is "Chen", the formula returns Maria Chen. No double space, no stray delimiter. Without ignore_empty set to TRUE, you'd get Maria Chen with two spaces where the middle initial should have gone.

How TEXTJOIN Works

The delimiter can be any string, or none at all

Most people use a comma or space, but the delimiter argument accepts anything: a pipe ("|"), a line break (CHAR(10)), even a full word like " and ". Set it to "" for an empty string and TEXTJOIN behaves like a plain concatenation with no separator.

ignore_empty skips blank cells, not empty text

This is the part competitors gloss over. A truly blank cell gets skipped when ignore_empty is TRUE. But a cell containing a formula that returns "", like =IF(D2="","",D2), is not blank. TEXTJOIN still treats it as a value and inserts a delimiter for it, even though the cell looks empty on screen.

You can mix ranges, individual cells, and typed text in one formula

TEXTJOIN doesn't care whether an argument is a range, a single cell, or a literal string. This formula is valid:

=TEXTJOIN(", ", TRUE, "Order #" & A2, B2:D2)

It joins a constructed label with a full range in the same call, something CONCATENATE never handled cleanly.

Every argument counts toward the 252 limit

TEXTJOIN caps out at 252 text arguments. A range counts as one argument no matter how many cells it contains, so TEXTJOIN(",", TRUE, A2:A500) is one argument, not 500. The limit only bites when you're stacking many individual cells or ranges side by side in the same formula.

Common Use Cases

Joining first and last names with a space

Standard for building a full-name column from separate first and last name fields.

=TEXTJOIN(" ", TRUE, first_name, last_name)   // "Maria Chen"

Building a comma-separated list from a range

Turn a column of values into one readable string, useful for summary cells or email subject lines.

=TEXTJOIN(", ", TRUE, products)   // "Keyboard, Monitor, Desk Lamp"

Joining only the rows that meet a condition

Combine TEXTJOIN with IF to pull only matching values into the string. This is the pattern behind most "list all items where..." requests.

=TEXTJOIN(", ", TRUE, IF(regions="West", customers, ""))

// regions="West" = the condition each row is checked against
// customers       = the values pulled in when the condition is met
// ""              = returned for non-matching rows, then skipped by ignore_empty

This is an array formula. On Excel 365 you can just press Enter. On older versions you'd need Ctrl+Shift+Enter, but since TEXTJOIN requires Excel 2019 or later, that's rarely an issue.

Combining TEXTJOIN with FILTER for a dynamic match list

On Excel 365, FILTER and TEXTJOIN pair well for building a live list that updates automatically as source data changes.

=TEXTJOIN(", ", TRUE, FILTER(customers, regions="West"))

FILTER returns only the rows where region equals "West," and TEXTJOIN stitches the result into a single readable string. No helper column, no array-entry gymnastics.

Joining dates without breaking the formatting

Dates need to be converted to text first, or TEXTJOIN joins the underlying serial number instead of a readable date.

=TEXTJOIN(", ", TRUE, TEXT(order_dates, "mm/dd/yyyy"))

Skip the TEXT() wrapper and a date like March 3, 2026 shows up as 46080 instead.

Handling Errors

TEXTJOIN returns #VALUE! when the combined result exceeds Excel's limits. This is a real, catchable error, unlike some text functions that just return 0 or an empty string on bad input.

Common causes of #VALUE!:

  • The joined string exceeds 32,767 characters, which is the maximum length for a single cell
  • The formula uses more than 252 total text arguments
  • One of the arguments references a closed external workbook that Excel can't read
=IFERROR(TEXTJOIN(", ", TRUE, products), "List too long")

If you're hitting the 32,767-character wall regularly, you're probably trying to cram too much into one cell. Split the output across multiple cells, or rethink whether a single joined string is really the right format for that much data.

Notes & Gotchas

What is TEXTJOIN used for in Excel?

TEXTJOIN combines text from multiple cells, ranges, or arrays into one string, with a delimiter of your choice separating each piece. It's most commonly used to build full names, comma-separated lists, and readable summaries pulled from a column of values. It also handles conditional joins when paired with IF or FILTER, something the older CONCATENATE function couldn't do at all.

What is the difference between TEXTJOIN and CONCATENATE or CONCAT?

TEXTJOIN accepts a delimiter and can ignore blank cells. CONCATENATE and CONCAT do neither: they glue values together with no separator and no blank-handling logic, so you'd need to manually insert commas or spaces between every argument. TEXTJOIN also accepts full ranges as a single argument, while CONCATENATE requires each cell listed individually.

Which Excel versions support TEXTJOIN?

TEXTJOIN works in Excel 2019, Excel 2021, and Excel 365. It is not available in Excel 2016 or earlier, where CONCATENATE or the & operator are the only joining options. If you're sharing a workbook with someone on an older version, TEXTJOIN will show as #NAME? in their copy.

How do you use TEXTJOIN with multiple ranges or conditions?

Pass each range as a separate argument, or wrap a range in IF to filter it before joining, as shown in the use case examples above. On Excel 365, FILTER combined with TEXTJOIN handles conditional joins without needing an array-entered IF formula. The condition itself lives inside FILTER or IF, not inside TEXTJOIN.

Why does TEXTJOIN return #VALUE!, and how many characters or arguments can it handle?

TEXTJOIN returns #VALUE! when the result exceeds 32,767 characters, the character limit for a single cell, or when the formula uses more than 252 total text arguments. Both limits are generous for typical use, but they show up fast when you're joining a large range inside a loop-style formula or building a very long delimited list. Split the output across cells if you're bumping into either ceiling.

Why do dates look wrong when joined with TEXTJOIN?

Dates are stored internally as serial numbers, and TEXTJOIN joins that underlying number instead of the formatted date you see on screen. A cell displaying "7/13/2026" gets joined as 46216. Wrap any date argument in TEXT(date, "mm/dd/yyyy") before passing it to TEXTJOIN to preserve the readable format.

Does ignore_empty treat a formula that returns an empty string as blank?

No, and this trips up more people than the character limit ever does. A cell containing =IF(condition, "", value) still holds a formula, not a truly blank cell, so ignore_empty does not skip it. TEXTJOIN inserts a delimiter for that position anyway, which can leave stray commas in your joined result even with ignore_empty set to TRUE.

Related Functions

FunctionUse this when...
FILTERYou want to pull matching rows first, then feed the result into TEXTJOIN for a dynamic list.
IFYou need to build a conditional array of values before joining, on versions without FILTER.
TEXTSPLITYou need to reverse the process and break a delimited string back into separate cells.