사무업무 자동화의 꽃 엑셀 VBA(Visual Basic for Application) 공부를 드디어 시작했습니다!
아주 기본적인 내용부터 공부할 예정이며, 배우게 된 내용을 정리해서 블로그에 업로드할 예정입니다.
같이 공부하시는 분들에게 도움이 되었으면 좋겠습니다.
VBA 이용을 위해서는 명령어 목록에 '개발 도구'항목을 추가해야 하는데, 아마 기본적으로는 설정이 안되어 있을 겁니다.
엑셀을 켠 뒤, 파일->옵션으로 들어가서 '리본 사용자 지정'의 오른쪽 항목 중 '개발 도구' 항목에 체크한 후 확인을 누르시면 됩니다.
엑셀에 개발 도구가 생겼습니다! 이제 VBA사용할 준비가 다 되었습니다.
매크로 이름을 적당히 작성합니다. 첫 글자는 영문자로 해주세요.
바로 가기 키는 Ctrl+j,m 등을 추천드립니다. 왜냐하면 엑셀의 다른 명령어와 겹치지 않기 때문이지요!
만약 다른 명령어와 겹치게 되면 매크로 명령어가 우선시 됩니다. Ctrl+S는 저장 단축키이지만, 새로 작성하는 매크로의 단축키를 Ctrl+S로 설정하시면 저장 단축키는 해당 엑셀 상에서 사용하지 못하게 됩니다.
매크로 저장 위치는 크게 상관 없습니다. 다른 엑셀 창에서도 사용하고 싶다면 개인용 매크로 통합 문서에 저장하는 걸 추천드려요.
이제 매크로 기록 버튼을 통해 사용자의 작업을 자동으로 저장하고, 나중에 이를 반복 수행할 수 있습니다.
여기서 '상대 참조로 기록'을 누르면, 절대 참조가 아닌 상대 참조로 매크로 내용을 기록하게 됩니다. 예를 들어 설명해보겠습니다. A1 셀을 선택해둔 채로 매크로 기록 버튼을 누른 뒤, 바로 한칸 오른쪽에 있는 B1 셀을 클릭한 뒤 배경색상을 변경하는 매크로 작업을 진행했다고 합시다. 상대 참조로 기록한 경우 '오른쪽 셀의 색상을 변경한다.'라는 매크로가 입력되고, 절대 참조로 기록한 경우 'B1 셀의 색상을 변경한다.'라는 매크로가 입력될 것입니다.
이제 매크로 기록 버튼을 누르고, 옆 셀을 클릭한 뒤 셀의 배경색을 변경해봅니다.
그런 다음 기록 중지 버튼을 누르세요. 매크로 기록부터 기록 중지 버튼을 누르기 전까지, 웬만하면 다른 작업은 하지 말아주세요! 원치 않는 내용이 추가되어서 나중에 보기 어려워질 수가 있습니다.
기록 중지 버튼을 눌러도 아무런 변화가 없습니다. 작성된 매크로 코드를 확인하기 위해 개발 도구의 Visual Basic 버튼을 눌러봅니다.
뭔가 약간 구시대적인 느낌의 창이 뜨네요…
왼편의 프로젝트 목록에서 Module1을 클릭하여 오른쪽의 창을 띄웁니다.
여기서 With ~ End With에 대해 잠깐 설명드리겠습니다. With 부터 End With 사이에 있는 항목들에 대해서 항목 앞에 .을 붙이면 With 뒤의 내용이 자동으로 따라 붙게 됩니다. 매 줄마다 같은 내용을 작성하기가 번거로우니까요.
설명을 위해 비유를 들자면, 성이 '이'씨인 친구가 나에게 "내 동생이 김태리 이름이 예쁘다고 자기도 태리로 개명을 하겠대. 어이 없지?" 라고 했을때, 친구가 굳이 나에게 동생의 성씨가 '이'씨임을 알려주지 않아도 친구 동생의 성씨를 알고 있기 때문에 친구의 얘기에 웃을 수 있을 것입니다.
여기서 '친구의 성을 이미 알고 있음'이라는 사실이 'With Selection.Interior'부분에 해당하고, 그 아래의 '.Color = 255'와 같은 내용들이 '친구 동생이 개명할 이름'에 해당하겠네요.
따라서 위 코드는 아래와 같이 바꾸어 쓸 수도 있습니다.
물론 상당히 비효율적이겠지요.
또한 위 코드에서 Pattern이나 ColorIndex, Shade 따위와 같은 내용들은 굳이 없어도 됩니다. 제가 선택한 건 원색(RED, GREEN, BLUE)이라서 중요한건 Color 이므로, 이를 남기고 다 삭제해보았습니다.
이걸 With 함수 없이 바꾸면 아래와 같이 한 줄로 표시할 수 있습니다.
Color = 에서 뒤의 숫자를 바꾸어 실행(Ctrl+j)해보았습니다..
매크로를 바로 불러오는 단축키는 위와 같이 파일->옵션에서 '빠른 실행 도구 모음'에서 추가할 수 있습니다.
Alt+6을 통해 빠른 실행도 가능하지요.
오늘 내용은 이것으로 마치겠습니다! 응원 댓글은 언제나 많은 힘이 됩니다.
감사합니다.