View Single Post
  #10   Report Post  
Posted to microsoft.public.excel.programming
manfareed manfareed is offline
external usenet poster
 
Posts: 94
Default New Sheet based on condition

John,
Hope your feeling ok ...

How do I change this code to filter from Column "F" on cell "F26".

Option Explicit

Sub ExtractReps()
Dim ws1 As Worksheet
Dim wsNew As Worksheet
Dim rng As Range
Dim r As Integer
Dim c As Range
Set ws1 = Sheets("Sheet1")
Set rng = Range("Database")

'extract a list of Sales Reps
ws1.Columns("C:C").Copy _
Destination:=Range("L1")
ws1.Columns("L:L").AdvancedFilter _
Action:=xlFilterCopy, _
CopyToRange:=Range("J1"), Unique:=True
r = Cells(Rows.Count, "J").End(xlUp).Row

'set up Criteria Area
Range("L1").Value = Range("C1").Value

For Each c In Range("J2:J" & r)
'add the rep name to the criteria area
ws1.Range("L2").Value = c.Value
'add new sheet (if required)
'and run advanced filter
If WksExists(c.Value) Then
Sheets(c.Value).Cells.Clear
rng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Sheet1").Range("L1:L2"), _
CopyToRange:=Sheets(c.Value).Range("A1"), _
Unique:=False
Else
Set wsNew = Sheets.Add
wsNew.Move After:=Worksheets(Worksheets.Count)
wsNew.Name = c.Value
rng.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Sheet1").Range("L1:L2"), _
CopyToRange:=wsNew.Range("A1"), _
Unique:=False
End If
Next
ws1.Select
ws1.Columns("J:L").Delete
End Sub
Function WksExists(wksName As String) As Boolean
On Error Resume Next
WksExists = CBool(Len(Worksheets(wksName).Name) 0)
End Function

Many Thanks

"john" wrote:

Guessed right - miles off!
I'm about to get a tooth drilled but from what you are describing I think
this link will assist you. http://www.contextures.com/excelfiles.html
There is an example workbook you can download (FL0013) which you should be
able to adjust to your need.
--
jb


"manfareed" wrote:

Hi John,

I am having problems with this part of your code ... how do I spli it ?

LastRow = .Cells(Rows.Count, "F").End(xlUp).Row

.Range("F27:F" & LastRow).Sort Key1:=.Range("F27"),
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Column "F" contains the REgion Manager name.
Once sort is complete the rows with same region manager would need to be
copied to a new sheet. I hope thsi is clear.

Thanks,

Manir


"john" wrote:

not sure if I've fully understood what you are trying to do an mikes comment
aludes to lack of clear info.

As stab in the dark something along the lines of following may do what you
want? but there again, could be miles off!

Sub NewSheet()
Dim sh As Worksheet
Dim NewName As String


Application.ScreenUpdating = False

RN = 27
With ThisWorkbook.Worksheets("Sheet1") '<< change as required

LastRow = .Cells(Rows.Count, "F").End(xlUp).Row

.Range("F27:F" & LastRow).Sort Key1:=.Range("F27"),
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False,
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Do

NewName = .Range("F" & RN).Value

On Error Resume Next

Set sh = Worksheets(NewName)

On Error GoTo 0

If sh Is Nothing Then
Worksheets.Add.Name = (NewName)
End If

RN = RN + 1

Loop Until .Range("F" & RN).Value = ""

End With

Application.ScreenUpdating = True

End Sub

--
jb


"manfareed" wrote:

Hi ,

I need to sort data by column F [FROM F27]. Then create new sheets based on
each new name in column F.

Thanks