ARRAYTOTEXT: Convert Arrays to Strings for Clean Outputs

ARRAYTOTEXT function in Excel — showing a four-name column being converted into "Alice,Bob,Carol,Dave" in format 0 and "Alice", "Bob", "Carol", "Dave" in format 1, with key formula examples for FILTER, UNIQUE, SUBSTITUTE, and a full report sentence, plus ARRAYTOTEXT vs TEXTJOIN comparison.
Dynamic array formulas in Excel 365 return results that spill across multiple cells. That is powerful for analysis, but it creates a problem for display: how do you show all those values as a single readable sentence? ARRAYTOTEXT solves this. It converts any array, range, or dynamic expression into a single comma-separated string in one cell. This guide covers six practical examples: joining a column of names into a compact list, combining ARRAYTOTEXT with FILTER to produce a dynamic filtered list that updates as data changes, using SORT and UNIQUE to build a deduplicated string of categories, replacing the default comma delimiter with any character via SUBSTITUTE, building a full report sentence that combines COUNTIF, ARRAYTOTEXT, and TEXT(SUMIF()) in a single formula, and a direct comparison against TEXTJOIN showing when to use each. It also covers the three most common issues: the Excel 365 availability constraint, the blank-cell double-comma problem and its FILTER workaround, and why ARRAYTOTEXT output is always text and cannot be used in downstream arithmetic.

Dynamic array formulas in Excel 365 return results that spill across multiple cells. That is powerful for analysis, but it creates a problem for display: how do you show all those values as a single readable sentence in one cell? The ARRAYTOTEXT function solves this. It converts any array or range into a single text string joined by a delimiter. The result embeds cleanly in messages, reports, and email subject lines — all from a single cell.

This guide covers the syntax, both format modes, and six practical examples. You will learn how to join names into a list, build dynamic summary sentences, combine ARRAYTOTEXT with FILTER, and format output strings for different audiences. Each example also compares ARRAYTOTEXT to TEXTJOIN, which covers many of the same use cases in older Excel versions.

Availability: ARRAYTOTEXT is available in Excel 365 and Excel 2021 only. It is not available in Excel 2019, 2016, or Google Sheets. For older versions, use TEXTJOIN as the equivalent — it covers most of the same use cases and is available from Excel 2019. ARRAYTOTEXT is not an array formula and does not require Ctrl+Shift+Enter.

What Does ARRAYTOTEXT Do?

ARRAYTOTEXT takes a range or array and concatenates all the values into a single text string. It differs from TEXTJOIN in one key way: it accepts any array expression including FILTER, UNIQUE, SORT, and SEQUENCE results. Consequently, you can pass a dynamic filtered array directly to ARRAYTOTEXT without a helper column. The result is a compact single-cell formula for complex multi-value summaries.

ARRAYTOTEXT has two format modes. Format 0 produces concise output — values separated by commas, no spaces or quotes. Format 1 produces strict output — text values are wrapped in double quotes, numbers are unquoted, and values are separated by comma-space. Format 1 is useful when the output needs to be machine-readable or when you need to distinguish text from numeric values visually.

What Is the ARRAYTOTEXT Syntax?

=ARRAYTOTEXT(array, [format])
ArgumentRequired?What it does
arrayRequiredThe range, array, or array expression to convert. Can be a cell range (A2:A10), a named range, or a dynamic array formula result (e.g. FILTER(...), UNIQUE(...), SORT(...)). Multi-row multi-column arrays are read left-to-right, top-to-bottom.
formatOptional0 (default) = concise mode: values separated by commas, no quotes around text, no spaces after commas. 1 = strict mode: text values wrapped in double quotes, numbers unquoted, comma + space separator.
ModeInput arrayOutput stringUse for
Format 0{"Alice","Bob","Carol"}Alice,Bob,CarolHuman-readable labels, email subject lines
Format 1{"Alice","Bob","Carol"}"Alice", "Bob", "Carol"Machine-readable output, debugging arrays
Format 0{100,200,300}100,200,300Compact numeric list
Format 1{100,200,300}100, 200, 300Spaced numeric list
ARRAYTOTEXT vs TEXTJOIN: Both join a range into a single string. TEXTJOIN lets you choose the delimiter and can skip blanks. ARRAYTOTEXT always uses a comma (format 0) or comma-space (format 1) — the delimiter is not configurable. Use TEXTJOIN when you need a custom delimiter (semicolon, bullet, pipe, line break). Use ARRAYTOTEXT when you need to pass a dynamic array expression like FILTER or SORT directly, which TEXTJOIN also supports from Excel 365.

Examples 1–4: Core ARRAYTOTEXT Patterns

1
Basic conversion — join a column of values into one string

The simplest use is converting a range of cells into a single text string. Pass the range as the first argument and choose the format mode. Format 0 gives a compact comma-separated result. Format 1 adds spaces and quotes text values. Both modes read left-to-right, top-to-bottom — a vertical column becomes a left-to-right list.

Cell
Value (A)
Format 0 result
Format 1 result
A2:A5
Alice, Bob, Carol, Dave
Alice,Bob,Carol,Dave
"Alice", "Bob", "Carol", "Dave"
B2:B4
10, 20, 30
10,20,30
10, 20, 30
A2:A5 = {"Alice","Bob","Carol","Dave"}. Format 0 — compact comma-separated (default, no second argument needed): =ARRAYTOTEXT(A2:A5) → "Alice,Bob,Carol,Dave" Format 1 — strict mode, text in quotes, space after comma: =ARRAYTOTEXT(A2:A5, 1) → '"Alice", "Bob", "Carol", "Dave"' Numeric range — format 0 (no quotes around numbers in either mode): B2:B4 = {10, 20, 30}. =ARRAYTOTEXT(B2:B4) → "10,20,30" Embed in a sentence — concatenate ARRAYTOTEXT with surrounding text: "Attendees: " & =ARRAYTOTEXT(A2:A5) → "Attendees: Alice,Bob,Carol,Dave"
2
Dynamic filtered list — ARRAYTOTEXT with FILTER

The most powerful use is passing FILTER directly to ARRAYTOTEXT. The result is a single cell showing a comma-separated list of all matching items. This updates automatically as the data changes. No helper columns, no manual concatenation — one formula does it all. Nesting SORT inside FILTER also ensures a consistent alphabetical order.

A2:A50 = employee names. B2:B50 = department labels. C2:C50 = status. List all employees in the Engineering department: =ARRAYTOTEXT( FILTER(A2:A50, B2:B50="Engineering") ) → "Alice,Bob,Carol,Eve" (updates when B column changes) Same list, sorted alphabetically — SORT inside FILTER inside ARRAYTOTEXT: =ARRAYTOTEXT( SORT(FILTER(A2:A50, B2:B50="Engineering")) ) → "Alice,Bob,Carol,Eve" (alphabetically sorted) Two-condition filter — Engineering AND status = "Active": Multiply the two conditions inside FILTER. =ARRAYTOTEXT( FILTER(A2:A50, (B2:B50="Engineering")*(C2:C50="Active") ) ) → "Alice,Carol,Eve" (active Engineering employees only) Handle the case where FILTER finds no matches — use IF_EMPTY argument: FILTER returns an error if no rows match. Catch it with the third argument. =ARRAYTOTEXT( FILTER(A2:A50, B2:B50="HR", "None") ) → "None" (if HR has no employees; otherwise lists them)
3
Unique values as a string — ARRAYTOTEXT with UNIQUE

Passing UNIQUE inside ARRAYTOTEXT produces a deduplicated list as a readable string. This is useful for generating a summary of distinct categories, tags, regions, or product lines without any duplicates. The combination updates automatically, making it ideal for dynamic report headers.

A2:A100 = a column of region labels with many repeats. Example values: North, South, North, East, South, West, East... List of unique regions as a comma-separated string: =ARRAYTOTEXT( SORT(UNIQUE(A2:A100)) ) → "East,North,South,West" (sorted alphabetically, no duplicates) Dynamic report header — "Regions in this report: East, North, South, West": Concatenate the label text with the ARRAYTOTEXT result. "Regions in this report: " & =ARRAYTOTEXT(SORT(UNIQUE(A2:A100))) → "Regions in this report: East,North,South,West" Count of distinct values alongside the list: ROWS counts the UNIQUE output before it reaches ARRAYTOTEXT. ROWS(UNIQUE(A2:A100)) & " regions: " & =ARRAYTOTEXT(SORT(UNIQUE(A2:A100))) → "4 regions: East,North,South,West" Unique values from multiple columns — flatten first with TOCOL: TOCOL stacks all columns into one, then UNIQUE deduplicates. =ARRAYTOTEXT( SORT(UNIQUE(TOCOL(A2:C100, 1))) ) → Deduplicated sorted list across all three columns
4
Custom separator workaround — replacing the comma with a different delimiter

ARRAYTOTEXT always uses a comma as its delimiter — this is not configurable. However, applying SUBSTITUTE after ARRAYTOTEXT replaces the comma with any character you need. This works without switching to TEXTJOIN.

A2:A6 = {"Alice","Bob","Carol","Dave","Eve"}. Replace comma with semicolons (for European locale compatibility): =SUBSTITUTE(=ARRAYTOTEXT(A2:A6), ",", ";") → "Alice;Bob;Carol;Dave;Eve" Replace comma with " | " (pipe separator for display): =SUBSTITUTE(=ARRAYTOTEXT(A2:A6), ",", " | ") → "Alice | Bob | Carol | Dave | Eve" Replace comma with " and " for natural language: Produces "Alice, Bob, Carol, Dave and Eve" style. Note: replaces ALL commas — final comma becomes " and" too. For "last item and" style, TEXTJOIN with a counted workaround is cleaner. =SUBSTITUTE(=ARRAYTOTEXT(A2:A6), ",", ", ") → "Alice, Bob, Carol, Dave, Eve" (adds space after each comma) Line break separator — CHAR(10) in a cell with Wrap Text on: Replace commas with CHAR(10) for a vertical bulleted output in one cell. =SUBSTITUTE(=ARRAYTOTEXT(A2:A6), ",", CHAR(10)) → "Alice Bob Carol Dave Eve" (each name on its own line, with Wrap Text enabled)

Examples 5 and 6: Applied ARRAYTOTEXT

Dynamic Summaries and Formatted Report Strings

5
Dynamic summary sentence — combine values into a report-ready string

A dynamic sentence pulls live data from your sheet into a readable narrative. As the underlying data changes, the sentence updates automatically. This is useful for email body text, automated report intros, and dashboard tooltips. Combining ARRAYTOTEXT with TEXT, COUNTA, and SUMIF builds rich sentences without any VBA.

A2:A50 = employee names. B2:B50 = departments. C2:C50 = salaries. Filter is not required — the formula reads the full data dynamically. Simple summary — "The Engineering team: Alice, Bob, Carol": Concatenate a label, COUNTA result, and ARRAYTOTEXT list. "The Engineering team: " & =ARRAYTOTEXT(SORT(FILTER(A2:A50,B2:B50="Engineering"))) → "The Engineering team: Alice,Bob,Carol,Eve" Full report sentence — count + list + total salary: "Engineering has 4 members (Alice,Bob,Carol,Eve). Total salary: £180,500." "Engineering has " & COUNTIF(B2:B50,"Engineering") & " members (" & =ARRAYTOTEXT(SORT(FILTER(A2:A50,B2:B50="Engineering"))) & "). Total salary: £" & TEXT(SUMIF(B2:B50,"Engineering",C2:C50), "#,##0") → "Engineering has 4 members (Alice,Bob,Carol,Eve). Total salary: £180,500." Dynamic "missing items" alert — list overdue tasks: D2:D50 = due dates. Show tasks with due date in the past. "Overdue: " & =ARRAYTOTEXT(FILTER(A2:A50, D2:D50<TODAY(), "None")) → "Overdue: Task A,Task C,Task G" (updates daily)
6
ARRAYTOTEXT vs TEXTJOIN — choosing the right function for the job

ARRAYTOTEXT and TEXTJOIN overlap significantly in everyday use. Both join arrays into strings. The key differences are delimiter flexibility and version availability. TEXTJOIN lets you specify any delimiter and works from Excel 2019. ARRAYTOTEXT always uses a comma but accepts richer array expressions as direct input. For most everyday list-joining tasks, TEXTJOIN with a custom delimiter is more flexible. ARRAYTOTEXT shines when passing complex nested array expressions in a compact single function.

A2:A10 = names. B2:B10 = departments. Same task — list Engineering employees — done with each function: ARRAYTOTEXT approach (concise, Excel 365 only): One function, no delimiter argument available. =ARRAYTOTEXT(FILTER(A2:A10, B2:B10="Engineering")) → "Alice,Bob,Carol" TEXTJOIN approach (any delimiter, Excel 2019+): Delimiter is the first argument. Second argument skips blanks. =TEXTJOIN(", ", TRUE, FILTER(A2:A10, B2:B10="Engineering")) → "Alice, Bob, Carol" (custom space-after-comma delimiter) TEXTJOIN with a bullet separator — not achievable with ARRAYTOTEXT alone: =TEXTJOIN(" • ", TRUE, FILTER(A2:A10, B2:B10="Engineering")) → "Alice • Bob • Carol" When to choose ARRAYTOTEXT over TEXTJOIN: – When you want strict mode (format 1) to quote text values. – When you are passing a complex nested expression for brevity. – When you want to use SUBSTITUTE to replace commas dynamically. When to choose TEXTJOIN over ARRAYTOTEXT: – When you need a custom delimiter (space, semicolon, bullet, tab, CHAR(10)). – When you need Excel 2019 or Google Sheets compatibility. – When blank-skipping behaviour matters (TEXTJOIN ignores blanks; ARRAYTOTEXT does not).
For most use cases, TEXTJOIN is the more flexible and broadly compatible choice. Use ARRAYTOTEXT specifically for its strict format mode (text-in-quotes output) or when the compact one-function syntax makes a complex formula meaningfully easier to read.

Common Issues and How to Fix Them

ARRAYTOTEXT is not available in my Excel version

ARRAYTOTEXT requires Excel 365 or Excel 2021. It is not available in Excel 2019, 2016, or any earlier version. It is also not available in Google Sheets. In those environments, use TEXTJOIN instead: =TEXTJOIN(",", TRUE, A2:A10) produces the same result as =ARRAYTOTEXT(A2:A10) for a simple range. For passing FILTER or UNIQUE results, TEXTJOIN also accepts dynamic array expressions in Excel 365 and 2021.

The output includes blank entries from empty cells

ARRAYTOTEXT does not skip blank cells automatically. Empty cells produce extra commas — for example, "Alice,,Carol" with a double comma where the blank was. The fix is to pre-filter blanks before passing to ARRAYTOTEXT. Use =ARRAYTOTEXT(FILTER(A2:A20, A2:A20<>"")) to exclude blank cells first. Alternatively, TEXTJOIN with ignore_empty = TRUE handles this automatically without a FILTER wrapper.

The output wraps or truncates in the cell

ARRAYTOTEXT returns a single text string of unlimited theoretical length. However, a cell can only display text up to 32,767 characters. In practice, display issues arise when the column is too narrow and text overflows. Wrap Text is not normally appropriate for ARRAYTOTEXT output since the result is a continuous string rather than a multi-line list. Instead, widen the column, or use the CHAR(10) separator trick from Example 4 and enable Wrap Text to display it as a vertical list.

ARRAYTOTEXT output is always a text string: The result is always text, even when the input array contains only numbers. Consequently, you cannot perform arithmetic on ARRAYTOTEXT output. ARRAYTOTEXT is a one-way conversion — you cannot recover the original numbers easily. It is intended for display, output, and reporting only. Do not use it as an intermediate step in a calculation that needs numeric results downstream.

Frequently Asked Questions

  • What does the ARRAYTOTEXT function do in Excel?+
    ARRAYTOTEXT converts an array, range, or dynamic array expression into a single text string. It joins the values with a comma separator. Format 0 (the default) produces compact output without spaces or quotes. Format 1 (strict mode) wraps text values in double quotes, leaves numbers unquoted, and adds a space after each comma. The function is available in Excel 365 and Excel 2021. Its key advantage over manual concatenation is that it accepts complex nested array expressions — including FILTER, UNIQUE, SORT, and SEQUENCE — directly as the first argument.
  • What is the difference between ARRAYTOTEXT and TEXTJOIN?+
    Both functions join arrays into a single text string. TEXTJOIN is more flexible: it lets you specify any delimiter, can skip blank cells automatically, and is available from Excel 2019 (including Google Sheets). ARRAYTOTEXT is more concise: it always uses a comma delimiter, does not skip blanks automatically, and offers a strict format mode that quotes text values. For custom delimiters (space, semicolon, bullet, line break), TEXTJOIN is the better choice. ARRAYTOTEXT is specifically useful when you need format 1 strict mode or when you want a compact formula for complex nested array expressions.
  • How do I use ARRAYTOTEXT with FILTER?+
    Pass the FILTER function directly as the first argument of ARRAYTOTEXT: =ARRAYTOTEXT(FILTER(A2:A50, B2:B50="Engineering")). This returns a comma-separated list of all names in the Engineering department. The result updates automatically when the data changes. To sort the list, wrap FILTER with SORT: =ARRAYTOTEXT(SORT(FILTER(A2:A50, B2:B50="Engineering"))). To handle the case where no rows match the filter, add the third argument of FILTER: =ARRAYTOTEXT(FILTER(A2:A50, B2:B50="HR", "None")) returns "None" when HR has no employees.

More Questions About ARRAYTOTEXT

  • Can I change the delimiter in ARRAYTOTEXT?+
    Not directly — ARRAYTOTEXT always uses a comma. However, you can wrap the result with SUBSTITUTE to replace the comma with any character: =SUBSTITUTE(ARRAYTOTEXT(A2:A10), ",", " | ") for a pipe separator, or =SUBSTITUTE(ARRAYTOTEXT(A2:A10), ",", CHAR(10)) for a line break separator in a Wrap Text cell. For maximum delimiter flexibility, switch to TEXTJOIN, which accepts any text string as the delimiter argument including spaces, bullets, semicolons, tabs, and CHAR codes.
  • What does ARRAYTOTEXT format 1 do?+
    Format 1 (strict mode) changes two things. First, text values are wrapped in double quotes in the output string — so "Alice" appears as "Alice" with quote marks visible in the cell. Second, a space is added after each comma — so the separator becomes ", " instead of ",". Numbers are not quoted in either format. Format 1 is useful when the output will be read by another system that expects quoted string values, or when you are debugging an array and want to see which values are text vs numeric. For human-readable display, format 0 is generally cleaner.
  • Can ARRAYTOTEXT handle a 2D array (multiple rows and columns)?+
    Yes. When you pass a multi-row, multi-column range to ARRAYTOTEXT, it reads the values left-to-right across each row, then moves to the next row. So the 2×2 range {A,B;C,D} produces "A,B,C,D" in format 0. All values from all rows and columns are flattened into a single comma-separated string. There is no row separator — the transition from one row to the next looks the same as the transition from one column to the next. If you need row separators, use TEXTJOIN with a different approach, or use ARRAYTOTEXT separately on each row and then concatenate the row results with a newline separator.