【发布时间】:2016-10-21 21:22:11
【问题描述】:
我在不同的选项卡上有 2 个表,其中有许多具有相同名称的列。我想将这两个表的数据合并到第三个选项卡上的一个新表中。
我尝试了多种方法来做到这一点,例如对列位置(如 A、B、C..)进行硬编码,并在我需要复制和粘贴的 20 个左右的列中手动编码.但是,我宁愿遍历我需要复制的列标题数组的循环,获取数据并附加到第三个表。这样,如果位置移动它会继续工作,我只需要担心列标题。我在使用数组或在 VBA 中使用命名表方面并不是那么先进,所以我希望有人可以帮助我。
例子:
Dim arr1 As Variant
Dim vItm As Variant
Dim tbl1 As ListObject
Dim tbl2 As ListObject
Dim tbl3 As ListObject
arr1 = Array("Header1", "Header2", "Header3")
Set tbl1 = Worksheets("Sheet1").ListObjects("Table1")
Set tbl2 = Worksheets("Sheet2").ListObjects("Table2")
Set tbl3 = Worksheets("Sheet3").ListObjects("Table3")
For Each vItm In arr1
Set c = tbl2.ListColumns(vItm).DataBodyRange
If Not c Is Nothing Then
col = c.Column
With tbl2.DataBodyRange
tRows = .Rows.Count
tCols = .Columns.Count
Set CopyRng = .Range(.Cells(0, col), .Cells(tRows - 1, col))
End With
Set Dest = tbl1.HeaderRowRange.Find(vItm, LookIn:=xlValues, LookAt:=xlWhole, _
MatchCase:=False, SearchFormat:=False)
MsgBox Dest.Address
Else
MsgBox "Header not found"
Exit Sub
End If
Next vItm
对于数组中的每个列标题,请查看表 1 并复制下面的所有数据并粘贴到表 3 中相应的列标题中。对所有数组项执行此操作。然后对于数组中的每个列标题,在 Table2 中查找并复制下面的所有数据,并将 Table3 中来自 Table1 的数据下方的相应列标题粘贴。
在这里感谢任何帮助。谢谢!
【问题讨论】:
-
您可以使用 Find() 来定位每个列标题,所以我会从它开始,尝试编写一些代码,然后在/如果您遇到特定问题时发回。现在你的问题有点太宽泛了——你描述的方法是合理的,所以试着开始吧。
-
@TimWilliams 我更新了原始帖子中的代码,以更新我在这方面的进展情况。现在我已经到了我认为我已经在每个循环上复制了正确的数据以及表中正确的目标列的地步,我将合并数据。我现在有点卡住了,因为不清楚我应该如何偏移目标单元格以将数据附加到目标表中最后一个活动行的下方。然后我仍然需要遍历第三张表并做同样的事情。