Try this for a start. I can't seem to get the code working to check if the State workbook is open or not, so I've commented some of it out, and it just opens the workbooks regardless (if you have the workbooks closed, it will work). You may want to add some code to save and close the workbooks when complete. This assumes that your State is in column "A", city in column "B", etc. of Sheet1 - you will need to adjust if not.
CODE
Sub CopyToStateFile()
Dim lngFirstRow As Long
Dim lngLastRow As Long
Dim lngUniqueStateRow
Dim strMonthYear As String
Dim strState As String
Dim varStateWorkbookName As Variant
Dim wbkStateWorkbook As Workbook
' turn off screen updates during the copy/paste process
Application.ScreenUpdating = False
' get the month and year that File A is named as right now
strMonthYear = Mid(ThisWorkbook.Name, 10, 5)
' copy the state column to Sheet 3 temporarily and then filter the Sheet3 list for unique states
Sheets("Sheet3").Range("A:A").Value = Sheets("Sheet1").Range("A:A").Value
Sheets("Sheet3").Columns("A:A").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
' set the starting row number to row 2 - after the 'State' heading
lngUniqueStateRow = 2
' Select cell A2, *first row of state data*.
Sheets("Sheet3").Select
Range("A" & lngUniqueStateRow).Select
' Loop through states until the end of the list is found
Do Until IsEmpty(ActiveCell)
' check if current row is hidden/filtered or not
If Rows(lngUniqueStateRow).Hidden = True Then
' the row is hidden/filtered, so skip it
GoTo NextRow
End If
' set State variable
strState = Worksheets("Sheet3").Range("A" & lngUniqueStateRow)
' filter the state data in Sheet1
Sheets("Sheet1").Select
Rows("1:1").Select
Selection.AutoFilter Field:=1, Criteria1:=strState
' find the first row with data
Range("A1").Select
lngFirstRow = Selection.Offset(1, 0).Row
' find the last row with data
lngLastRow = Cells(Rows.Count, 1).End(xlUp).Row
' select the top left to the bottom right range of data from the second column, then copy the range
Range("B" & lngFirstRow & ":D" & lngLastRow).Select
Selection.Copy
' set State Workbook name
varStateWorkbookName = strState & " - " & strMonthYear & ".xls"
' Open state workbook if it is not already, otherwise just activate it.
'If Len(Workbooks(varStateWorkbookName).Name) > 0 Then
Workbooks.Open Filename:= _
"C:\Desktop\State Files\" & strMonthYear & "\" & varStateWorkbookName
'Else
'Windows(varStateWorkbookName).Activate
'Application.Run "OnWindow"
'End If
' paste the copied data into the state workbook
Sheets("Sheet2").Select
Range("C10").Select
ActiveSheet.Paste
Windows(ThisWorkbook.Name).Activate
Application.CutCopyMode = False
NextRow:
' Step down 1 row from present location.
lngUniqueStateRow = lngUniqueStateRow + 1
' go back to temporary sheet3 data
Sheets("Sheet3").Select
' Select next cell (state)
Range("A" & lngUniqueStateRow).Select
Loop
' clean up temporary data in sheet 3
Sheets("Sheet3").Select
ActiveSheet.ShowAllData
Columns("A:A").Select
Selection.ClearContents
' go back to Sheet 1 and remove filter
Sheets("Sheet1").Select
ActiveSheet.ShowAllData
' turn on screen updates during the copy/paste process
Application.ScreenUpdating = True
End Sub