Заполните новые листы данными из других листов - PullRequest
1 голос
/ 14 июня 2010

У меня есть мастер-лист, в котором есть строки данных об адресе дома, один столбец которых является столбцом «Состояние».У меня есть 50 других листов в том же документе, соответствующих каждому из 50 штатов США.Что я хочу, чтобы произошло: когда я вводил адрес в основной лист и вводил штат (скажем, «CA» или «California»), я хочу, чтобы он автоматически заполнял лист «CA» этим адресом.Спасибо!

1 Ответ

1 голос
/ 16 июня 2010

Здесь несколько предположений:

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 различных листах?Это кажется чрезвычайно неэффективным и подверженным ошибкам.Если вам не нужно делать это по очень конкретной причине, я бы очень настоятельно советовал против этого.

Если вам нужно в какой-то момент отобразить или использовать отдельные адреса состояний, я бы вместо этого посмотрел на фильтрацию основного списка адресов.

...