2016-10-21 2 views
-2

동일한 이름의 열이 여러 개있는 별도의 탭에 두 개의 테이블이 있습니다. 이 두 테이블의 데이터를 세 번째 탭의 새 테이블에 결합하고 싶습니다.VBA 테이블 열 이름을 반복하고 새 시트에 데이터를 결합하십시오.

열 위치 (예 : 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의 데이터를 붙여 넣습니다.

여기에서 도움을 청합니다. 감사!

+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

관련 문제