Link to home
Start Free TrialLog in
Avatar of R Davignon
R DavignonFlag for United States of America

asked on

Populate Excel sheets based on criteria from import sheet using VBA

I have an excel workbook with a worksheet call "Import".  The data is refreshed from a sharepoint list.  The data structure is similar to this:

ID      Loc      Start Date      End Date      Group
44      CA      5/6/2017      5/8/2017      A
33      TX      6/8/2017      6/10/2017      B
34      NM      9/1/2017      9/3/2017      C
33      DC      9/1/2017      9/3/2017      B
33      TX      6/8/2017      6/10/2017      B
34      NM      9/1/2017      9/3/2017      C
33      DC      9/1/2017      9/3/2017      B
33      TX      6/8/2017      6/10/2017      B
34      NM      9/1/2017      9/3/2017      C
33      DC      9/1/2017      9/3/2017      B

I would like to create VBA to go through each imported row of data and populate 3 additional worksheet tabs (Group A) (Group B) and (Group C) with only the  matching criteria.

For example Worksheet labeled "Group B" be recreated and look like this:

ID Loc      Start Date      End Date      Group
33      TX      6/8/2017      6/10/2017      B
33      DC      9/1/2017      9/3/2017      B
33      TX      6/8/2017      6/10/2017      B
33      DC      9/1/2017      9/3/2017      B
33      TX      6/8/2017      6/10/2017      B
33      DC      9/1/2017      9/3/2017      B

Thanks for any help//suggestions.
Avatar of Subodh Tiwari (Neeraj)
Subodh Tiwari (Neeraj)
Flag of India image

Please try this...
In the attached, click the button on Import Sheet called Split Data to run the code to get the desired output.
Sub SplitData()
Dim sws As Worksheet, dws As Worksheet
Dim lr As Long, i As Long, j As Long
Dim dict As Object
Dim x, y
Application.ScreenUpdating = False
Set sws = Sheets("Import")
lr = sws.Cells(Rows.Count, 1).End(xlUp).Row
Set dict = CreateObject("Scripting.Dictionary")
x = sws.Range("E2:E" & lr).Value

For i = 1 To UBound(x, 1)
   dict.Item(x(i, 1)) = x(i, 1)
Next i
y = dict.items
For i = 0 To UBound(y)
   With sws.Rows(1)
      On Error Resume Next
      Set dws = Sheets(y(i))
      dws.Cells.cle
      On Error GoTo 0
      If dws Is Nothing Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Group " & y(i)
      Set dws = ActiveSheet
      .AutoFilter field:=5, Criteria1:=y(i)
      sws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy dws.Range("A1")
      dws.Columns.AutoFit
      dws.Range("A1").CurrentRegion.Borders.Color = vbBlack
   End With
   Set dws = Nothing
Next i
Set dict = Nothing
sws.AutoFilterMode = 0
sws.Activate
Application.ScreenUpdating = True
End Sub

Open in new window

Split-Data.xlsm
Avatar of R Davignon

ASKER

Worked like a charm, however when I added additional columns of data I kept getting a VBA 400 error.  I kept the Group in column E, howevered added about 10 columns to the right. Columns F-Column P. Would that be the cause of the problem?
No. That shouldn't be the case.
Did you tweak the code at your end?
It would be helpful if you can upload the workbook along with the code in question.
I have attached a worksheet that includes your code as well as a couple of lines with the import tab as it comes in from our share point site.
 
ID      Loc  Start      End          Group
17      TX      7/25/16      8/24/17      A
18      CA      6/24/16      6/29/16      B
19      CA      7/25/16      8/24/17      C
20      TX      6/24/16      6/29/16      D
21      CA      7/25/16      8/24/17      A
22      CA      6/24/16      6/29/16      D
23      TX      7/25/16      8/24/17      B
24      CA      6/24/16      6/29/16      C
25      CA      7/25/16      8/24/17      D
26      TX      6/24/16      6/29/16      D
27      CA      7/25/16      8/24/17      D
28      CA      6/24/16      6/29/16      D
29      TX      7/25/16      8/24/17      D
30      CA      6/24/16      6/29/16      B
31      CA      7/25/16      8/24/17      D
32      TX      6/24/16      6/29/16      C
33      CA      7/25/16      8/24/17      D
34      CA      6/24/16      6/29/16      D
35      TX      7/25/16      8/24/17      D
36      CA      6/24/16      6/29/16      D
37      CA      7/25/16      8/24/17      D
38      TX      6/24/16      6/29/16      D
39      CA      7/25/16      8/24/17      C
40      CA      6/24/16      6/29/16      D
41      TX      7/25/16      8/24/17      D
42      CA      6/24/16      6/29/16      D
43      CA      7/25/16      8/24/17      D
44      TX      6/24/16      6/29/16      D
45      CA      7/25/16      8/24/17      E
SampleData.xlsm
ASKER CERTIFIED SOLUTION
Avatar of Subodh Tiwari (Neeraj)
Subodh Tiwari (Neeraj)
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
It worked perfectly!  Thank you for all your help.  I appreciate your assistance.
You're welcome. Glad I could help. :)