如何将一行Excel表(ListObject)中的多行附加到另一行?

时间:2015-02-04 21:37:06

标签: excel vba listobject

我有两张桌子:

    Table_1         Table_2
   A   B   C       A   B   C
 -------------   -------------
1| A1| B1| C1|  1| A2| B2| C2|
2| A1| B1| C1|  2| A2| B2| C2|
3| A1| B1| C1|  3| A2| B2| C2|

结果表:

    Table_1   
   A   B   C  
 -------------
1| A1| B1| C1|
2| A1| B1| C1|
3| A1| B1| C1|
4| A2| B2| C2|
5| A2| B2| C2|
6| A2| B2| C2|

Table_2是一个临时表(ListObject),它使用数据连接查询数据库中的条目。

Table_1是一个表(ListObject),它充当条目的集合列表。它保持独立,因为它(1)缩短了表2中的查询时间,(2)进行了一些编程编辑。

我有VBA代码将Table_2复制到Table_1,然后更新Table_2的连接字符串,使其不包含日期在Table_1范围内的条目。结果是Table_2仅提取新数据。

我的代码(正确)将数据从Table_2复制到Table_1:

For Each temprow in Table_2.ListRows
  Set newRow = table_1.ListRows.Add
  tempRow.Range.Copy
  newRow.Range.PasteSpecial xlPasteValues
Next

如果Table_2(新条目)只有十几个条目,这非常有用。有时,Table_2将有几百个条目,这将完成20分钟。我怀疑它是因为我做了几百次迭代的.Copy和.Paste。

有没有办法可以批发:复制Table_2的所有内容,只是让它成为Table_1的一部分?我觉得我想要做的只需要1秒钟以编程方式执行,而不是20分钟。我没有条件或例外。我想从Table_2中获得一切,这应该会让事情变得简单。我可能会采取错误的方式。任何帮助表示赞赏。感谢。

3 个答案:

答案 0 :(得分:4)

也许这样,适当地更改工作表:

Option Explicit
Sub CombineTables()
    Dim LO1 As ListObject, LO2 As ListObject

With Sheet3
    Set LO1 = .ListObjects("Table_1")
    Set LO2 = .ListObjects("Table_2")
End With

LO2.DataBodyRange.Copy Destination:= _
    LO1.DataBodyRange.Offset(LO1.DataBodyRange.Rows.Count).Resize(1, 1)

End Sub

答案 1 :(得分:1)

尝试使用SQL union语句进行快速表连接(ODBC):

SELECT * FROM [Sheet1$] UNION SELECT * FROM [Sheet2$]

表1位于名为" Sheet1" &表34" Sheet2"。

通过转到"数据 - >来自其他来源 - >来自Microsoft Query"

答案 2 :(得分:0)

复制Source表和特殊粘贴值+在温度范围内形成

  • 削减温度范围
  • 将最后一行添加到目标表
  • 选择最后一行
  • 使用Shift:= xlDown
  • 将剪切选区插入目标表
  • 删除您不想要的最后一行