Common Use Cases for Splitting by Column
- Regional reports — split a nationwide sales file into North, South, East, West files for each regional manager
- Department billing — split a company expense report by department code so each team sees only their rows
- Product category feeds — split a product catalogue by category for separate buyers or suppliers
- Monthly data — split a full-year transaction log by month so each period is in its own sheet
Method 1: Manual Filter and Copy (Works for 2–4 Groups)
For a small number of distinct values, the filter approach is quick:
- Select your data and apply a filter: Data → Filter (or Ctrl+Shift+L)
- Click the dropdown on your grouping column and select one value (e.g., "North")
- Select all visible rows (Ctrl+A), copy (Ctrl+C)
- Insert a new sheet (click the + tab), paste (Ctrl+V)
- Rename the sheet to match the filter value
- Return to the data sheet, change the filter to the next value, and repeat
When to avoid it: If you have more than 4–5 distinct values, this becomes error-prone and tedious. One wrong paste puts the wrong data in the wrong sheet with no easy way to detect the error.
Method 2: VBA Macro (Handles Any Number of Groups)
This macro reads all distinct values in a specified column and creates one sheet per value automatically:
Sub SplitByColumn()
Dim ws As Worksheet
Dim newWs As Worksheet
Dim colIndex As Integer
Dim dict As Object
Dim key As Variant
Dim lastRow As Long
Dim i As Long
Set ws = ThisWorkbook.Sheets(1)
colIndex = 2 ' Change to the column number you want to split by (B = 2)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Set dict = CreateObject("Scripting.Dictionary")
' Collect unique values
For i = 2 To lastRow ' Start at 2 to skip header
dict(CStr(ws.Cells(i, colIndex).Value)) = 1
Next i
' Create a sheet per unique value
For Each key In dict.Keys
On Error Resume Next
Application.DisplayAlerts = False
ThisWorkbook.Sheets(key).Delete
Application.DisplayAlerts = True
On Error GoTo 0
Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
newWs.Name = Left(key, 31) ' Sheet names max 31 chars
ws.Rows(1).Copy newWs.Rows(1) ' Copy header
Dim destRow As Long
destRow = 2
For i = 2 To lastRow
If CStr(ws.Cells(i, colIndex).Value) = key Then
ws.Rows(i).Copy newWs.Rows(destRow)
destRow = destRow + 1
End If
Next i
Next key
MsgBox "Split complete. " & dict.Count & " sheets created."
End SubChange colIndex = 2 to the column number containing your grouping values (A=1, B=2, C=3, etc.). Press Alt+F11, insert a Module, paste the code, and run it with F5.
Method 3: Free Split by Column Tool (No Code, No Excel Required)
The ExcelErrorFinder Split Excel tool handles this visually in your browser:
- Go to the free split tool
- Upload your Excel file
- The tool detects your column headers — click the column you want to split by
- It shows a preview: each unique value in the column, with its row count and percentage of the total
- Click Download All Splits — this creates one workbook with each group as a separate sheet
- Or click the download icon next to any individual group to download just that group as its own file
The header row is automatically copied to every sheet. Files never leave your browser.
Choosing Between "Separate Sheets" vs "Separate Files"
Both approaches are valid depending on your goal:
- Separate sheets in one workbook — easier to distribute as one file, easier to compare groups side by side, simpler to audit
- Separate files — better when you need to send each group only their own data (they won't see other groups), or when downstream systems expect individual files
The free split tool supports both: download all splits as separate sheets in one workbook, or individually download each group as its own .xlsx file.
After Splitting: Audit Each File
Before distributing split files, run a quick check: does each sheet's row count add up to the original total? Run the free spreadsheet auditor on the combined output to catch any formula errors or broken references introduced during the split.