엑셀 VBA에서 Sheets.Move 메서드는 특정 시트를 이동하는 기능을 제공합니다.
즉, 현재 워크북 내에서 시트의 위치를 변경하거나, 새로운 워크북으로 시트를 이동할 때 사용됩니다.
1. 기본 문법
Sheets("시트이름").Move Before:=Sheets("기준시트")
Sheets("시트이름").Move After:=Sheets("기준시트")
|
- Before → 지정한 시트 앞으로 이동
- After → 지정한 시트 뒤로 이동
📌 Before와 After를 동시에 사용할 수 없음 (둘 중 하나만 지정 가능)
📌 Move를 사용하면 시트가 복사되지 않고 원래 위치에서 이동함
📌 Before나 After를 생략하면 시트가 새 워크북으로 이동됨
2. 특정 시트를 첫 번째 시트 앞으로 이동
Sub 첫번째시트_앞으로이동()
Sheets("매출현황").Move Before:=Sheets(1)
End Sub
|
📌 "매출현황" 시트를 첫 번째 시트 앞(맨 처음)으로 이동
3. 특정 시트를 마지막 시트 뒤로 이동
Sub 마지막시트_뒤로이동()
Sheets("매출현황").Move After:=Sheets(Sheets.Count)
End Sub
|
📌 "매출현황" 시트를 마지막 시트 뒤로 이동
4. 현재 활성화된 시트를 마지막으로 이동
Sub 현재시트_마지막으로이동()
ActiveSheet.Move After:=Sheets(Sheets.Count)
End Sub
|
📌 현재 선택된(활성화된) 시트를 마지막으로 이동
5. 첫 번째 시트를 마지막으로 이동
Sub 첫번째시트_마지막으로이동()
Sheets(1).Move After:=Sheets(Sheets.Count)
End Sub
|
📌 첫 번째 시트를 마지막 시트 뒤로 이동
6. 마지막 시트를 첫 번째로 이동
Sub 마지막시트_첫번째로이동()
Sheets(Sheets.Count).Move Before:=Sheets(1)
End Sub
|
📌 마지막 시트를 첫 번째 시트 앞으로 이동
7. 새로운 워크북으로 시트 이동
Sub 새워크북으로_이동()
Sheets("Sheet1").Move
End Sub
|
📌 "Sheet1" 시트를 새로운 엑셀 파일(워크북)로 이동
📌 이동된 시트가 포함된 새 워크북이 자동 생성됨
8. 새로운 워크북으로 이동 후 저장
Sub 새파일로_이동후저장()
Dim wb As Workbook
Sheets("Sheet1").Move
Set wb = ActiveWorkbook
wb.SaveAs "C:\Users\Public\이동된시트.xlsx"
wb.Close
End Sub
|
📌 "Sheet1"을 새 워크북으로 이동 후 "C:\Users\Public\이동된시트.xlsx"로 저장
9. 모든 시트를 역순으로 이동
Sub 시트_역순_이동()
Dim i As Integer
For i = Sheets.Count To 2 Step -1
Sheets(i).Move Before:=Sheets(1)
Next i
End Sub
|
📌 워크북 내 모든 시트의 순서를 뒤집음
📌 (마지막 시트를 첫 번째로 반복적으로 이동하여 역순 정렬)
10. 모든 시트를 알파벳 순으로 정렬
Sub 시트_이름순_정렬()
Dim i As Integer, j As Integer
For i = 1 To Sheets.Count - 1
For j = i + 1 To Sheets.Count
If Sheets(i).Name > Sheets(j).Name Then
Sheets(j).Move Before:=Sheets(i)
End If
Next j
Next i
End Sub
|
📌 워크북 내 모든 시트를 이름순(알파벳 순)으로 정렬
11. 특정 단어가 포함된 시트를 첫 번째로 이동
Sub 특정단어포함_시트이동()
Dim ws As Worksheet
For Each ws In Sheets
If InStr(ws.Name, "보고서") > 0 Then
ws.Move Before:=Sheets(1)
End If
Next ws
End Sub
|
📌 이름에 "보고서"가 포함된 시트만 첫 번째 시트 앞으로 이동
📌 예: "월별보고서", "연간보고서" 등의 시트가 앞으로 이동
12. 사용자가 입력한 시트 이동 (InputBox 활용)
Sub 사용자입력_시트이동()
Dim 시트이름 As String, 위치 As Integer
시트이름 = InputBox("이동할 시트 이름을 입력하세요:", "시트 이동")
If 시트이름 <> "" Then
On Error Resume Next
위치 = InputBox("이동할 위치 (1부터 시작):", "위치 지정")
If 위치 >= 1 And 위치 <= Sheets.Count Then
Sheets(시트이름).Move Before:=Sheets(위치)
Else
MsgBox "잘못된 위치입니다.", vbExclamation
End If
If Err.Number <> 0 Then
MsgBox "해당 시트가 존재하지 않습니다.", vbExclamation
End If
On Error GoTo 0
Else
MsgBox "시트 이름을 입력하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 사용자가 입력한 시트를 원하는 위치로 이동
📌 입력한 시트가 존재하지 않으면 오류 메시지 출력
📝 정리
기능
|
VBA 코드
|
특정 시트를 첫 번째로 이동
|
Sheets("매출현황").Move Before:=Sheets(1)
|
특정 시트를 마지막으로 이동
|
Sheets("매출현황").Move After:=Sheets(Sheets.Count)
|
현재 활성화된 시트를 마지막으로 이동
|
ActiveSheet.Move After:=Sheets(Sheets.Count)
|
첫 번째 시트를 마지막으로 이동
|
Sheets(1).Move After:=Sheets(Sheets.Count)
|
마지막 시트를 첫 번째로 이동
|
Sheets(Sheets.Count).Move Before:=Sheets(1)
|
새로운 워크북으로 이동
|
Sheets("Sheet1").Move
|
새로운 워크북으로 이동 후 저장
|
wb.SaveAs "C:\파일.xlsx"
|
모든 시트를 역순 이동
|
For i = Sheets.Count To 2 Step -1: Sheets(i).Move Before:=Sheets(1): Next i
|
모든 시트를 이름순 정렬
|
If Sheets(i).Name > Sheets(j).Name Then Sheets(j).Move Before:=Sheets(i)
|
특정 단어 포함 시트 첫 번째로 이동
|
If InStr(ws.Name, "보고서") > 0 Then ws.Move Before:=Sheets(1)
|
사용자 입력 시트 이동
|
Sheets(InputBox("시트 이름?")).Move Before:=Sheets(InputBox("위치"))
|
🔥 VBA의 Sheets.Move를 활용하면 시트의 순서를 동적으로 변경하고, 원하는 워크북으로 이동할 수 있습니다! 🚀