2016-07-05 5 views
0

私の目的は、table1からデータをコピーしてtable2に挿入することです。ある表から別の表へデータをコピー/挿入する

 Sub Integration() 
     Dim tbl1 As Range 
     Dim tbl2 As Range 
      Application.ScreenUpdating = False 
       Set tbl1 = ActiveSheet.ListObjects("Table1").DataBodyRange 
       Set tbl2 = ActiveSheet.ListObjects("Table2").DataBodyRange 

        tbl1.Copy 
        tbl2.Insert Shift:=xlDown 

       Application.CutCopyMode = False 
       tbl1.ClearContents 
      Application.ScreenUpdating = True 
     End Sub 

しかし、その代わりに表1をコピーし、表2に挿入するのを、表2、ClearContentをコピーしているようだ、と表1

もののデータを使用して自身にそれを挿入する: 私は、次の試してみましたそれは別のシート上で完璧に動作し、まったく同じコードです。
ご協力いただければ幸いです。おかげ
Pre-Integration
After integration

+0

手動で選択した複数の行を挿入]をクリックすると、行数、VBAが同じことをするでしょう挿入を優れています。あなたはtbl2の挿入時にtbl2の現在の行数を挿入しますが、tbl1の行数を挿入する必要があります –

+0

申し訳ありませんが、どういう意味ですか?私はtbl2.insert Shift:= xlDown、それは実際にテーブルのコピーされた1つのセルをテーブル2に挿入するか、いいえ?コピーしたセルを右クリックして表に挿入することはできないので、Ctrl + Shift + 1を押すのと同じことになっています。 –

+0

ここで何をしているのかは、1行をコピーしてから5行を選択して挿入することです。したがって、5行の重複行を効果的に挿入しています。両方の答えはこれを避けますが、トーマスはループを回避しますが、これは好ましいです –

答えて

1

使用tbl2.Offset(tbl2.Rows.Count)表2の後の最初の空白行を参照します。次に、tbl1.Copy tbl1.Copy tbl2.Offset(tbl2.Rows.Count)を使用してTable1の内容を貼り付けます。

Sub Integration() 
    Dim tbl1 As Range 
    Dim tbl2 As Range 

    Application.ScreenUpdating = False 
    Set tbl1 = ActiveSheet.ListObjects("Table1").DataBodyRange 
    Set tbl2 = ActiveSheet.ListObjects("Table2").DataBodyRange 

    tbl1.Copy tbl2.Offset(tbl2.Rows.Count) 

    Application.CutCopyMode = False 
    tbl1.ClearContents 
    Application.ScreenUpdating = True 
End Sub 
0

やリストで作業データを割り当てるために、オブジェクト自体:

Sub Integration() 

Dim tbl1 As ListObject, tbl2 As ListObject 
    Set tbl1 = ActiveSheet.ListObjects("Table1") 
    Set tbl2 = ActiveSheet.ListObjects("Table2") 
    For i = 1 To tbl1.ListRows.Count 
     tbl2.ListRows.Add 1, True 
     tbl2.ListRows(1).Range.Value = tbl1.ListRows(i).Range.Value 
    Next i 
End Sub 
関連する問題