使用其他表格中的数据填充新表格

时间:2010-06-14 19:02:06

标签: excel excel-vba excel-2007 excel-formula vba

我有一张包含住宅地址数据行的主表单,其中一列是“状态”列。我在同一份文件中有50张其他纸张,对应于美国50个州中的每一张。我想要发生的事情:当我在主表单中输入地址并输入状态(例如“CA”或“California”)时,我希望它自动使用该地址填充“CA”表。谢谢!

1 个答案:

答案 0 :(得分:1)

这里有几个假设:

1)State字段是最后填写的字段,因此一旦您进入状态,您可以立即将地址复制到正确的工作表。

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个不同的工作表中复制你的数据?这似乎非常低效并且容易出错。除非您出于非常具体的原因需要这样做,否则我 非常强烈 建议不要这样做。

如果您在某些时候需要显示或使用单独的状态地址,那么我会查看过滤主要的地址列表。