|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 엑셀 버전(95,97,2000,xp,2003,2007):
* 아래줄에 질문을 작성하세요 >>
어떤 파일안에 있는 SHEET들을 불러서 다른파일에서 합치는 VBA가 궁금해요
==============[유아님 글에 대한 답변입니다]==============
첨부 파일 참고하세요...
Sub MergeData()
Dim vItem, vX
Dim wbkSel As Workbook
Dim shtX As Worksheet, rUsed As Range
Dim shtTg As Worksheet
Dim bFirst As Boolean: bFirst = True
Application.DisplayAlerts = False
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "합치려는 원본 파일을 선택"
.InitialFileName = ThisWorkbook.Path & Application.PathSeparator '초기 폴더 위치 설정
.AllowMultiSelect = True
.Show
If .SelectedItems.Count > 0 Then
Set vItem = .SelectedItems
Else
MsgBox "선택한 파일이 없습니다.", vbInformation
GoTo Exit_Sub
End If
End With
Set shtTg = Worksheets.Add(After:=ActiveSheet) '새 시트에 합치기 결과을 모음
For Each vX In vItem
Set wbkSel = Workbooks.Open(vX, ReadOnly:=True)
For Each shtX In wbkSel.Worksheets
Set rUsed = shtX.Range("A3").CurrentRegion
If bFirst Then
Set rUsed = rUsed.Resize(rUsed.Rows.Count - 1) '합계행을 제외하기 위함
rUsed.Copy shtTg.[A1]
bFirst = False
Else
Set rUsed = rUsed.Offset(1).Resize(rUsed.Rows.Count - 2) '필드행과 합계행을 제외함
rUsed.Copy shtTg.Cells(Rows.Count, 1).End(xlUp).Offset(1)
End If
Next
wbkSel.Close True
Next
Set rUsed = shtTg.[A1].CurrentRegion
Set rUsed = rUsed.Offset(1).Resize(rUsed.Rows.Count - 1)
With rUsed.Columns(1)
.ClearContents
.Cells(1) = 1
.DataSeries xlColumns, xlLinear
End With
With shtTg.Cells(rUsed.Rows(rUsed.Rows.Count).Row + 1, 1)
rUsed.Rows(rUsed.Rows.Count).Copy
.Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
.Cells(1, 1) = "합"
.Cells(1, 4) = "=Sum(" & rUsed.Columns(4).Address & ")"
.Select
End With
Exit_Sub:
Application.DisplayAlerts = True
End Sub |
|