스프레드시트 6강. 매크로와 VBA
매크로를 저장했는데 다음 날 사라졌다면, 파일 확장자를 확인해 보세요.
풀고 시작
반복은 사람이 할 일이 아닙니다
매달 같은 보고서를 만드는 일을 생각해 보세요. 열 폭을 맞추고 서식을 걸고 합계를 넣고 인쇄 설정을 바꿉니다. 스무 번쯤 하고 나면 손이 저절로 움직이지만, 손은 실수도 저절로 합니다.
매크로(macro) 는 이 반복을 한 번 기록해 두고 재생하는 기능입니다. 기록 버튼을 누르고 평소처럼 작업한 뒤 정지를 누르면, 그 사이의 동작이 VBA(Visual Basic for Applications) 코드로 저장됩니다. 코드를 몰라도 만들 수 있다는 점이 매크로의 미덕이죠.
기록할 때 정해야 할 것이 몇 가지 있습니다.
매크로 이름은 규칙이 있습니다. 첫 글자는 반드시 문자여야 하고 숫자나 기호로 시작할 수 없습니다. 공백을 쓸 수 없어 밑줄로 대신합니다. 마침표나 느낌표 같은 기호도 안 됩니다.
바로 가기 키는 Ctrl과 영문자 한 글자를 묶습니다. 여기 함정이 있습니다. 엑셀이 이미 쓰는 키를 지정하면 매크로가 이깁니다. Ctrl+C에 매크로를 걸면 그 문서에서는 복사가 되지 않죠. 그래서 대문자를 써서 Ctrl+Shift 조합으로 만드는 편이 안전합니다.
저장 위치도 셋 중에 고릅니다. 현재 통합 문서에 두면 그 파일에서만 쓰이고, 개인용 매크로 통합 문서에 두면 엑셀을 열 때마다 자동으로 불러와져 모든 문서에서 쓸 수 있습니다. 자주 쓰는 매크로는 여기에 둡니다.
기록기가 남기는 코드의 함정
매크로 기록기는 편리하지만 눈으로 본 것을 그대로 적습니다. 그래서 B5 셀을 클릭했다면 코드에도 B5가 박힙니다. 다음 달에 행이 하나 늘어 데이터가 B6부터 시작하면 매크로는 여전히 B5를 건드리죠.
이 문제를 다루는 것이 상대 참조로 기록 옵션입니다. 켜 두면 "현재 위치에서 아래로 한 칸"처럼 상대적으로 기록됩니다. 기본값은 절대 참조 기록이고, 기록 도중에도 켜고 끌 수 있습니다.
기록된 코드는 VBE(Visual Basic Editor) 에서 볼 수 있습니다. Alt+F11로 엽니다. 여기서 코드를 고칠 수도 있고, 기록으로는 만들 수 없는 조건과 반복을 넣을 수도 있습니다.
VBA 코드의 뼈대는 두 종류입니다. Sub 프로시저는 동작을 수행하고 값을 돌려주지 않습니다. 매크로가 여기 해당하죠. Function 프로시저는 값을 돌려주며, 워크시트에서 함수처럼 부를 수 있습니다. 엑셀에 없는 계산이 필요할 때 직접 만들어 쓰는 사용자 정의 함수가 이것입니다.
매크로를 실행하는 여러 갈래
만든 매크로는 여러 방법으로 실행합니다. Alt+F8로 목록을 열어 고르거나, 지정한 바로 가기 키를 누르거나, 도형이나 단추에 연결해 클릭으로 실행하거나, 빠른 실행 도구 모음에 올려 둘 수 있습니다. 도형에 연결하는 방식은 매크로를 모르는 사람도 쓸 수 있게 만들어 준다는 점에서 유용합니다.
보안도 짚어야 합니다. 매크로는 파일을 지우거나 다른 프로그램을 실행할 수 있는 진짜 코드입니다. 실제로 매크로 바이러스가 오래도록 골칫거리였죠. 그래서 엑셀은 외부에서 받은 xlsm 파일을 열 때 매크로를 기본적으로 막고 사용자에게 묻습니다. 노란 경고 막대의 "콘텐츠 사용"을 누르기 전에, 그 파일을 신뢰할 수 있는지 먼저 생각하셔야 합니다.
인출 문제
생각해볼 질문 (정답 없음)
- 매크로 기록기가 만든 코드는 사람이 직접 쓴 코드보다 대체로 장황합니다. 그런데도 기록기가 여전히 유용한 이유는 무엇일까요. 코드를 배우는 도구로서의 가치를 생각해 보세요.
이전: 스프레드시트 5강 · 다음: 데이터베이스 일반 1강