2016-10-21 9 views
-2

同じ名前の列が複数ある別々のタブに2つのテーブルがあります。私はこれらの2つのテーブルのデータを3番目のタブの新しいテーブルに結合したいと思います。私はいくつかの方法で実験を試みたVBAテーブルの列名をループし、新しいシートにデータを結合する

はちょうどハード(A、B、C ...のような)列位置を符号化し、手動で20またはので、私はコピーする必要がある列およびペーストにコーディングようにこれを行うには以上。しかし、私はむしろコピーし、データをつかんで3番目のテーブルに追加する必要がある列タイトルの配列のループを実行したいと思います。そうすることで、場所が動かされても作業が継続するので、列のタイトルだけを心配する必要があります。私は配列を使用したり、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からのデータを貼り付けます。

ここにお手伝いをしてください。ありがとう!

+0

であなたは()、列ヘッダーのそれぞれの位置を特定するために検索を使用することができますので、私はそれを開始すると、あなたは特定の問題に実行する場合、とき/戻し投稿、いくつかのコードを書いてみてください。今すぐあなたの質問は少し広すぎる - あなたが記述するアプローチは合理的なので、始めてみてください。 –

+0

@TimWilliams私はオリジナルの投稿のコードを更新して、これをどこで更新したのですか?今は、各ループに正しいデータがコピーされており、テーブルの正しい宛先列がデータを統合することになっていると思います。私は行き先のテーブルの最後のアクティブな行の下にデータを追加するために、宛先セルをどのようにオフセットするべきか明確ではないので、ちょっと固まっています。そして、私はまだ3番目のテーブルをループして同じことをする必要があります。 – ABH

答えて

1

私の問題のほとんどは、コピーして移動するための正しいテーブルとデータを参照していると思います。私は元の質問に完成したコードを掲載します。しかし、今私は正しく更新されていない変数については問題があります。私のサブの終わりにこのビットのコードのように。前のセクションのcopyrng、lastrow、lastcolを再利用します。私がデバッグすると、lastrowとlastcolが正しい番号を示していますが、コピー範囲は最後の行までの列O(#15)を選択するだけです。これを引き起こす原因や変数のリセット方法は何ですか?

With tbl3.DataBodyRange 
CopyRng = .Range(Cells(1, 16), .Cells(lastRow, lastCol)) 

    With CopyRng 
     .Copy 
     Debug.Print .Address 
     Debug.Print lastCol 
    End With 

エンド

+0

最初の「セル」には、その前にドットがありません – Slai

関連する問題