Здесь несколько предположений:
1) Поле «Состояние» заполняется последним, поэтому после ввода состояния вы можете сразу скопировать адрес на правильный лист.
2) Вы вводите свои штаты с аббревиатурой, и у вас есть листы с именами, которые точно соответствуют аббревиатурам штатов.
3) Данные таблиц штатов смежные и начинаются с A1.
Private Sub Worksheet_Change(ByVal Target As Range)
Const lngSTATECOLUMN As Long = 6
Dim wks As Worksheet
Dim lngNextAvailableRow As Long
' check that only a single cell is being changed '
If Target.Areas.Count = 1 And Target.Cells.Count = 1 Then
' check that the cell being edited is in the state column '
If Not Intersect(Target, Columns(lngSTATECOLUMN)) Is Nothing Then
' check that a two-character entry has been made in the state column '
If Len(Target.Value) = 2 Then
' turn off error checking in case it cannot find a matching worksheet '
On Error Resume Next
Set wks = ThisWorkbook.Worksheets(Target.Value)
On Error GoTo 0
' continue if it found a worksheet with the same name as the state you input '
If Not wks Is Nothing Then
lngNextAvailableRow = wks.Range("a1").CurrentRegion.Rows.Count + 1
ActiveSheet.Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).Copy _
wks.Range("A" & lngNextAvailableRow)
End If
End If
End If
End If
End Sub
Я бы, однако, спросил, почему вам нужно дублировать ваши данные в 50 различных листах?Это кажется чрезвычайно неэффективным и подверженным ошибкам.Если вам не нужно делать это по очень конкретной причине, я бы очень настоятельно советовал против этого.
Если вам нужно в какой-то момент отобразить или использовать отдельные адреса состояний, я бы вместо этого посмотрел на фильтрацию основного списка адресов.