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], ...)
| Parameter | Required | Description |
|---|---|---|
delimiter | Yes | The 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_empty | Yes | TRUE skips blank cells so you don't end up with double delimiters. FALSE includes them, which can leave gaps like John,,Smith. |
text1 | Yes | The first value, cell, or range to join. Can be a single cell, a full range, or a typed string. |
text2, ... | No | Additional 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
| Function | Use this when... |
|---|---|
FILTER | You want to pull matching rows first, then feed the result into TEXTJOIN for a dynamic list. |
IF | You need to build a conditional array of values before joining, on versions without FILTER. |
TEXTSPLIT | You need to reverse the process and break a delimited string back into separate cells. |
Related Functions
Excel TEXT Function
TEXT turns raw numbers and dates into formatted text for reports, labels, and merged strings. Here's the full format code reference, common mistakes, and when to reach for VALUE instead.
Excel TEXTSPLIT Function
TEXTSPLIT breaks a text string apart at any delimiter you specify and spills the pieces into columns or rows automatically. Unlike Text to Columns, it's a live formula that updates the moment your source data changes.
Excel AVERAGEIFS Function
AVERAGEIFS averages a range of numbers based on multiple conditions at once. It's the tool for questions like average sales in the West region during March.
Excel CHAR Function
CHAR turns a number into a text character, useful for inserting line breaks, quotation marks, and other symbols you can't easily type into a formula. Here's the syntax, the platform quirks, and when to switch to UNICHAR.