※'엑셀 매크로로 시트 생성하기'를 먼저 보시면 이해하는데 도움이 될 것입니다.
이번 글에서는 시트 개수가 정해진 상황*에서, 여러 시트의 이름을 For 구문 매크로 중 Range(셀 주소) 버전으로 한 번에 바꿔보겠습니다.
* 향후 시트 개수가 정해지지 않은 상황에서도 유연하게 작동하는 코드를 소개해 드리겠습니다.
<예시 파일>
예시파일 생황
▲예시 파일에는 위의 사진처럼 두 번째 시트에서 네 번째 시트까지 각각의 표가 있습니다. 그리고 첫 번째 시트에 목차 시트를 만들어서, 매크로로 각 시트의 이름을 '목차' 혹은 표 이름으로 바꾸고자 합니다.
매크로 만들기
1) 첫 번째 시트에 목차 만들기
시트1에 우선 바꾸고 싶은 시트 이름을 연속적으로 기입합니다. 'No.' 나 시트명 같은 머리글 등 다른 부분은 작성할 필요가 없고, 드래그한 부분만 기입하셔도 됩니다. 예시 파일의 경우 'B4:B8' 범위에 변경할 시트 이름을 기입하였습니다.
2-2) For 구문 코드 짜기
본격적으로 For 구문을 짜기 전에, 'Range 객체'에 대해서 알아야 할 것이 두 가지 있습니다.
첫째, Range는 말 그대로 범위를 의미합니다.
둘째, Range("셀 주소")를 입력하면 셀 주소에 해당하는 범위를 선택합니다. 단, 텍스트로 셀 주소를 입력할 시 셀 주소는 큰 따옴표 안에 있어야 합니다. Range("A1")은 A1 셀을 의미하며, Range("A1:B2")는 A1:B2 범위를 의미합니다. \\
<코드 전문>
Sub 셀주소버전()
Dim i As Integer
For i = 1 To 5 '예시 파일에서는 시트 개수가 5개로 정해졌으므로 1 to 5
ThisWorkbook.Sheets(i).Name = ThisWorkbook.Sheets(1).Range("B" & i + 3) 'Range("B"&1+3)은 'B4'셀 의미
Next i
End Sub
3) 구문 해석
① For 1 = 1 to 5
이번 예시 파일에는 시트의 개수가 5개로 정해져 있기 때문에 For i = 1 to 5로 작성한 것입니다.
② ThisWorkBook.
'현재 파일의' 라는 뜻으로, 파일을 한 개만 열어놓고 매크로를 돌리는 경우에는 생략해도 무방합니다.
③ Sheets(i).Name
i 번째 시트(Sheets(i).)의 이름(Name)이라는 뜻입니다. 시트를 선택할 때는 Sheet이 아니라 'Sheets'로 코딩해야 한다는 점을 유의해야 합니다.
④ Sheets(1).Range("B" & i +3)
첫 번째 시트의(Sheets(1).)의 B열 i +3 행 셀의 값을 선택하는 명령어입니다. Sheets(1).Range("B" & i +3)로 구문을 짠 이유는 첫 번째 시트의 B4:B8 바꾸고자 하는 이름들이 기입되어 있기 때문입니다.
i+3행을 선택하는 이유는 B4부터 이름이 기입되어 있어서 i에 3을 더해줘야 올바른 행을 갖고 오기 때문입니다. 만약에 바꾸고자 하는 이름이 B1:B5 범위에 기입되어 있다면, Sheets(1).Range("B" & i )로 코딩하는 것이 옳습니다.
실행 결과
예시 파일 첫 번째 시트에서 '시트명 바꾸기 버튼'을 클릭한 결과, 위의 사진처럼 시트 이름이 한 번에 바뀝니다.
매크로 코딩에는 정답은 없습니다. 따라서, 시트명을 한 번에 바꿀 수 있는 For 구문도 다양하게 짤 수 있는데요. 향후 다른 버전의 For 구문을 소개하고, 더 나아가 시트 개수가 정해지지 않은 상황에서 유연하게 쓸 수 있는 코드도 소개해 드리겠습니다.
'엑셀, VBA, 파워쿼리 > VBA 매크로' 카테고리의 다른 글
[VBA 매크로] 현재시트만 따로 저장하기 (0) | 2023.10.10 |
---|---|
[VBA 매크로] '직접 실행 창' 사용법 #1 간단한 코드 바로 실행해보기 (0) | 2023.10.10 |
[VBA 매크로] 원하는 이름으로 엑셀시트 생성하기 [Cells(행,열) 버전] (1) | 2023.10.10 |
[엑셀 VBA 코딩] 엑셀 매크로로 시트 생성하기 (0) | 2023.10.10 |
[VBA 매크로] 시트 값복사/모든 시트 값복사 매크로 VB 코드 해석: For 구문 등 (1) | 2023.10.06 |
댓글