
관련: 지식인
VBA를 이용하면 이런 작업은 자동화시킬 수 있습니다.
요즘에는 AI에게 부탁하면 코드를 어느 정도 만들어줍니다.
대신 잘 되는지 검증이 꼭 필요합니다.
아래는 ChatGPT의 코드를 튜닝하였습니다.
Sub 여러_엑셀파일_시트_모으기()
Dim fd As FileDialog
Dim selectedFile As Variant
Dim wbSource As Workbook
Dim wbTarget As Workbook
Dim ws As Worksheet, wsA As Worksheet
Dim newWs As Worksheet
Dim i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error GoTo ErrorHandler
'현재 실행 중인 파일
Set wbTarget = ThisWorkbook
Set wsA = ActiveSheet
'파일 선택 창
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "시트를 가져올 Excel 파일을 선택하세요"
.AllowMultiSelect = True
.InitialFileName = wbTarget.Path & Application.PathSeparator
.Filters.Clear
.Filters.Add "Excel 파일", "*.xlsx;*.xlsm;*.xls;*.xlsb"
If .Show <> -1 Then
GoTo ExitHandler
End If
End With
'선택한 파일을 차례대로 처리
For Each selectedFile In fd.SelectedItems
'현재 파일 자신은 제외
If CStr(selectedFile) <> wbTarget.FullName Then
Set wbSource = Workbooks.Open( _
Filename:=CStr(selectedFile), _
ReadOnly:=True)
'원본 파일의 모든 시트를 현재 파일로 복사
For Each ws In wbSource.Worksheets
ws.Copy After:=wbTarget.Sheets(wbTarget.Sheets.Count)
Set newWs = wbTarget.Sheets(wbTarget.Sheets.Count)
Next ws
'원본 파일 닫기
wbSource.Close SaveChanges:=False
Set wbSource = Nothing
End If
Next selectedFile
'=================================================
' 복사된 모든 시트 선택
' 현재 시트(wsA) 이후의 모든 시트
'=================================================
If wsA.Index < wbTarget.Sheets.Count Then
wbTarget.Sheets(wsA.Index + 1).Select
For i = wsA.Index + 2 To wbTarget.Sheets.Count
wbTarget.Sheets(i).Select Replace:=False
Next i
End If
'원래 작업하던 시트로 다시 돌아가고 싶다면
'아래 줄은 사용하지 않습니다.
'wsA.Activate
MsgBox "선택한 Excel 파일의 모든 시트를 가져왔습니다. 저장하세요" & vbCrLf & vbCrLf & _
"복사된 모든 시트를 선택한 상태입니다.", _
vbInformation, "완료"
ExitHandler:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Set fd = Nothing
Set wbSource = Nothing
Set wbTarget = Nothing
Exit Sub
ErrorHandler:
MsgBox "오류가 발생했습니다." & vbCrLf & vbCrLf & _
"오류번호: " & Err.Number & vbCrLf & _
"내용: " & Err.Description, _
vbExclamation, "오류"
If Not wbSource Is Nothing Then
wbSource.Close SaveChanges:=False
End If
Resume ExitHandler
End Sub
추가 코드
더보기
Sub 현재시트_이후_모든시트_선택()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
'현재 시트 이후의 시트가 있는 경우
If ws.Index < ThisWorkbook.Worksheets.Count Then
For i = ws.Index + 1 To ThisWorkbook.Worksheets.Count
If i = ws.Index + 1 Then
ThisWorkbook.Worksheets(i).Select
Else
ThisWorkbook.Worksheets(i).Select Replace:=False
End If
Next i
End If
End Sub
Sub 선택된_모든시트_삭제()
Dim answer As VbMsgBoxResult
Dim i As Long
answer = MsgBox( _
"선택된 모든 시트를 삭제할까요?", _
vbYesNo + vbQuestion, _
"시트 삭제 확인")
If answer <> vbYes Then Exit Sub
Application.DisplayAlerts = False
'선택된 시트들을 뒤에서부터 삭제
For i = ActiveWindow.SelectedSheets.Count To 1 Step -1
ActiveWindow.SelectedSheets(i).Delete
Next i
Application.DisplayAlerts = True
End Sub
Sub 현재시트_이후_시트삭제()
Dim ws As Worksheet
Dim i As Long
Dim answer As VbMsgBoxResult
answer = MsgBox( _
"현재 시트 이후의 모든 시트를 삭제할까요?", _
vbYesNo + vbQuestion, _
"시트 삭제 확인")
If answer <> vbYes Then Exit Sub
Application.DisplayAlerts = False
'현재 시트
Set ws = ActiveSheet
'현재 시트 이후의 시트를 뒤에서부터 삭제
For i = ThisWorkbook.Worksheets.Count To ws.Index + 1 Step -1
ThisWorkbook.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
MsgBox "현재 시트 이후의 모든 시트를 삭제했습니다.", _
vbInformation, "완료"
End Sub
첨부파일 파일 속성에서 차단해제하고 파일 열 때 매크로 허용해서 열고 녹색 도형을 누르면
파일 선택 대화상자가 뜨고 선택한 파일들의 모든 시트를 현재 시트 뒤에 복사합니다.

선택된 복사 시트들을 다른 데 복사하거나 삭제할 수 있게
작업 후 복사된 시트들을 모두 선택한 채 유지합니다.
파란 도형을 누르면 현재 시트 이후의 모든 시트를 선택합니다.
붉은 도형을 누르면 확인 후 현재 시트 이후의 모든 시트를 삭제합니다.

'XLS+VBA' 카테고리의 다른 글
| 엑셀링크목록 브라우저 북마크에 일괄로 추가하기 (0) | 2026.03.18 |
|---|---|
| 실시간 도서 ISBN 코드로 재고 수량 조회 (0) | 2026.03.07 |
| 멜론 노래 정보 가져와서 음악파일명 일괄 변경하기 (0) | 2026.03.02 |
| 엑셀 데이터를 다른 창 입력란에 자동으로 일괄 붙여넣기 (0) | 2026.01.22 |
| 엑셀로 영상 편집하기? (1) | 2025.12.15 |
| 엑셀에서 취소선 대신 화살표 등 도형 표시 (0) | 2025.10.14 |
| 엑셀 특정 단어 강조표시 (0) | 2025.10.02 |
| 색상에 따른 합산 (3) | 2025.08.03 |

최근댓글