How to split a Google Sheet by column value
One sheet in, one file per distinct value in a column — the thing Sheets has no menu command for.
Google Sheets has no split command. What it has is three partial answers — one that only changes your view, one that copies data into new tabs, and one that genuinely writes files but requires code. Here is each, in the order people usually try them.
Filter views, QUERY, then Apps Script
Minutes for the first two; an hour or more for the one that produces files
- 1
Filter views — fastest, but changes nothing
Data → Create a filter view, then filter your column to one value. Unlike a plain filter, a filter view does not disturb what collaborators see. It is genuinely useful for reading, and it produces no files at all — you are still looking at one sheet.
- 2
A QUERY formula per group
Add a tab per group and put =QUERY('Data'!A:Z, "select * where Col3 = 'North'", 1) in A1 of each. The tab fills itself and stays live as the source changes. You need to write one formula per group and know each value in advance.
- 3
UNIQUE to find the values first
=UNIQUE(Data!C:C) gives you the distinct list, so at least the group names are not typed by hand. This is the step that makes the QUERY route tolerable, and the step most tutorials leave out.
- 4
Apps Script, to actually get files
Extensions → Apps Script, then write a script that reads the sheet with getDataRange().getValues(), groups the rows in memory, and calls SpreadsheetApp.create() for each group — appending rows with setValues() and, if you want them as files in a folder, DriveApp to move them.
- 5
Authorise and run it
The first run triggers an OAuth consent screen. Because the script is unverified, you have to click through the 'Google hasn't verified this app' warning via Advanced → Go to (unsafe) before it will execute.
Where it breaks
- Filter views and QUERY formulas produce views and tabs, never files. If what you owe someone is twelve spreadsheets, neither has finished the job.
- Apps Script has a hard six-minute execution limit on consumer accounts. A split that creates a few dozen spreadsheets routinely exceeds it, and the script dies partway — leaving some groups written and others not, with no transaction to roll back.
- SpreadsheetApp.create() is slow because each call is a network round trip, and Google's daily quota on document creation is real. A large split can fail on quota rather than on logic, which reads as a random error.
- The unverified-app warning is a genuine problem when you are not the only user. Asking a colleague to click past a security interstitial to run your split script is a hard sell, and in many Workspace domains an admin has disabled that path entirely.
Or do it here, in two clicks more
This runs in your browser, so it reads a downloaded file rather than connecting to your Google account — no Drive access, no consent screen, no signup. The export is the only extra step:
- 1In your Sheet, choose File → Download → Comma Separated Values (.csv). That is the whole prerequisite — two clicks.
- 2Drop the downloaded file below. It is read in your browser; it is not uploaded anywhere.
- 3Pick the column to split by and run it. You get one file per distinct value, named after the value.
Runs entirely in your browser · No upload · No signup · Open the network tab and check
Questions
Why can't I just connect my Google Sheet directly?
Because connecting would mean asking for access to your Drive, and then your data would travel to a server to be processed. RowDocs runs entirely in your browser and has no server to send it to — which is the same reason it needs no signup. The cost of that design is the two-click export; the benefit is that your data never leaves your machine.
Does the export lose anything?
A CSV export takes the current sheet's values, so formulas come across as their results, and formatting, notes and multiple tabs do not come across at all. For splitting a flat list of rows — which is what this job is — that is exactly what you want. If you need formatting preserved, download as .xlsx instead and use the Excel splitter.
What about the six-minute Apps Script limit — is there a way around it?
The usual workaround is batching: process a slice of the groups per run and use a time-driven trigger to continue, storing progress in PropertiesService. It works, and it roughly doubles the amount of code you are maintaining for a task you do once a month.
Working in Excel instead?
Split CSV by Column covers the same job from an .xlsx or .csv file, with the Excel methods — Power Query, VBA and the rest — written out in full.