How to automatically split excel rows into separate sheets by column value
- Step 1Open the Conditional Splitter and drop in your file — Drag a single
.xlsx,.xls,.ods, or.csvfile onto the upload zone. The tool reads the first sheet of the workbook. If your data lives on a later tab, move it to the front (or save just that sheet) before uploading — there is no sheet picker. - Step 2Type the exact split-column header — In the Split column box, type the header text of the column whose unique values define your groups — for example
RegionorOwner. This is a free-text field, not a dropdown, so spelling and capitalisation must match the header in your file exactly. A mismatch sends every row to one__blank__tab. - Step 3Confirm you are on Pro tier or higher — The Conditional Splitter is a Pro-tier tool. Free accounts are blocked with
Conditional Splitter requires Pro tier. Free still caps files at 5 MB / 10,000 rows; Pro lifts that to 50 MB / 100,000 rows, Pro-media to 200 MB / 500,000 rows, and Developer to 500 MB / unlimited rows. - Step 4Run the split — Click run. The tool groups every row by the split-column value in memory, sanitises each value into a valid sheet name, de-duplicates collisions, and assembles a single multi-sheet workbook. There is no server round-trip — processing time scales with row count and your machine's memory.
- Step 5Reconcile the per-group summary — The results panel shows
N sheets createdplus a badge per group with its row count (first 20 groups shown). Add those row counts up and check the sum equals your input row count. A surprise extra tab named__blank__means some rows had no value in the split column. - Step 6Download split-output.xlsx and distribute — Download the workbook (
split-output.xlsx). Every tab carries the header row and only the rows for its group. Send the whole workbook, or open it in Excel and right-click → Move or Copy a single tab into a new file for one-recipient delivery.
What the tool actually does (option and behaviour matrix)
The Conditional Splitter exposes exactly one control. Everything else below is fixed behaviour baked into the processor — there are no presets, no multi-column grouping, and no output-format choice.
| Control / behaviour | Value | Notes |
|---|---|---|
splitColumn (only option) | Free-text box labelled Split column, required | You type the header name; there is no dropdown. Must match the column header exactly (case-sensitive, whitespace-sensitive) |
| Grouping key | Unique values of the split column | One output tab per distinct value. Rows with an empty/missing value group under __blank__ |
| Input sheet read | First sheet only | fileToRows reads sheet index 0. Data on later tabs is ignored |
| Output | Single .xlsx workbook, split-output.xlsx | Binary download. Not a ZIP and not separate files — one workbook, many tabs |
| Header handling | Copied to every tab | The header row is written as the first row of each output sheet automatically |
| Tab naming | Group value, sanitised + truncated to 31 chars | : \ / ? * [ ] → _; empty name → _; collisions get _2, _3 suffixes |
Tier limits for the Conditional Splitter
The splitter is Pro-and-up. Limits are enforced on the input file (size and row count), not on the number of output tabs. There is no documented cap on the number of tabs other than what your browser memory and Excel can hold.
| Tier | Max file size | Max rows | Available? |
|---|---|---|---|
| Free | 5 MB | 10,000 | No — blocked, Pro required |
| Pro | 50 MB | 100,000 | Yes |
| Pro-media | 200 MB | 500,000 | Yes |
| Developer | 500 MB | Unlimited | Yes |
Tab-name sanitisation examples
How raw split-column values become valid Excel sheet names. Excel forbids : \ / ? * [ ] in tab names, caps them at 31 characters, and rejects duplicates.
| Raw value in split column | Resulting tab name | Why |
|---|---|---|
North America | North America | Under 31 chars, no forbidden characters — used as-is |
Q1/Q2 Pipeline | Q1_Q2 Pipeline | / replaced with _ |
Strategic Accounts — Enterprise Tier | Strategic Accounts — Enterpri | Truncated to 31 characters |
| (empty cell) | __blank__ | Missing/empty split value groups under the literal __blank__ key |
Sales (appears twice after truncation) | Sales, then Sales_2 | Collision resolved with a numeric suffix |
Cookbook
Real before/after shapes from flat exports. Values anonymised. The pipe in input examples marks the column boundary; output shows the resulting tabs.
Split a CRM export into one tab per owner
A flat opportunities export has every sales rep's deals in one sheet. Naming the Owner column produces one tab per rep — hand each one their slice without exposing the whole pipeline.
Input (Deals sheet, first sheet of the file): Deal | Amount | Owner Acme Renewal | 12000 | Dana Globex POC | 4500 | Sam Initech Q3 | 8000 | Dana Umbrella New | 22000 | Sam Split column: Owner Output: split-output.xlsx Tab "Dana": Acme Renewal (12000), Initech Q3 (8000) Tab "Sam": Globex POC (4500), Umbrella New (22000) Results panel: 2 sheets created — Dana (2), Sam (2)
Verify totals reconcile before sending
Always add the per-group badge counts and compare to the input row count. A mismatch means rows fell into an unexpected bucket — usually __blank__.
Input rows (excluding header): 1,204 Results panel after split on "Region": EMEA (512) AMER (430) APAC (255) __blank__ (7) Check: 512 + 430 + 255 + 7 = 1,204 ✓ The 7 __blank__ rows had no Region value — open that tab and backfill the region before final distribution.
Forbidden characters in the split value
Tab names cannot contain : \ / ? * [ ]. The splitter replaces each with an underscore, so distinct raw values that differ only in a forbidden character can collide and get a numeric suffix.
Input split-column values:
"FY24/Q1"
"FY24:Q1"
Sanitised tab names:
"FY24/Q1" -> "FY24_Q1"
"FY24:Q1" -> "FY24_Q1" (collision)
-> renamed "FY24_Q1_2"
The data is correct on each tab; only the tab NAME was
adjusted. Check the badge labels to map tabs back to values.Point a raw CSV at it without converting
Input accepts .csv as well as .xlsx. A raw comma-delimited export splits straight into a multi-tab .xlsx — no save-as-xlsx step first.
Input file: tickets.csv id,subject,status 101,Login bug,Open 102,Refund,Closed 103,Sync fail,Open Split column: status Output: split-output.xlsx (an XLSX even though input was CSV) Tab "Open": 101 Login bug, 103 Sync fail Tab "Closed": 102 Refund
Hand off a single tab to one recipient
The tool always emits one workbook. To deliver just one group as its own file, split first, then extract the tab in Excel.
1. Split tickets by "assignee" -> split-output.xlsx (8 tabs) 2. Open in Excel 3. Right-click the "priya" tab -> Move or Copy... 4. To book: (new book) -> tick "Create a copy" -> OK 5. Save the new single-sheet file as priya-tickets.xlsx The splitter does the bucketing; Excel does the one-off extract.
Edge cases and what actually happens
Split column typed with a typo or wrong case
Everything lands in __blank__The split column is a free-text field matched exactly against your headers. If you type region but the header is Region, or Owner with a trailing space, no rows match the column — every row reads as a missing value and is grouped into one __blank__ tab. If you get a single __blank__ tab covering all rows, the column name is wrong; re-check the exact header spelling and capitalisation.
Free-tier account
Pro tier requiredThe processor throws Conditional Splitter requires Pro tier for Free accounts. Upgrade to Pro (or higher) to use the tool. Free tier additionally caps any Excel file at 5 MB / 10,000 rows; Pro lifts that to 50 MB / 100,000 rows.
Data lives on the second or third sheet
Only the first sheet is splitThe tool reads sheet index 0 only. If your real data is on a later tab, those rows are never seen and the output reflects whatever was on the first sheet (often a cover or summary tab). Move the data sheet to the front of the workbook, or save it as a standalone file, before uploading.
Empty or missing values in the split column
Grouped under __blank__Rows whose split-column cell is empty are grouped under the literal key __blank__ and get their own tab. This is by design and surfaced in the per-group summary, so you can spot and backfill ungrouped rows rather than silently losing them.
Two values collide after sanitisation
By design — numeric suffixDistinct raw values that map to the same sanitised, truncated name (for example two long category names that share their first 31 characters, or values differing only by a forbidden character) collide. The second gets _2, the third _3, and so on. The data is still split correctly per value; only the tab label is adjusted. Use the badge labels to map tabs back to their source values.
Hundreds of unique values
SupportedEvery unique value produces a tab — there is no built-in cap on tab count. A high-cardinality column (for example a per-customer ID) can produce hundreds or thousands of nearly empty tabs, which is slow to open in Excel and rarely what you want. Split on a low-cardinality dimension (region, status, owner, category) instead; if you genuinely need per-row separation, that is a different operation.
Input file over the tier row or size limit
Rejected at uploadFiles larger than your tier's size cap (5 MB Free / 50 MB Pro / 200 MB Pro-media / 500 MB Developer) or row cap (10,000 / 100,000 / 500,000 / unlimited) are rejected before processing. For very large files, upgrade the tier or pre-filter rows you don't need.
Expecting a ZIP of separate files
Single workbook by designThe output is one .xlsx workbook with many tabs, named split-output.xlsx — not a ZIP of individual files. If your downstream process needs one file per group, split here and then extract each tab in Excel (Move or Copy → new book), or use a script to fan the tabs out into separate files.
Numbers and dates in non-split columns
Preserved as displayedThe reader parses the file with date coercion on and formats values for output, so dates and numbers carry through to each tab as you see them. The split itself only inspects the chosen column's value; all other columns are copied verbatim into their group's tab.
Header row contains duplicate column names
Last duplicate wins on readIf your source has two columns with the identical header, the row parser keys cells by header name, so the second duplicate overwrites the first when rows are read. Rename duplicate headers first — for header cleanup use the canonical header rename tool — then split.
Frequently asked questions
Does this create separate files or separate sheets?
Separate sheets inside one workbook. The output is a single .xlsx file called split-output.xlsx with one tab per unique value of your split column. It is not a ZIP archive and not one file per value. To deliver a single group as its own file, split here and then right-click the tab in Excel → Move or Copy → (new book).
How do I choose which column to split on?
Type the column's header text into the Split column box. It is a free-text field, not a dropdown, so the text must match the header in your file exactly — same spelling, same capitalisation, no stray spaces. If every row ends up on a single __blank__ tab, the column name didn't match.
Are the column headers kept on every sheet?
Yes. The header row is written as the first row of each output tab automatically, so every sheet is self-describing and ready to filter, sort, or distribute on its own.
What happens to rows with a blank value in the split column?
They are grouped together under a tab named __blank__. This is intentional so ungrouped rows are visible rather than dropped. The per-group summary lists the __blank__ count, prompting you to backfill those values if needed.
Why is my tab name shorter than the value, or has underscores?
Excel caps sheet names at 31 characters and forbids : \ / ? * [ ]. The tool truncates long values to 31 characters and replaces each forbidden character with an underscore. If two values produce the same sanitised name, the second gets a _2 suffix. The row data is unaffected — only the label changes.
Can I split on more than one column at once?
No. The tool groups by a single column's unique values. For a two-dimensional breakdown (for example Region × Product), either run the split twice in sequence on the resulting tabs, or build a helper column that concatenates the two keys first and split on that combined column.
Which sheet does it read if my workbook has several?
Only the first sheet (index 0). Data on later tabs is ignored. Move the sheet you want split to the front of the workbook, or save it as a standalone file, before uploading.
Does it accept CSV input?
Yes — .csv (and .xls/.ods) are accepted alongside .xlsx. A CSV input still produces an .xlsx workbook on output, so you don't need to convert the file to Excel first.
Is there a limit on how many tabs it can create?
There is no fixed cap in the tool — every unique value gets a tab, limited in practice by your browser memory and what Excel can open. Splitting on a high-cardinality column (like a unique ID) can produce thousands of tiny tabs, which is rarely useful. Split on a low-cardinality dimension instead.
What tier do I need, and what are the size limits?
Pro tier or higher. Free is blocked. Size and row limits are: Free 5 MB / 10,000 rows, Pro 50 MB / 100,000 rows, Pro-media 200 MB / 500,000 rows, Developer 500 MB / unlimited. Limits apply to the input file, not the output tab count.
Is my data uploaded anywhere?
No. Processing runs entirely in your browser via SheetJS. The file's contents never reach a server — only an anonymous usage counter (no content) is recorded for signed-in dashboard stats, which you can opt out of in account settings.
What if I need to clean the data before splitting?
Run the cleanup first, then split. For deduplication use the fuzzy deduplicator, to standardise dates use the date standardiser, and to reshape wide tables into long form use the unpivot tool. For column renaming, the canonical tool is the header rename utility.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.