Stop Using CONCATENATE — Try This Instead for De-Concatenate Excel Formula

Yes, you can de-concatenate text in Excel without Power Query or macros. But if you’re still using FIND + MID with nested IFERRORs, you’re adding 8 extra minutes per sheet—and breaking when names contain commas.

Quick Answer

Use TEXTSPLIT (Excel 365/2021) for clean, dynamic splits by delimiter; otherwise, combine SEARCH, LEN, and SUBSTITUTE in a single formula like =TRIM(MID(SUBSTITUTE($A2,"|",REPT(" ",100)),(C$1-1)*100+1,100)) — it handles inconsistent spacing and embedded delimiters better than LEFT/RIGHT combos.

All the Methods

MethodStepsBest ForLimitations
TEXTSPLIT=TEXTSPLIT(A2,"|")Modern Excel users; consistent delimiters❌ Not available in Excel 2019 or earlier
FILTERXML + SUBSTITUTE=FILTERXML(""&SUBSTITUTE(A2,"|","")&"","//s["&COLUMN(A1)&"]")Excel 2013+, XML-aware environments❌ Fails if text contains <, >, or &
SUBSTITUTE + REPT + MID=TRIM(MID(SUBSTITUTE($A2,"|",REPT(" ",100)),(C$1-1)*100+1,100))All Excel versions; messy real-world data❌ Requires column header numbering (1,2,3…)
Text to ColumnsData tab → Text to Columns → Delimited → choose separatorOne-time clean splits; no formulas needed❌ Overwrites original data; not dynamic
Power QueryGet Data → From Table/Range → Split Column → By DelimiterLarge datasets; repeatable workflows❌ Adds refresh dependency; slower for small batches
Legacy LEFT/RIGHT/FIND=LEFT(A2,FIND("|",A2)-1), =MID(A2,FIND("|",A2)+1,FIND("|",A2,FIND("|",A2)+1)-FIND("|",A2)-1)Simple two-part strings only❌ Breaks instantly with missing or extra delimiters
Custom LAMBDA (named)Define DECONCAT in Name Manager using REDUCE/SPLIT logicTeams using Excel 365; reusable across workbooks❌ Requires admin rights to save named functions

Method 1 Deep Dive

Let’s say your procurement team pasted supplier data into A2:A11 like this:

A2:A11
Acme Corp|2024-03-15|$45,200|Pending
Zephyr Ltd|2024-04-02|$12,850|Approved
Nova Labs|2024-02-28|$89,100|Shipped
Terra Systems|2024-05-11|$3,400|Draft
Orion Dynamics|2024-01-19|$67,500|Cancelled

You want columns B (Company), C (Date), D (Amount), E (Status). Start in B2 with:

=TRIM(MID(SUBSTITUTE($A2,"|",REPT(" ",100)),(COLUMN(B1)-1)*100+1,100))

Drag right to E2, then down to row 11. Why 100? Because it’s longer than any field (even “Orion Dynamics” is just 17 chars). The trick? COLUMN(B1) returns 2 — so first column gets position (2−1)×100+1 = 101, second gets 201, etc. That’s how it jumps past each pipe. Bonus: it auto-trims whitespace, so “| $45,200 |” becomes “$45,200”, not “ $45,200 ”.

Pro tip: If your delimiter is a space or comma, replace REPT(" ",100) with REPT("~",100) and wrap the whole thing in SUBSTITUTE to avoid splitting on natural spaces inside company names.

Method 2 Deep Dive

TEXTSPLIT is faster—but only if your version supports it. In Excel 365, paste the same list into A2:A6. In B2, type:

=TEXTSPLIT(A2,"|")

It spills results automatically across B2:E2. No dragging. No headers needed. But here’s what most people miss: TEXTSPLIT respects empty segments. If one row reads Alpha Inc||$22,000|, it returns four values — including blanks. To suppress blanks, wrap it: =TEXTSPLIT(A2,"|",,TRUE). The fourth argument TRUE ignores empty strings.

And yes—it works with arrays. Try =TEXTSPLIT(A2:A6,"|") in B2. It spills 5 rows × 4 columns all at once. Just make sure you’ve got enough blank cells to the right and down. Hit Ctrl+Shift+Enter only if you’re in legacy array mode — modern Excel does it natively.

Surprising twist: TEXTSPLIT accepts multiple delimiters as an array. So =TEXTSPLIT(A2,{"|",";","—"}) splits on pipes, semicolons, or em-dashes — perfect for cleaning up copied web data from Alibaba product specs.

Cheat Sheet

TaskFormula / ShortcutNotes
Split by pipe, all Excel versions=TRIM(MID(SUBSTITUTE($A2,"|",REPT(" ",100)),(COLUMN(B1)-1)*100+1,100))Paste in B2, drag right/down. Use 200 instead of 100 for very long fields.
Dynamic split (Excel 365)=TEXTSPLIT(A2,"|",,TRUE)Ignores empty segments. Spills automatically.
One-time clean splitSelect column → Alt+AEDKeyboard shortcut for Text to Columns. Choose “Delimited”, then check “Other” and type “|”.
Split on multiple delimiters=TEXTSPLIT(A2,{"|",";","—"})Works only in Excel 365. Returns #N/A if no match — wrap in IFERROR if needed.
Extract nth segment only=INDEX(TEXTSPLIT(A2,"|"),1,3)Gets 3rd item (e.g., amount) from pipe-delimited string. Safe even if fewer than 3 segments exist.
Lisa Anderson

Lisa Anderson

Lisa is a certified Microsoft trainer who writes step-by-step guides for Power Automate