안녕하세요, 짤막한 강좌 이충욱 강사입니다.
이전 강좌에서 페이지 나누기를 삽입하는 매크로를 만들어 봤습니다.
지정해둔 단축키 <Ctrl + Shift + K>를 눌러 간단히 페이지를 나눌 수 있었는데 나누어야 하는 행 개수가 팔십 여섯개나 되다 보니 단축키를 팔십 여섯번이나 눌러야 했습니다.
이 경우 매크로를 조금 수정하면 단축키를 팔십 여섯번 누르는 것이 아니라 한 번만 눌러 페이지 나누기를 할 수 있습니다.
실습 파일을 다운로드 받아 따라해보세요.
매크로를 기록한 엑셀 파일의 확장자는 .xlsm입니다. (일반 엑셀 파일 .xlsx)
실습 파일 다운로드
완성 파일 다운로드
실습 파일을 열고 단축키 <Alt + F11>을 누릅니다.
VBE가 실행됩니다.
왼쪽 프로젝트 탐색기 창에서 모듈 앞 플러스(+)를 눌러 확장 시키고 Module1을 더블 클릭합니다.
Module1에는 우리가 만든 매크로 코드가 담겨 있습니다.
만들어진 매크로를 수정하려면 매크로를 기록하듯이 수정할 수 있는 것이 아니라 만들어져 있는 코드를 수정해야 합니다.
Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
매크로 코드 중 다른 것들 살펴보는 것은 잠시 미뤄두고 당장 해결해야 할 부분만 봅시다.
우리가 만들었던 매크로는 네 줄로 구성되어 있습니다.
인용부호(')로 시작한 다섯 줄은 주석 이라고 하는데, 설명하기 위해 쓰인 것으로 매크로가 실행되는 것과는 상관없습니다.
첫 번째 줄 Sub와 마지막 줄 End Sub이 매크로의 시작과 끝을 나타냅니다.
매크로를 기록하면 자동으로 만들어집니다.
실제 실행되는 부분은 두 줄입니다.
이 두 줄에 나타나 있는 내용도 차차 알아가면 되고 당장 무슨 뜻인지 지금은 알 필요 없습니다. ^^
조금 어림짐작을 하자면 'ActiveCell이 현재 선택된 셀을 의미한다' 정도를 안다면 문제 해결에 도움됩니다.
처리할 작업은 팔십 여섯번 페이지 나누는 작업을 자동으로 반복하게 하는 겁니다.
VBA에서 반복문은 For~Next, For Each~Next, Do~Loop문 3가지가 있습니다.
기본적인 반복문은 Do~Loop문입니다.
여기서는 Do~Loop문을 이용해 문제를 해결할 겁니다.
Do~Loop문에는 While과 Until로 조건을 지정하는데, 만약 Do와 Loop만 있다면 그 속에 두 줄의 명령이 무한 반복하게 됩니다.
그래서 언제까지 반복이 멈출 조건이 필요한겁니다.
Loop 옆에 While ActiveCell <> "" 을 추가합니다.
해석하면 '현재 셀이 비어있지 않을 때까지'가 됩니다.
ActiveCell은 현재 셀이고, <> 같지 않다 연산자가 되고, "" 공백입니다.
Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
Do
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
ActiveCell.Offset(1, 0).Range("A1").Select
Loop While ActiveCell <> ""
End Sub
명령문을 작성할 때 소문자로 입력하고 <Enter>를 누르거나 방향키를 사용하여 다른 줄로 이동하면 자동으로 첫 글자가 대문자로 바뀝니다.
그러면 철자가 맞다는 의미이므로 소문자로 입력해 저절로 바뀌는지 확인하는 것이 좋습니다. (멋진 팁이죠?)
여기까지만 해도 매크로의 문제는 해결되었지만 몇 가지 처리를 더해보겠습니다.
ActiveWindow 앞에 커서를 두고 <Tab> 키를 누르면 오른쪽으로 4칸 이동합니다.
ActiveCell 앞에서도 <Tab> 키를 누릅니다.
Do~Loop문이 한 묶음이고 그 안에 적은 명령문들을 Do~Loop문에 포함된 명령문이라는걸 시각적으로 표시하기 위해 들여쓰기 한 것입니다.
Sub~End Sub문도 한 묶음이라 처음 코드에 들여 쓰기가 되어 있었습니다.
Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
Do
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
ActiveCell.Offset(1, 0).Range("A1").Select
Loop While ActiveCell <> ""
End Sub
그리고 하나 더!
DoEvents 명령문을 하나 더 작성해 둡니다.
위 두 줄과 구분하기 위해 빈 줄을 하나 넣고 doevents라고 입력한 뒤 커서를 다음 줄로 옮기면 DoEvents로 저절로 변경되어야 합니다.
DoEvents 명령문은 반복문 안에 입력해서 혹시 문제가 생겨 무한반복이 될 경우 [재설정] 버튼을 눌러 무한반복을 취소할 수 있도록 해 주는 코드입니다.
Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
Do
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
ActiveCell.Offset(1, 0).Range("A1").Select
DoEvents
Loop While ActiveCell <> ""
End Sub
이제 열린 VBE 창을 닫거나(다시 <Alt + F11>) 옆으로 미뤄두고 엑셀 창으로 돌아갑니다.
엑셀에서 [A5] 셀에 커서를 둡니다.
우리가 만든 매크로 실행 단축키 <Ctrl + Shift + K>를 누르면 커서가 아래로 이동하며 처리가 됩니다.
매크로만으로도 충분히 쉽게 문제를 해결할 수 있었지만 VBA를 사용하므로 더 편리하게 쓸 수 있게 됩니다.
수고하셨습니다.
'매크로&VBA' 카테고리의 다른 글
시트의 내용을 다른 시트에 한꺼번에 간단히 복사하는 VBA (1) | 2020.05.19 |
---|---|
엑셀 매크로&VBA] 여러 시트 내용을 조회하고 수정하는 간단한 VBA (0) | 2020.04.12 |
엑셀 매크로&VBA] 고급 필터 매크로를 보완하는 VBA(변수와 InputBox 함수) (0) | 2020.04.02 |
엑셀 매크로&VBA] 고급 필터 매크로(조건을 변경할 때마다 결과 값이 자동으로 나오도록 매크로 설정하기) (2) | 2020.03.23 |
엑셀 매크로&VBA] 상대 참조 매크로 - 페이지 나누기 (0) | 2020.03.10 |