rand(life)
[엑셀기초] 6.1 매크로 기초 본문
2. [편집]
2.6 정렬 및 필터
3.[차트]
4.[인쇄]
4.4 제목줄 반복 인쇄 /머리글 - 바닥글 설정 / 페이지레이아웃 보기
5.[기타]
6.[매크로]
6.1 매크로 기초
드디어 엑셀기초의 마지막 시간입니다. ^^
오늘은 매크로에 대해 알아보겠습니다. 매크로는 단순 작업을 여러 번 반복할 수 있도록 저장해 두는 자동작업입니다. 아래아한글에도 매크로 기능이 있으니, 써 보신 분은 금방 아실 수 있을 것입니다.
매크로에 대해 깊이 들어가면 VBA (Visual Basic for Application)이라는 컴퓨터 프로그래밍 언어를 알아야 합니다만, 여기서 그것까지 다루기는 힘들고, 간단한 매크로를 작성하는 방법과 주의할 점 하나만 알아보는 것으로 하겠습니다.
위의 그림에서 왼쪽처럼 되어있는 명렬을 오른쪽과 같이 바꾸어주는 것과 같은 작업을 할때가 있습니다. B열에 있는 한 셀씩을 잘라내어서 A열의 한 셀씩 "잘라낸 셀 삽입"을 하면 됩니다. 지금처럼 학생수가 얼마되지 않을때는 문제 없습니다만, 이런일을 수백명, 수천명의 명단을 두고 하려한다면 엄청난 스트레스겠지요.
이렇게 수십번 수백번해야하는 단순한 일을 대신해 주는 것이 바로 매크로입니다.
위와 같은 데이터가 있을 때, 모든 셀을 선택하여 가운데 정렬하고, 테두리선을 정해주고, 글자폰트를 바꿔주고 글자크기를 늘리는 일을 해야한다고 합시다. 한번 정도면 문제가 없는데, 이런 데이터가 매일 나오고, 그 데이터에 대해서 매번 같은 작업을 해주어야한다면, 여러작업을 한꺼번에 매크로에 등록해 놓고, 데이터가 바뀔때마다 매크로를 실행하기만 하면 자동으로 그 작업을 다 해주도록 하면 좋을 것 같습니다.
그러면 위에서 언급한 작업을 한꺼번에 해주는 매크로를 작성해 보겠습니다.
엑셀 왼쪽 상단의 오피스 단추 클릭한 후, "Excel 옵션"을 클릭합니다.
Excel 옵션창이 뜨면 "기본설정" 클릭한 후,
Excel에서 가장 많이 사용하는 옵션란에 있는 "리본메뉴에 개발도구 탭 표시"에 체크한 후
확인하면 이제부터는 언제든지 엑셀을 실행하면 개발도구 탭이 리본메뉴에 표시되어 나옵니다.
이제 본격적으로 매크로를 기록해 보겠습니다.
개발도구—(코드)—매크로기록을 클릭합니다.
매크로 기록창이 뜨면 매크로 이름을 지정해주고,
바로가기키에 적당한 문자를 넣고 확인을 클릭합니다. 다음부터는 바로가기키만 누르면 매크로가 실행됩니다.
컨트롤키와 결합하여 다른 기능을 하도록 기존에 설정되어있는 문자는 피해주세요. 예를 들면 c (복사), v(붙이기), a(전체선택) …. 저는 주로 e를 씁니다.
바로가기키는 소문자/대문자를 구별합니다. 대문자를 사용하면 컨트롤키와 쉬프트키를 함께 누르고서 문자를 입력한다는 의미가 됩니다)
이제 원하는 작업을 수행합니다.
폰트수정, 크기수정, 테두리설정, 가운데 정렬, D열 숨기기등의 작업을 수행하였습니다. 다 한 뒤에 "기록중지"를 클릭하면 매크로가 완성되었습니다.
같은 파일의 다른 시트에 아까 작업한 것과 유사한 데이터가 있습니다. 이것도 아까와 똑 같은 작업을 수행해야합니다. 아까 매크로를 저장해 두었으므로, 일일이 같은 작업을 반복할 필요없이, 매크로를 실행하면 자동으로 해결됩니다.
개발도구—(코드)—매크로를 클릭합니다.
아까 저장해둔 매크로가 보입니다. "실행"버튼을 누르면 아까 저장해 둔 작업이 그대로 실행됩니다.
또는, 아까 설정해 두었던 바로가기키 (Ctrl –e)를 누르면 실행됩니다.
매크로를 작성하고서 파일을 저장하려면 경고 메시지가 뜹니다. "아니요"를 클릭하고
"다른 이름으로 저장" 창이 뜨면 파일형식을 "Excel 매크로 사용 통합문서 (*.xlsm)"으로 지정하여 저장하여야 다음번에 파일을 열때 매크로가 사라지지 않고 계속 남아있습니다.
여기까지가 매크로에 대한 기본적인 설명입니다. 주의할 점 한가지만 알려드립니다.
맨처음에 보여드렸던 이 작업을 수행하기 위해서는 주의해야합니다. 왜냐하면, B1셀의 내용을 잘라내어 A1셀아래에 삽입하여 붙여넣기하는 작업만을 매크로로 작성하면, 실제로 의도한 것과는 다르게 작동할 수도 있기 때문입니다.
실제로 해 보겠습니다.
개발도구—(코드)—매크로기록을 클릭하여 매크로 기록창이 뜨면 매크로 이름과 바로가기키를 입력합니다.
이제 매크로가 기록중입니다. B1셀의 내용을 A1셀 아래에 삽입해 넣는 작업을 기록합니다.
B1셀을 잘라내기하여
A2셀에 마우스 오른쪽클릭하여 "잘라낸 셀 삽입"을 실행합니다.
창이 뜨면 "아래로밀기"를 선택하고 확인합니다.
학번이 이름 아래로 왔습니다. 이제 "기록중지"를 클릭하여 매크로기록을 멈춥니다.
이제 두번째 학생을 클릭하고 아까 기록해 두었던 매크로를 실행하면
두번째학생이름 아래에 학번이 붙는 것이 아니라, 첫번째 학생이름 아래에 빈셀이 하나 더 들어갔습니다. 왜 이럴까요?
이것을 이해하지 못하면 매크로를 제대로 사용할 수 없습니다.
매크로의 속 구조를 알기 위해 Alt-F11을 눌러봅시다.
또는 개발도구—(코드)—Visual Basic을 실행해도 됩니다.
Visual Basic 창이 뜹니다. 아까 지정했던 "학번을 이름밑에"라는 매크로 이름이 보입니다. 그 아래에 써 있는 코드가 바로 Visual Basic이라는 프로그래밍 언어입니다. 지금 우리는 Visual Basic을 배우려는 것이 아니므로, 그 의미를 대강만 훑어보겠습니다.
Range("B1").Select --- B1셀을 선택하여
Selection.Cut --- 선택한 부분을 잘라내고
Range("A2").Select --- A2셀을 선택하여
Selection.Insert Shift:=xlDown -- 복사한 셀을 기존의 셀들을 아래로 밀고 삽입해 넣는다
그러면 여기서 눈치를 채실 것입니다. 지금 우리가 기록한 매크로는 B1셀을 A2셀자리에 삽입해 넣는 작업만 있고, B2,B3,B4…. 셀을 A4,A6,A8…셀의 위치에 넣는 작업은 없는것입니다.
지금 하려는 작업을 제대로 해내려면 우리는 매크로를 통해 엑셀에 명령을 내릴때 "B1셀의 내용을 A2에 삽입해"와 같이 구체적인 셀주소로 표현하지 말고, "기준점에서 오른쪽으로 한칸위치에 있는 내용을 복사하고, 복사한 위치에서 왼쪽으로 한칸, 아래로 한칸 간 위치에 삽입해"과 같이 표현해야 합니다.
이런 일을 하기위해 "상대참조로기록"을 사용합니다.
A1셀을 선택한 상태에서 (A1셀이 기준셀이 됩니다)
개발도구—(코드)--"상대참조로기록"을 클릭합니다. 클릭하면 위와 같이 색깔이 변합니다.
이제 매크로를 기록합니다.
"이름밑에학번2"라는 이름으로, 바로가기키는 r을 부여합니다.
기준셀의 한칸 오른쪽에 있는 셀(B1)을 잘라내기하여
잘라낸셀의 왼쪽한칸, 아래한칸위치에 있는 셀(A2)에 마우스 오른쪽클릭하여 "잘라낸 셀 삽입"을 실행합니다.
창이 뜨면 "아래로밀기"를 선택하고 확인합니다.
학번이 이름 아래로 왔습니다.
여기서 기록을 멈추지 말고 잠시 생각해봅시다. (생각이 귀찮으신 분은(ㅎㅎ) 아래 노란색 상자는 건너뛰고 다음 단계로 넘어가 주세요.)
여기서 매크로 작성이 끝나면 A2셀을 선택한채로 매크로가 종료되는데, 이 다음에 다시 매크로를 실행하면 어떻게 될까요?
선택된 셀이 A2셀이기 때문에, 매크로를 실행하는 다음번에는 기준셀이 A2셀이되어서, 그 오른쪽셀 (B2)을 잘라내기하여, 왼쪽한칸, 아래한칸의 셀(A3)에 삽입하게 됩니다.
그 결과는 위와 같습니다. 두번째 학생이름 아래에 붙도록 하기위해서는 B열에 있는 데이터의 위치를 두번째 학생의 이름이 있는 행까지 아래로 내린 후 두번째학생 이름을 선택하고 매크로가 끝나야하겠습니다.
그래야 다음번 매크로를 실행하면 두번째 학생의 이름이 기준점이 되어 매크로가 의도한대로 수행됩니다.
A2셀에 첫번째 학생의 학번을 삽입해 넣은 작업에 이어 작업을 계속 기록합니다.
B열을 잘라내서
A열의 두번째 학생의 이름 옆에 붙입니다.
두번째 학생의 이름을 클릭하고 매크로 기록을 중지합니다. 이제 기록된 매크로를 실행해보면, 한번 실행할 때마다 한 학생씩, 학번이 이름 밑으로 가는 것을 볼 수 있습니다.
Alt-F11을 눌러 Visual Basic창을 열어서 기록된 매크로의 코드를 살펴봅시다.
Sub 이름밑에학번2()
' 이름밑에학번2 Macro
' 바로 가기 키: Ctrl+r
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.Cut
ActiveCell.Offset(1, -1).Range("A1").Select
Selection.Insert Shift:=xlDown
ActiveCell.Offset(0, 1).Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveCell.Range("A1:A14").Select
Selection.Cut
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Range("A1").Select
End Sub
Offset(0,1)과 같은 코드가 많이 보입니다. 이전에 다룬 적이 있는 Offset함수와 같은 의미입니다. 기준점에서 아래로 몇칸, 오른쪽으로 몇칸 이동한 위치를 가리킵니다. "상대참조로기록"을 선택하였기 때문입니다.
이 매크로도 문제는 있습니다. 학생수가 1000명이라면 바로가기키를 1000번 눌러야하는 것이니까요. 그것도 힘든 일이겠지요.
그때는 Visual Basic창에서 몇번 반복해서 실행할 것인지를 지정해 두면 됩니다만, 그것은 기초강좌에는 어울리지 않는 내용일 것 같으니 생략하겠습니다.
----------------------------------------------------------------------------------------------------
이것으로 정기적으로 올리는 기초강좌는 끝납니다만, VBA부분은 저도 잘 모르고 지금도 계속해서 배우고 있는 중이기 때문에, VBA를 공부하다가 기록해 둘만한 것이 있을 때 정리하는 차원에서 글을 올리거나, 질문이 들어왔을 때 답변을 올리는 식으로 연재를 계속 이어갈 예정입니다.
처음에 기초강좌를 시작할때는 작년의 함수강좌가 너무 어렵다는 분이 계셔서 눈 높이를 낮춰서 엑셀에 대해 아주 기초적인 것부터 "가르친다"는 의도가 있었습니다.
하지만 진행하다 보니 "가르친다"기 보다는 제가 다시 공부하면서 "복습한다", 또는 잊어버리지 않게 "적어둔다"는 의도로 바뀌어 버린 것 같습니다. 그래서 "기초강좌니까 쉽게 자세히 설명해 주겠지"라는 기대를 가지고 첫회부터 읽어주신 분들께는 설명이 짧고 불친절해졌을것입니다. 그 점 죄송하게 생각합니다. 방명록이나 댓글을 통해서 질문을 주시면 답변을 해드릴때는 최대한 자세하게 설명 하겠다고 약속드립니다.
그동안 읽어주셔서 감사합니다.
2009/06/18 -[컴퓨터/엑셀] - 엑셀 1일1함수 색인
2010/04/06 -
[컴퓨터/엑셀] - [엑셀기초] 기본 지식 익히기 - 화면구성
2010/04/15
-[컴퓨터/엑셀] - [엑셀기초] 1. 데이타 입력하기 1.1 셀 서식에 주의할것
2010/04/15
-[컴퓨터/엑셀] - [엑셀기초] 1.2 복사해서 입력하기
2010/04/21
-[컴퓨터/엑셀] - [엑셀기초] 1.3 여러 셀에 한꺼번에 입력하기
2010/04/26
-[컴퓨터/엑셀] - [엑셀기초] 1.4 끌어 채우기
2010/05/18
-[컴퓨터/엑셀] - [엑셀기초] 1.5 기호 입력하기
2010/06/24
-[컴퓨터/엑셀] - [엑셀기초] 2.1 암호 걸기