Solved

How to split data in excel into equal groups? (excel vba)

Posted on 2016-10-28
4
45 Views
Last Modified: 2016-11-22
Hi everyone,

I have a big amount of data in excel (many rows, many columns) and I need to devide it into equal groups. The main problem is that the amount of groups is something that I cannot predict, meaning that on day I need to split it into 12 groups other day into 15. Additionally, the amount of columns and rows also may change, depends on the kind of report we receive. What I need is macro(?) which will allow me to to devide data into separate tabs, but the amount of the tabs is something I need to choose. All data provided in the report need to move.

Is anyone able to help me?

Thank you in advance.
Report.xlsx
0
Comment
Question by:Marta Wilczyńska
  • 2
4 Comments
 
LVL 46

Expert Comment

by:Martin Liss
ID: 41864083
Can you give an example of, or tell us how you want it divided up?
0
 
LVL 92

Accepted Solution

by:
Patrick Matthews earned 500 total points (awarded by participants)
ID: 41864391
This appears to do it.  Assumptions:
  • Prompted for number tabs to split to at start
  • If # of data rows is evenly divisible by # tabs, each tab will have same # rows
  • If not, The first (n-1) tabs will have the same # rows, and the "extra" rows go to the nth tab

Option Explicit

Sub SplitToTabs()
    
    Dim LastR As Long, LastC As Long
    Dim SourceWs As Worksheet
    Dim DestWb As Workbook
    Dim DestWs As Worksheet
    Dim NumOfTabs As Long
    Dim NumDataRows As Long
    Dim RowsPerTab As Long
    Dim OldSheetsPerWb As Long
    Dim Counter As Long
    Dim RowsToCopy As Long
    Dim StartCopyRow As Long
    
    Set SourceWs = ActiveSheet
    With SourceWs
        LastR = .Cells(.Rows.Count, 1).End(xlUp).Row
        LastC = .Cells(1, .Columns.Count).End(xlToLeft).Column
    End With
    NumDataRows = LastR - 1
    
    NumOfTabs = InputBox("You have " & NumDataRows & " data rows", "How many tabs to split into?", 1)
    RowsPerTab = Int(NumDataRows / NumOfTabs)
    
    OldSheetsPerWb = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = NumOfTabs
    Set DestWb = Workbooks.Add
    Application.SheetsInNewWorkbook = OldSheetsPerWb
    StartCopyRow = 2
    
    For Counter = 1 To NumOfTabs
        Set DestWs = DestWb.Worksheets(Counter)
        SourceWs.Cells(1, 1).Resize(1, LastC).Copy DestWs.Cells(1, 1)
        If Counter < NumOfTabs Then
            RowsToCopy = RowsPerTab
        Else
            RowsToCopy = LastR - StartCopyRow + 1
        End If
        SourceWs.Cells(StartCopyRow, 1).Resize(RowsToCopy, LastC).Copy DestWs.Cells(2, 1)
        StartCopyRow = StartCopyRow + RowsToCopy
    Next
    
End Sub

Open in new window

1
 

Author Comment

by:Marta Wilczyńska
ID: 41871700
Patrick it works! Thank you very much
0
 
LVL 92

Expert Comment

by:Patrick Matthews
ID: 41897212
author acknowledged answer
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Freeze Panes Solution 6 28
Excel Automation VBA 19 37
NEED TO UPDATE DATA IN EXCEL 18 32
remove upper case characters in excel 4 19
Introduction While answering a recent question (http:/Q_27311462.html), I created an alternative function to the Excel Concatenate() function that you might find useful.  I tested several solutions and share the results in this article as well as t…
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
This Micro Tutorial will demonstrate in Google Sheets how to use the HYPERLINK function to create live links inside your spreadsheet.

896 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now