Excel 链接 Table 到专栏
Excel Linked Table to Column
我在不同的工作表中有两个表,如下所示:
我需要的是一个函数,当从 Table 1 中插入或删除一行时更新 Table 2 跨所有行,但仅链接到 A 列。Excel 中没有可用于在单元格值不匹配时插入行的公式?
以下公式遍历一系列值并评估它们是否匹配。
=IF(不(精确(J11:J14,N11)),J11,N11)
我在想,如果有办法插入一行,我可以用 false 条件替换它。如果没有,我将不得不创建一个宏。
执行此操作的好方法是什么?
首先,确保你的两个 Table 确实是 Excel Table。 (如果没有,select 一次一个,然后使用 Ctrl + T 键盘快捷键将它们变成 'official' Excel Table 又名 ListObjects)
然后select在Table1中的A列,并通过在名称框中写入"Primary"为其分配命名范围"Primary",如下所示,然后按下进入:
同样将 Table2 中的 A 列命名为 "Secondary"。
请注意,这些名称区分大小写,因为我们将从 VBA.
引用它们
放在Table1所在工作表对应的Sheet模块中
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
从现在开始,您添加到主列的任何新内容都将添加到辅助列:
我在不同的工作表中有两个表,如下所示:
我需要的是一个函数,当从 Table 1 中插入或删除一行时更新 Table 2 跨所有行,但仅链接到 A 列。Excel 中没有可用于在单元格值不匹配时插入行的公式?
以下公式遍历一系列值并评估它们是否匹配。
=IF(不(精确(J11:J14,N11)),J11,N11)
我在想,如果有办法插入一行,我可以用 false 条件替换它。如果没有,我将不得不创建一个宏。
执行此操作的好方法是什么?
首先,确保你的两个 Table 确实是 Excel Table。 (如果没有,select 一次一个,然后使用 Ctrl + T 键盘快捷键将它们变成 'official' Excel Table 又名 ListObjects)
然后select在Table1中的A列,并通过在名称框中写入"Primary"为其分配命名范围"Primary",如下所示,然后按下进入:
同样将 Table2 中的 A 列命名为 "Secondary"。
请注意,这些名称区分大小写,因为我们将从 VBA.
引用它们放在Table1所在工作表对应的Sheet模块中
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
从现在开始,您添加到主列的任何新内容都将添加到辅助列: