Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel将表链接到列_Excel_Excel Formula_Linked Tables - Fatal编程技术网

Excel将表链接到列

Excel将表链接到列,excel,excel-formula,linked-tables,Excel,Excel Formula,Linked Tables,我在不同的工作表中有两张表,如下所示: 我需要的是一个函数,当从表1插入或删除一行时,该函数会跨所有行更新表2,但仅链接到列a。Excel中没有公式可用于在单元格值不匹配时插入行 下面的公式将遍历一系列值,并计算它们是否匹配。 =如果(不精确(J11:J14,N11)),J11,N11) 我在想,如果有办法插入一行,我可以用false条件替换它。如果没有,我将不得不创建一个宏 做这件事的好方法是什么? 首先,确保您的两个表确实是Excel表。(如果没有,请一次选择一个,然后使用Ctrl+

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


我需要的是一个函数,当从表1插入或删除一行时,该函数会跨所有行更新表2,但仅链接到列a。Excel中没有公式可用于在单元格值不匹配时插入行

下面的公式将遍历一系列值,并计算它们是否匹配。
=如果(不精确(J11:J14,N11)),J11,N11)

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

做这件事的好方法是什么?


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

然后选择表1中的A列,通过在名称框中写入“Primary”将命名范围“Primary”指定给它,如下所示,然后按Enter键:

同样,将表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
从现在起,添加到主列的任何新内容都将添加到次列:


两个表中的A列是否都是唯一的ID?i、 e.“1”在每个表中只出现一次?如果有人从表1中删除了一行呢?你想从表2中删除相应的行吗?@jeffreyweir A列中的值是唯一的。那么我评论中的第二个问题呢?啊,好的。为了将来的参考,最好在评论中指出你已经修改了你的问题。否则我们就不会知道有什么变化了,我当然会的。