TEXTSPLIT in Excel 365: The Ultimate Way to Split Text into Columns/Rows

TEXTSPLIT function in Excel 365 — showing three transformation examples: a comma-separated string split into four columns, a mixed comma-and-semicolon string split using multiple delimiters into five clean tokens, and a semicolon-and-comma delimited string split into a 3×3 two-dimensional table, with key formulas for row splitting, Key=Value parsing, in-cell CSV with DROP, and a TEXTJOIN rejoin pipeline.
A cell contains “Alice, Bob; Carol” — TEXTSPLIT splits it into three separate values in one formula. It is fully dynamic, updates when the source changes, and handles multiple delimiters in a single call. This guide covers eight examples: splitting by a single delimiter into columns or rows, using multiple delimiters as an array with TRIM via LET, 2D splits with both row and column delimiters, Key=Value pair parsing with CHOOSECOLS and VLOOKUP, in-cell CSV parsing with DROP and SORT, counting and extracting tokens by index, case-insensitive splitting for natural language data, and a complete split-clean-sort-rejoin pipeline using LET, TRIM, SORT, and TEXTJOIN.

A cell contains "Alice, Bob; Carol". How do you split it into three separate values? Excel 365’s TEXTSPLIT does this in one formula. It splits a text string by one or more delimiters into a spilled array. The result can span columns, rows, or both simultaneously. Before TEXTSPLIT, the only options were Text to Columns (destructive and manual) or a complex MID, FIND, and LEN chain. TEXTSPLIT is fully dynamic, updates when the source changes, and handles multiple delimiters in a single call.

This guide covers all six TEXTSPLIT arguments, with eight practical examples. You will learn how to split by multiple delimiters, split into rows, ignore blank tokens, and parse Key=Value strings. You will also combine TEXTSPLIT with TRIM and ARRAYTOTEXT. Each example also compares TEXTSPLIT to the Text to Columns wizard so you see exactly what changes.

Availability: TEXTSPLIT is available in Excel 365 only (March 2022 or later). It is not in Excel 2021, 2019, or Google Sheets. For older versions, use Data → Text to Columns for a one-off split. Alternatively, use a MID, FIND, and LEN formula chain. TEXTSPLIT does not require Ctrl+Shift+Enter and spills automatically.

What Does TEXTSPLIT Do?

TEXTSPLIT divides a text string into parts using one or more delimiter characters. By default, it splits into columns — each token becomes a separate column in the same row. Specifying a row delimiter instead (or in addition) splits into rows or creates a two-dimensional array. The result spills into as many cells as needed automatically.

The key advantages over Text to Columns are dynamic updating and multi-delimiter support. Specifically, these two capabilities cover most real-world text-splitting scenarios. Text to Columns is destructive — it overwrites adjacent cells and does not update when the source changes. TEXTSPLIT, by contrast, recalculates whenever the source cell changes. Additionally, you can pass multiple delimiters as an array. This handles messy real-world data where commas, semicolons, and spaces appear mixed.

What Is the TEXTSPLIT Syntax?

=TEXTSPLIT(text, col_delimiter, [row_delimiter], [ignore_empty], [match_mode], [pad_with])
ArgumentRequired?Description
textRequiredThe text string to split. A cell reference, text value, or formula result that returns text.
col_delimiterRequiredThe character(s) that separate columns. Can be a single string, an array of strings {"," , ";"}, or empty string "" (splits every character). Omit (use "") to split only by row_delimiter.
row_delimiterOptionalThe character(s) that start a new row. Used to create 2D split results. Omit for column-only splitting.
ignore_emptyOptionalFALSE (default) = keep blank tokens from adjacent delimiters. TRUE = discard empty tokens (useful for messy data with repeated delimiters).
match_modeOptional0 (default) = case-sensitive matching. 1 = case-insensitive matching.
pad_withOptionalValue to fill empty positions in a 2D result where rows have different lengths. Default is #N/A. Use "" for blank.
Multiple delimiters as an array: To split by both comma and semicolon, pass them as an array: =TEXTSPLIT(A2, {",",";"}) — this treats both as column delimiters. To also trim spaces, wrap the result with TRIM or use " " as an additional delimiter in the array. The array can contain as many delimiters as needed.

Examples 1–8: TEXTSPLIT in Practice

1
Split by a single delimiter — comma, semicolon, or space

The most common use is splitting comma-separated values into separate columns. Pass the cell and the delimiter character. The result spills horizontally. Each token occupies one column in the same row. This replaces Text to Columns for any situation where the source data may change.

Source (A2)
Token 1
Token 2
Token 3
Token 4
Alice,Bob,Carol,Dave
Alice
Bob
Carol
Dave
Jan-Feb-Mar-Apr
Jan
Feb
Mar
Apr
A2 = "Alice,Bob,Carol,Dave" Split by comma (col_delimiter only, no row delimiter): Result spills into 4 columns. =TEXTSPLIT(A2, ",") → {Alice, Bob, Carol, Dave} (4 columns in one row) Split by hyphen: =TEXTSPLIT(A2, "-") → {Jan, Feb, Mar, Apr} Split by space — useful for "First Last" name splitting: =TEXTSPLIT(A2, " ") → Splits on every space Split into ROWS instead of columns — swap delimiters: Pass the delimiter as row_delimiter (3rd arg), empty col_delimiter (2nd arg). =TEXTSPLIT(A2, "", ",") → Alice, Bob, Carol, Dave each in a separate ROW (vertical result)
2
Multiple delimiters — split by comma and semicolon simultaneously

Real-world data is rarely consistent. A column might contain commas in some cells, semicolons in others, or both mixed. TEXTSPLIT handles this by passing multiple delimiters as an array. All listed delimiters are treated as split points in a single pass. This eliminates the need to run two separate SUBSTITUTE+TEXTSPLIT chains.

A2 = "Alice, Bob; Carol,Dave; Eve" Contains both commas and semicolons as delimiters. Split by both comma and semicolon: {",",";"} is an array of two delimiters. =TEXTSPLIT(A2, {",", ";"}) → {"Alice", " Bob", " Carol", "Dave", " Eve"} Note: leading spaces remain — wrap with TRIM if needed Clean result — TRIM each token to remove surrounding whitespace: LET defines the split result once, TRIM cleans it. =LET( split, =TEXTSPLIT(A2, {",", ";"}), TRIM(split) ) → {"Alice", "Bob", "Carol", "Dave", "Eve"} (spaces removed) Three delimiters — comma, semicolon, and pipe: Add more delimiters to the array as needed. =TEXTSPLIT(A2, {",", ";", "|"}) Ignore empty tokens from consecutive delimiters (ignore_empty = TRUE): "Alice,,Bob" with ignore_empty=FALSE: {Alice, "", Bob}. "Alice,,Bob" with ignore_empty=TRUE: {Alice, Bob} (blank skipped). =TEXTSPLIT(A2, ",", "", TRUE)
3
2D split — both row and column delimiters produce a table

Specifying both a column delimiter and a row delimiter produces a two-dimensional result — a proper table. This is particularly useful for parsing structured text strings where rows are separated by one character (like a newline or semicolon) and columns by another (like a comma or pipe). TEXTSPLIT builds the full table in one formula.

A2 = "Alice,87,Jan;Bob,72,Feb;Carol,65,Mar" Rows separated by semicolons. Columns separated by commas. 2D split — col_delimiter = "," and row_delimiter = ";": Result is a 3×3 table. =TEXTSPLIT(A2, ",", ";") → Row 1: {Alice, 87, Jan} Row 2: {Bob, 72, Feb} Row 3: {Carol, 65, Mar} Parse a multiline cell (CHAR(10) = line break in Excel): A2 contains multiple lines of text separated by line breaks. col_delimiter = "," row_delimiter = CHAR(10) =TEXTSPLIT(A2, ",", CHAR(10)) → Each line becomes a row, each comma-separated item a column Pad uneven rows (rows with different column counts): pad_with = "" fills missing positions with blank. =TEXTSPLIT(A2, ",", ";", "", 0, "")
4
Key=Value parsing — split structured strings into property tables

Many APIs and log files return data in "Key=Value" format, where pairs are separated by a delimiter like "&" or ";". TEXTSPLIT with a 2D split parses these structures directly. Each row becomes one key-value pair. TRANSPOSE or CHOOSECOLS then separates the keys from the values without additional formulas.

A2 = "Name=Alice&Score=87&Dept=Engineering&Date=Jan" Pairs separated by "&". Key and value separated by "=". 2D split: col_delimiter="=" (separates key from value) row_delimiter="&" (separates pairs): =TEXTSPLIT(A2, "=", "&") → {{Name,Alice},{Score,87},{Dept,Engineering},{Date,Jan}} A 4-row × 2-column table (col 1 = keys, col 2 = values) Extract all keys (column 1 of the result): CHOOSECOLS selects only the first column. =CHOOSECOLS(=TEXTSPLIT(A2, "=", "&"), 1) → {Name; Score; Dept; Date} Extract all values (column 2 of the result): =CHOOSECOLS(=TEXTSPLIT(A2, "=", "&"), 2) → {Alice; 87; Engineering; Jan} Look up a specific key’s value (e.g. find the Score): VLOOKUP on the 2D TEXTSPLIT result. =VLOOKUP("Score", =TEXTSPLIT(A2, "=", "&"), 2, 0) → "87"

Examples 5–8: Advanced TEXTSPLIT Patterns

5
In-cell CSV parsing — split an embedded CSV string into a proper table

Sometimes a whole CSV file is pasted into one cell. TEXTSPLIT can parse it directly. Use CHAR(10) as the row delimiter and comma as the column delimiter. The result is a full table that updates if the source cell changes. This is significantly faster than Text to Columns for recurring imports.

A1 contains a multi-line CSV string: "Name,Score,Dept Alice,87,Engineering Bob,72,HR Carol,65,Finance" Parse the entire CSV into a table: CHAR(10) = line break (row delimiter). "," = comma (column delimiter). =TEXTSPLIT(A1, ",", CHAR(10)) → Row 1 (headers): {Name, Score, Dept} Row 2: {Alice, 87, Engineering} Row 3: {Bob, 72, HR} Row 4: {Carol, 65, Finance} Skip the header row using DROP: DROP removes row 1 (the header) from the TEXTSPLIT result. =DROP(=TEXTSPLIT(A1, ",", CHAR(10)), 1) → Data rows only (header removed) Sort the parsed table by Score descending: SORT on column 2 of the TEXTSPLIT result. =SORT(DROP(=TEXTSPLIT(A1, ",", CHAR(10)),1), 2, -1)
6
Split and count — how many tokens are in a delimited string?

Counting tokens in a delimited string used to require counting delimiters with LEN and SUBSTITUTE. TEXTSPLIT makes it simpler: split the string and count the columns. COLUMNS(TEXTSPLIT(...)) returns the number of tokens. This is also useful for validating that a string has the expected number of parts.

A2 = "Alice,Bob,Carol,Dave,Eve" (5 names separated by commas). Count the number of tokens: COLUMNS counts the spilled columns from TEXTSPLIT. =COLUMNS(=TEXTSPLIT(A2, ",")) → 5 (5 comma-separated tokens) Old approach (LEN + SUBSTITUTE — more error-prone): =LEN(A2) - LEN(SUBSTITUTE(A2,",","")) + 1 → Same result but fragile with edge cases Validate token count — check if a string has exactly 4 parts: Returns TRUE if the string contains exactly 4 comma-separated values. =COLUMNS(=TEXTSPLIT(A2, ",")) = 4 → FALSE (5 tokens, not 4) Extract the Nth token directly using INDEX on TEXTSPLIT result: Returns the 3rd comma-separated value. =INDEX(=TEXTSPLIT(A2, ","), 1, 3) → "Carol" (3rd token)
7
Case-insensitive split — match delimiters regardless of case

TEXTSPLIT defaults to case-sensitive delimiter matching. Setting match_mode = 1 makes the split case-insensitive. This is useful for natural language data where a separator word like "AND" might appear as "and", "And", or "AND" in different records. Case-insensitive mode handles all variations in a single formula.

A2 = "Apples AND Bananas and Cherries AND Dates" Delimiter "AND" appears in three different cases. Case-sensitive (default, match_mode = 0): "and" and "And" are NOT matched — only uppercase "AND" is split. =TEXTSPLIT(A2, " AND ") → {Apples, Bananas and Cherries, Dates} (only 3 tokens — missing "and") Case-insensitive (match_mode = 1): All forms of "and" are treated as delimiters. =TEXTSPLIT(A2, " AND ", "", "", 1) → {Apples, Bananas, Cherries, Dates} (4 tokens — all variations matched) Case-insensitive with multiple delimiters: Match "AND", "OR", "BUT" in any case combination. =TEXTSPLIT(A2, {" AND ", " OR ", " BUT "}, "", "", 1)
8
Split and rejoin — clean, reorder, and reassemble a delimited string

Combining TEXTSPLIT with ARRAYTOTEXT (or TEXTJOIN) enables a clean split-process-rejoin workflow. Split a messy string, apply SORT, TRIM, or FILTER to the tokens, then reassemble with TEXTJOIN or ARRAYTOTEXT. This pattern is useful for cleaning tag lists, normalising category strings, and sorting comma-separated values in a cell.

A2 = " Charlie , Alice , Bob ,Dave " (spaces + commas, messy order). Step 1: Split by comma and trim whitespace: LET defines split then applies TRIM. =LET( tokens, TRIM(=TEXTSPLIT(A2, ",")), tokens ) → {Charlie, Alice, Bob, Dave} (clean tokens) Step 2: Sort the tokens alphabetically: =LET( tokens, TRIM(=TEXTSPLIT(A2, ",")), SORT(tokens, 1, 1, TRUE) ) → {Alice, Bob, Charlie, Dave} (sorted horizontally) Step 3: Rejoin into a clean sorted string with TEXTJOIN: TEXTJOIN with ", " delimiter and ignore_empty=TRUE. =TEXTJOIN(", ", TRUE, SORT(TRIM(=TEXTSPLIT(A2, ",")), 1, 1, TRUE) ) → "Alice, Bob, Charlie, Dave" (clean, sorted, rejoined in one formula)

Common Issues and How to Fix Them

TEXTSPLIT returns #VALUE! or #N/A

#VALUE! usually means the delimiter was not found in the text, or the text argument is not a text string — a number passed without TEXT() conversion causes this. #N/A appears in the padded positions of uneven 2D results when pad_with is not specified. Always set pad_with to "" for clean display when using both row and column delimiters.

Tokens have leading or trailing spaces

TEXTSPLIT does not trim whitespace from tokens. A string "Alice, Bob" split by comma produces "Alice" and " Bob" (note the space before Bob). Wrap the result with TRIM: =TRIM(TEXTSPLIT(A2,",")). Alternatively, include the space in the delimiter: =TEXTSPLIT(A2,", ") treats comma-space as a single delimiter, avoiding the issue without a TRIM wrapper.

TEXTSPLIT is Excel 365 only: It is not available in Excel 2021, 2019, or Google Sheets. For compatibility, use Data → Text to Columns for manual one-time splits, or use a SUBSTITUTE+MID+FIND chain for formula-based splitting. The old LEN-based token counter and the MID-FIND extraction pattern are well-documented and work in all Excel versions as fallbacks.

Frequently Asked Questions

  • What does TEXTSPLIT do in Excel?+
    TEXTSPLIT splits a text string into separate cells using one or more delimiters. By default, tokens go into separate columns in the same row. You can also split into rows or produce a 2D table by supplying both delimiter arguments. Multiple delimiters are supported as an array. The result spills automatically and updates when the source text changes. TEXTSPLIT is available in Excel 365 only.
  • How is TEXTSPLIT different from Text to Columns?+
    Text to Columns is a manual, one-time operation. It overwrites adjacent cells and does not update when data changes. TEXTSPLIT is a dynamic formula that recalculates automatically. Additionally, it supports multiple delimiters, row output, 2D table output, and combinations with SORT, TRIM, and FILTER. For data that changes regularly, TEXTSPLIT is almost always the better choice. Text to Columns remains useful for a quick one-off split where no formula maintenance is needed.
  • How do I split text into rows instead of columns?+
    Pass the delimiter as the third argument (row_delimiter) instead of the second (col_delimiter), and pass an empty string as the col_delimiter: =TEXTSPLIT(A2, "", ",") splits by comma into rows. Each token appears in a separate row below the formula cell. Alternatively, use TRANSPOSE on the column result: =TRANSPOSE(TEXTSPLIT(A2, ",")) also produces a vertical result from a column split.
  • How do I extract just one specific token from a TEXTSPLIT result?+
    Wrap TEXTSPLIT in INDEX and specify the column number: =INDEX(TEXTSPLIT(A2,","),1,3) returns the 3rd comma-separated token. The first argument of INDEX is the TEXTSPLIT array, the second is the row (use 1 for a single-row result), and the third is the column (token) number. For the last token, use COLUMNS(TEXTSPLIT(A2,",")) as the column number to always get the final item regardless of how many tokens the string contains.