Tip: Other languages are Google-Translated. You can visit the English version of this link.
Log in
x
or
x
x
Register
x

or
0
0
0
s2smodern

How to split data into multiple worksheets based on column in Excel?

Supposing you have a worksheet with huge rows of data, and now, you need to split the data into multiple worksheets based on the Name column (see following screenshot), and the names are entered randomly. Maybe you can sort them first, and then copy and paste them one by one into other new worksheets. But this will need your patience to copy and paste repeatedly. Today, I will talk about some quick tricks to solve this task.

doc split data by columns 1

Split data into multiple worksheets based on column with VBA code

Split data into multiple worksheets based on column with Kutools for Excel


Split data into multiple worksheets based on specific column or rows count in worksheet:

If you want to split a large worksheet into multiple sheets based on specific column data or rows count, the Kutools for Excel's Split Data feature can help you to solve this task quickly and easily.

doc split data by columns 6

Kutools for Excel: with more than 200 handy Excel add-ins, free to try with no limitation in 60 days. Download and free trial Now!


Split data into multiple worksheets based on column with VBA code


If you want to split the data based on column value quickly and automatically, the following VBA code is a good choice. Please do as this:

1. Hold down the ALT + F11 keys to open the Microsoft Visual Basic for Applications window.

2. Click Insert > Module, and paste the following code in the Module Window.

Sub parse_data()
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
vcol = 1        
Set ws = Sheets("Master sheet")        
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = "A1:C1"            
titlerow = ws.Range(title).Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
For i = 2 To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
Sheets(myarr(i) & "").Columns.AutoFit
Next
ws.AutoFilterMode = False
ws.Activate
End Sub

Note: In the above code:

  • vcol =1 , the number 1 is the column number that you want to split the data based on.
  • Set ws = Sheets("Master sheet"), Master sheet is the sheet name that you want to apply this code.
  • title = "A1:C1" , A1:C1 is the range of the title.

All of them are variables, you can change them as your need.

3. Then press F5 key to run the code, all data in the active worksheet are split into multiple worksheets by the column value. And the split worksheets are named with the split cell names. See screenshot:

doc split data by columns 2

Note: The split worksheets are placed in the end of the workbook where the master worksheet is in.


Split data into multiple worksheets based on column with Kutools for Excel

As an Excel beginner, this long VBA code is somewhat difficult for us, and most of us even don't know how to modify the code as our need.

Here, I will introduce you a multifunctional tool--Kutools for Excel, its Split Data utility not only can help you to split data into multiple worksheets based on column, but also can split data by rows count.

Kutools for Excel : with more than 120 handy Excel add-ins, free to try with no limitation in 60 days. 

If you have installed Kutools for Excel, please do as follows:

1. Select the range of data that you want to split.

2. Click Kutools Plus > Worksheet > Split Data, see screenshot:

doc split data by columns 3

3. In the Split Data into Multiple Worksheets dialog box, you need to:

1). Select Specific column option in the Split based on section, and choose the column value which you want to split the data based on in the drop-down list. (If your data has headers and you want to insert them into each new split worksheet, please check My data has headers option.)

2). Then you can specify the split worksheet names, under the New worksheets name section, specify the worksheet names rules from the Rules drop down list, you can add the Prefix or Suffix for the sheet names as well.

3). Click the OK button. See screenshot:

doc split data by columns 4

4. Now the data are split into multiple worksheets in a new workbook.

doc split data by columns 5

Click to Download Kutools for Excel and free trial Now!


Split data into multiple worksheets based on column with Kutools for Excel

Kutools for Excel includes more than 120 handy Excel tools. Free to try with no limitation in 60 days. Download the free trial now!


Related article:

How to split data into multiple worksheets by rows count?


Recommended Productivity Tools

Office Tab

gold star1 Bring handy tabs to Excel and other Office software, just like Chrome, Firefox and new Internet Explorer.

Kutools for Excel

gold star1 Amazing! Increase your productivity in 5 minutes. Don't need any special skills, save two hours every day!

gold star1 200 New Features for Excel, Make Excel Much Easy and Powerful:

  • Merge Cell/Rows/Columns without Losing Data.
  • Combine and Consolidate Multiple Sheets and Workbooks.
  • Compare Ranges, Copy Multiple Ranges, Convert Text to Date, Unit and Currency Conversion.
  • Count by Colors, Paging Subtotals, Advanced Sort and Super Filter,
  • More Select/Insert/Delete/Text/Format/Link/Comment/Workbooks/Worksheets Tools...

Screen shot of Kutools for Excel

btn read more      btn download     btn purchase

Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
People in conversation:
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Henrik · 2 years ago
    Hi,
    the code works fine for most of the data. However, some sheets are created without the title and without data. This happens without a (for me) visible pattern. The sheet is created but the entire range of data is simply not copied into the sheet and the sheet name is e.g. Sheet4 if is it the 4th sheet. When it happens, it happens for the entire range of that specific title area.
    It doesn't stop the process, as some sheets are correctly created later during the macro...

    Screendump: [url]https://www.dropbox.com/s/xnjcurt4ub01d1j/Screen%20Shot%202015-10-02%20at%2017.27.28.png?dl=0[/url]
    • To post as a guest, your comment is unpublished.
      John · 2 years ago
      I had the same issue and it looks to me like the number of characters in the cells that were skipped might be too long? Anyone think that might be the problem??

      [quote name="Henrik"]Hi,
      the code works fine for most of the data. However, some sheets are created without the title and without data. This happens without a (for me) visible pattern. The sheet is created but the entire range of data is simply not copied into the sheet and the sheet name is e.g. Sheet4 if is it the 4th sheet. When it happens, it happens for the entire range of that specific title area.
      It doesn't stop the process, as some sheets are correctly created later during the macro...

      Screendump: [url]https://www.dropbox.com/s/xnjcurt4ub01d1j/Screen%20Shot%202015-10-02%20at%2017.27.28.png?dl=0[/url][/quote]
      • To post as a guest, your comment is unpublished.
        Henrik · 2 years ago
        Hi John - You are right!
        It was the length/number of characters in the cells that are used as sheet-names... i shortened them a bit (to 30 I think) and then the problem disappeared.
        :)
  • To post as a guest, your comment is unpublished.
    Rhys · 2 years ago
    Hi

    This code works perfectly for seven tabs, however after that I have the following error "excel cannot complete this task with available resources choose less data or close other application"

    my data on sheet1 is A-E with 16133 rows.

    Is this due to my pc only running 4gb ram?
  • To post as a guest, your comment is unpublished.
    MF · 2 years ago
    Hello

    When I try to use this it only copies the title into each new workbook. What do I need to change in order to have all rows associated with a given column value into the new worksheets. I have Data in Columns A2 through N3200
  • To post as a guest, your comment is unpublished.
    McMoeLee · 2 years ago
    Really great Work!! Helps me a lot!
    Copy, Little adapt for my needs, works like a charm!
  • To post as a guest, your comment is unpublished.
    mona · 2 years ago
    IF I am trying the code for huge data, it is showing runtime error in "For i = 2 To lr" line.
    Please help me with this
    • To post as a guest, your comment is unpublished.
      Amanda · 2 years ago
      I ran into the same issue. I found that if I cut down the size of my table (It went from around 40,000 to about 20,000 rows) I no longer got the error.

      What I'm not sure is: What's the max number of rows the macro can support? I could play around with it... It's somewhere between 20k and 40k!