|There are many ways to accomplish your goal...|
Try this in a back-up copy of your workbook in case something goes terribly wrong.
The first thing it does is create a list of unique cities in Column J to use for the sheet creations. It will delete that list after the sheets are created.
If Column J isn't a good place for the temporary storage of the list, pick a better spot.
With Sheets("Schedule Report")
'Create List of Unique City Names in Column J
numCities = .Range("G" & Rows.Count).End(xlUp).Row
.Range("G1:G" & numCities).AdvancedFilter Action:=xlFilterCopy, _
'Determine How Many Cities Are In The List
lstRow = .Range("J" & Rows.Count).End(xlUp).Row
'Loop through Column J Creating Sheets and Copy Header Row
For City = 2 To lstRow
ActiveSheet.Name = .Range("J" & City).Value
'Delete List In Column J
'Loop through Column G and copy Rows to Sheet Based On City Name
For nxtCity = 2 To numCities
nxtRow = Sheets(Range("G" & nxtCity).Value).Range("A" & Rows.Count).End(xlUp).Row + 1
Destination:=Sheets(Range("G" & nxtCity).Value).Range("A" & nxtRow)