Excel链接表到列

时间:2018-04-04 21:48:51

标签: excel excel-formula linked-tables

我在不同的工作表中有两个表,如下所示:

Sample Data

我需要的是一个功能,当从表1 中插入或删除行时,所有行都会更新表2 ,但只链接到A列。 Excel中的公式,可用于在单元格值不匹配时插入行?

以下公式通过一系列值并评估它们是否匹配 = IF(NOT(EXACT(J11:J14,N11)),J11,N11)

我在想如果有办法插入一行,我可以用假条件替换它。如果没有,我将不得不创建一个宏。

这可能是一个好方法吗?

Sample Data End

1 个答案:

答案 0 :(得分:1)

首先,确保您的两个表确实是Excel表。 (如果没有,请一次选择一个并使用 Ctrl + T 键盘快捷键将它们转换为“官方”Excel表格,即ListObjects)

然后选择Table1中的A列,并通过在名称框中写入“Primary”来为其指定命名范围“Primary”,如下所示,然后按Enter键: enter image description here

同样,将表2中的A列命名为“Secondary”。

请注意,这些名称区分大小写,因为我们将从VBA引用它们。

将其放入与表1所在工作表对应的工作表模块中。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dic     As Object
Dim v1      As Variant
Dim v2      As Variant
Dim vItem   As Variant
Dim lo      As ListObject
Dim lr      As ListRow
Dim lc      As ListColumn

On Error GoTo errhandler
If Not Intersect(Range("Primary"), Target) Is Nothing Then
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    Set dic = CreateObject("Scripting.Dictionary")
    v1 = Range("Primary")
    v2 = Range("Secondary")
    Set lo = Range("Secondary").ListObject
    Set lc = lo.ListColumns(1)
    For Each vItem In v2
        If Not dic.exists(vItem) Then
            dic.Add vItem, vItem
        Else
            MsgBox "You have " & vItem & " in the table already!. Please rename the row and try again."
            GoTo errhandler
        End If
    Next vItem

    For Each vItem In v1
        If Not dic.exists(vItem) Then
            Set lr = lo.ListRows.Add
            Intersect(lr.Range, lc.Range).Value = vItem
        End If
    Next vItem
End If

errhandler:
With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With

End Sub

从现在开始,您添加到主列的任何新内容都将添加到辅助列:

enter image description here