한 통합 문서에서 다른 통합 문서로 데이터 마이그레이션. 새 통합 문서에서는 특정 열 (거의 250 개) 만 원합니다. 마스터 파일의 데이터가 일치하지 않고 동일한 범위에 있지 않은데 어떻게 250 개의 열을 추출 할 수 있습니까? 나는 VBA를 처음 사용하기 때문에 아래 코드를 시도했지만 작동하지만 250 열 모두에 대해 긴 코드를 작성해야합니까? 어떤 도움이라도 대단히 감사하겠습니다.
Sub Data_Migration()
Dim y As Workbook
Dim x As Workbook
Dim ws As Worksheet
Dim sh As Worksheet
Dim rng As Range
Set y = ThisWorkbook
Application.ScreenUpdating = 0
Set x = Workbooks.Open("file path")
'Column Q from master file with worksheet name cba is copied in new workbook with sheet name abc and pasted in column D
Set ws = y.Sheets("abc")
Set sh = x.Sheets("cba")
Set rng = sh.Range("Q2:Q11443")
rng.Copy
y.Sheets("abc").Range("D1").PasteSpecial xlValues
Application.CutCopyMode = False
Set ws = y.Sheets("abc")
Set sh = x.Sheets("cba")
Set rng = sh.Range("Z2:Z11443")
rng.Copy
y.Sheets("abc").Range("E1").PasteSpecial xlValues
Application.CutCopyMode = False
Set ws = y.Sheets("abc")
Set sh = x.Sheets("cba")
Set rng = sh.Range("AI2:AI11443")
rng.Copy
y.Sheets("abc").Range("F1").PasteSpecial xlValues
Application.CutCopyMode = False
x.Close
End sub
다음 코드를 표준 코드 모듈에 붙여 넣습니다 (기본적으로 'Module1'이지만 원하는대로 이름을 지정할 수 있음).
Sub Main()
' 21 Mar 2017
Dim WsS As Worksheet ' S = Source
Dim WbT As Workbook, WsT As Worksheet ' T = Target
Dim Cs As Long, Ct As Long ' Column numbers: Source & Target
Dim Clms As Variant
Dim i As Integer ' index for Clms
Application.ScreenUpdating = False
On Error GoTo ErrExit
' Source is the first worksheet in the active workbook:
Set WsS = ActiveWorkbook.Worksheets("Haseev")
Set WbT = Workbooks.Add(xlWBATWorksheet)
Set WsT = WbT.Worksheets(1)
WsT.Name = "Extract 250" 'name the target sheet
Clms = Array(1, 4, 8, 13) ' list column numbers < 17
For i = 0 To UBound(Clms)
CopyColumn WsS, WsT, Clms(i), Ct
Next i
For Cs = 17 To Columns("CHU").Column Step 9
CopyColumn WsS, WsT, Cs, Ct
'''' If Ct > 10 Then Exit For
Next Cs
ErrExit:
Application.ScreenUpdating = True
End Sub
코드 이해 :-현재 활성 통합 문서를 "소스"로 만듭니다. 즉, 데이터를 복사하려는 통합 문서를 확인해야합니다. 코드는이 통합 문서에서 "Haseev"라는 이름의 워크 시트를 찾을 것으로 예상합니다. 코드의 이름을 변경하거나 전체 코드 줄을 다음과 같이 변경하십시오.
Set WsS = ActiveWorkbook.Worksheets(1)
이는 통합 문서의 첫 번째 워크 시트를 지정합니다. 이는 귀하의 것과 같은 큰 통합 문서에 시트가 너무 많지 않을 가능성이 높기 때문에 합리적입니다.
이 코드는 단일 시트가 포함 된 새 통합 문서를 만듭니다. 시트 이름은 "Extract 250"입니다. 코드의 이름을 원하는 이름으로 변경하십시오. 다음으로 코드는 선택한 열을 새 통합 문서에 복사합니다.
Clms = Array(1, 4, 8, 13)
복사 할 열을 지정할 수 있습니다 (필요한만큼 쉼표로 구분 된 숫자). 원하지 않는 경우 Clms = Array ()와 같이 사양을 비워 두십시오.
다음 루프에서는 열 17에서 시작하여 "CHU"열까지 9 번째 열마다 복사됩니다. "CHU"를 수정할 수 있습니다. 라인
'''' If Ct > 10 Then Exit For
내 테스트에서 남은 것입니다. 동일한 목적으로 사용하는 것이 좋습니다. 코드를 비활성화하는 아포스트로피를 제거하면 10 개의 열이 새 통합 문서에 복사 된 후 루프가 복사를 중지합니다.
위 코드에는 복사 또는 붙여 넣기가 포함되어 있지 않습니다. 대신 위에서 이미 복사 한 Main 프로 시저 아래에 붙여 넣어야하는 다음 하위를 호출합니다.
Private Sub CopyColumn(WsS As Worksheet, _
WsT As Worksheet, _
ByVal Cs As Long, _
Ct As Long)
' 21 Mar 2017
' Ct is a return Long
If Cs > 0 Then ' column number must be > 0
Ct = Ct + 1
WsS.Columns(Cs).Copy Destination:=WsT.Columns(Ct)
End If
End Sub
기본적으로 Main 프로시 저는이 서브가 호출 될 250 회 이상을 관리합니다.
출력 통합 문서에는 "Sheet1"과 같이 Excel에서 제공하는 일반 이름이 있습니다. 원하는 이름으로 저장하거나 닫고 다음에보고 싶을 때 새로 만들 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다