• Home
  • Blog
  • Resume
  • Contact
  • Projects
  • Gallery
  • Amit’s Resume
  • About Nagpur
KEEP IN TOUCH

Create Sheets based on a Column

Nov10
2008
Leave a Comment Written by admin

Ever felt the need of creating different sheets based on the distinct values of a column. For example, in your data, you have a column called STATE, and you would like to create a separate sheet for each state with all the data from that state. Here’s your solution then:
(Note: you’ll need to add a UDF function UniqueItems from http://j-walk.com/ss/excel/tips/tip15.htm)

This procedure will create a new sheet for each unique item in the selected column with the data from the main sheet for that unique item. As an added bonus, the procedure will sort the sheets ascending (Courtesy:ozgrid.com)
‘—————————————————————————————
‘ Procedure : CreateSheetsColumn
‘ DateTime  : 11/10/2008 09:32
‘ Author    : ARN
‘ Purpose   : To create sheets with the data from the main sheet based on a selected column.
‘Assumptions:
    ’1 -  data are in contigious form
    ’2 – the unique column does not have any special characters
    ’3 – the first row is the header row
    ’4 – the only sheet in the workbook is the data workbook
‘—————————————————————————————
‘
Public Sub CreateSheetsColumn()

On Error GoTo CreateSheetsColumn_Error
    Dim rngInput As Range, rngColAddr As Range, varrUniqueVals() As Variant, dCounter As Double
    Dim rngCol As Range
    Dim dUniqueItems As Double, dColtoFilterOn As Double
    
    Dim lCount As Long, lShtLast As Long, lCount2 As Long
    
    ‘Set the working range
    Set rngInput = ActiveSheet.Range(Cells(1, 1), Cells(1, 1).SpecialCells(xlLastCell))
                                    
    ‘get the column to work on from the user
    Set rngColAddr = Application.InputBox(prompt:=”Select the column that would be used to create distinct sheets”, _
                                    Title:=”Select a Column”, _
                                    Type:=8)
    ‘if more than one column is selected, exit
    If rngColAddr.Columns.Count > 1 Then
        MsgBox “Too many columns; select only one column”, vbOKOnly
        Exit Sub
    End If
    
    ‘set the application screen updating to false to increase execution speed
    Application.ScreenUpdating = False
    
    ‘store the column number in a variable
    dColtoFilterOn = rngColAddr.Column
    
    ‘set a range from the 2nd row to the last row from the selected column to get the distinct values
    Set rngCol = ActiveSheet.Range(Cells(2, dColtoFilterOn), Cells(rngInput.Rows.Count, dColtoFilterOn))
    
    ‘use the function UniqueItems (http://j-walk.com/ss/excel/tips/tip15.htm) to get unique values from the selected column
    varrUniqueVals = UniqueItems(rngCol, False)
    
    ‘get the total number of unique items
    dUniqueItems = UBound(varrUniqueVals, 1)
    
    ‘start a loop to filter the range on each unique item
    For dCounter = 1 To dUniqueItems
        ‘ only if the unique value is not blank
        If Not varrUniqueVals(dCounter) = “” Then
            ‘ apply filter
            rngInput.AutoFilter Field:=dColtoFilterOn, Criteria1:=varrUniqueVals(dCounter)
            
            ‘add a new sheet
            Sheets.Add After:=Sheets(Sheets.Count)
            
            ‘rename the sheet
            ActiveSheet.Name = varrUniqueVals(dCounter)
            
             >‘copy the filtered data
            rngInput.Copy Destination:=Worksheets(varrUniqueVals(dCounter)).Range(“A1″)
            
            ‘remove copy
            Application.CutCopyMode = False
        End If
    Next dCounter
    
    ‘remove filter
    rngInput.AutoFilter
    
    
    ‘ Sort sheets ascending – except the first one
    ‘ copied from http://www.ozgrid.com/VBA/sort-sheets.htm
    
    lShtLast = Sheets.Count
    For lCount = 2 To lShtLast
            For lCount2 = lCount To lShtLast
                If UCase(Sheets(lCount2).Name) < UCase(Sheets(lCount).Name) Then
                    Sheets(lCount2).Move Before:=Sheets(lCount)
                End If
            Next lCount2
        Next lCount
        
MsgBox “Done”

On Error GoTo 0
SmoothExit_CreateSheetsColumn:

    Application.ScreenUpdating = True

    Exit Sub

CreateSheetsColumn_Error:
    MsgBox “Error ” & Err.Number & ” (” & Err.Description & “) in Sub:CreateSheetsColumn”
    Resume SmoothExit_CreateSheetsColumn
End Sub

Related posts:

  1. Stack Columns of Data on one column
  2. Flip row or column
  3. Save HTML files from one folder to Excel files in another folder
  4. Find the last filled column
  5. Find last filled column
Posted in Uncategorized - Tagged Create Sheets, excel, filter, Range Cells
SHARE THIS Twitter Facebook Delicious StumbleUpon E-mail
« Student’s t-test for equal means
» Access Export to Excel (2007)

No Comments Yet

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Tags

Access Alt F8 Books boxplot cells charts count cursor dashboard data mining dbase design error excel excel functions export filter flip LaTex MS query Number Err ODBC pipes Press Alt F11 Public Sub python R random numbers Range Cells report scripting software sparklines SQL SQL server stack columns statistics stemming string tag cloud text mining UDF VBA visualization wildcard

Network

View Ashutosh Nandeshwar's profile on LinkedIn

Recent Comments

  • W. McNabb on The search key was not found in any record in Access
  • Manuel on The search key was not found in any record in Access
  • Wendy Naples on The search key was not found in any record in Access
  • larry on Access Export to Excel (2007)
  • Betty Chou on Projects

Related Posts

  1. Stack Columns of Data on one column
  2. Flip row or column
  3. Save HTML files from one folder to Excel files in another folder
  4. Find the last filled column
  5. Find last filled column

EvoLve theme by Blogatize  •  Powered by WordPress nandeshwar.info