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
| Method | Steps | Best For | Limitations |
|---|---|---|---|
| TEXTSPLIT | =TEXTSPLIT(A2,"|") | Modern Excel users; consistent delimiters | ❌ Not available in Excel 2019 or earlier |
| FILTERXML + SUBSTITUTE | =FILTERXML(" | 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 Columns | Data tab → Text to Columns → Delimited → choose separator | One-time clean splits; no formulas needed | ❌ Overwrites original data; not dynamic |
| Power Query | Get Data → From Table/Range → Split Column → By Delimiter | Large 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 logic | Teams 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
| Task | Formula / Shortcut | Notes |
|---|---|---|
| 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 split | Select column → Alt+A → E → D | Keyboard 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. |