웹에서 자료를 긁어 와서 작업하는 경우, 아래아한글과 같은 문서 작성용 프로그램을 사용하는 일이 많습니다. 엑셀에서 편집하는 경우는 드물죠. 하지만 저는 엑셀에서 편집하는 일이 종종 있습니다. 이유는 VBA 때문이지요.

처음으로 쓰게 되는 VBA 강좌입니다. 엑셀로 만든 테트리스를 소개하면서 VBA의 무한한 가능성을 살짝 언급해 드렸었는데, 이번에는 직접 VBA 프로그래밍을 보여드리겠습니다. 물론 처음이니까 아주 간단한 코드를 작성할 것입니다. 이 연습은 CNN 6월 16일자 기사인 7 killed in attack in Tehran; Moussavi vows to 'pay any cost'로 하겠습니다.

클릭하시면 기사 원문으로 이동합니다.

텍스트만 필요한 경우에도 웹에서 자료를 긁어 오면 자연스레 그림까지 딸려 옵니다.

크고 작은 이미지들이 워크시트 위의 개체로 존재합니다.

여기까지 작업한 파일은 다음의 연결고리를 통해 내려받기가 가능합니다.

 

작업 절차

우리의 이미지 개체 지우기 작업은 다음과 같은 절차를 따를 것입니다.

  1. VBA 실행
    엑셀에서 Alt+F11을 누르거나, 도구(T) - 매크로(M) - Visual Basic Editor(V)를 선택하여 VBA를 실행합니다.

  2. 새로운 모듈의 추가
    VBA 좌측의 프로젝트 탐색기에 오른쪽 클릭 후, 삽입(N) - 모듈(M)을 선택하여 새로운 모듈을 만듭니다.

  3. 코드 작성
    편집 공간에 다음과 같은 코드를 작성합니다.
    Sub DELETE_IMAGES()
    For Each MY_IMG In ActiveSheet.Shapes
        MY_IMG.Delete
    Next MY_IMG
    MsgBox "모든 이미지를 삭제하였습니다."
    End Sub


  4. 프로시저 실행
    엑셀로 돌아와서 Alt+F8을 누르거나, 도구(T) - 매크로(M) - 매크로(M)를 선택한 다음 방금 작성한 DELETE_IMAGES를 실행합니다.

완성된 파일 내려받기

다음의 연결고리에서 코딩이 완성된 파일을 내려받아 직접 실행해 보세요.


코드 분석

그러면 어째서 이런 작업이 가능한지 우리가 작성한 코드를 한 줄씩 분석합니다.

  • Sub DELETE_IMAGES()
    모든 프로시저(한 번에 실행되는 작업의 단위)는 'Sub 프로시저명()'의 형식으로 시작합니다. 여기에서 실행이 시작되면 'End Sub'까지 달려갑니다.

  • For Each MY_IMG In ActiveSheet.Shapes
    For Each 문은 'For Each 변수이름 In 영역'의 형식으로 사용하며, 'Next 변수이름'을 만날 때까지의 명령어들을 반복적으로 실행합니다. 이 때 MY_IMG라는 변수는 ActiveSheet(현재 시트)의 Shapes(모양 개체들)이라는 영역에 있는 모든 개체에 하나씩 대응됩니다. 현재 시트에 모양 개체가 10개라면, For ~ Next 사이의 명령들이 10회 실행됩니다. 물론 실행될 때마다 MY_IMG가 참조하는 대상 개체는 다릅니다.

  • MY_IMG.Delete
    현재 작업중인 이미지 개체(MY_IMG)를 삭제하는 명령입니다.

  • Next MY_IMG
    다음의 이미지 개체(MY_IMG)로 넘어 갑니다.

  • MsgBox "모든 이미지를 삭제하였습니다."
    모든 이미지 개체를 삭제한 후에 메세지를 띄웁니다. 메세지를 띄우려면 'MsgBox "메세지 내용"'의 형식으로 코딩합니다.

  • End Sub
    현재 프로시저는 여기에서 종료됩니다.

엑셀과 VBA를 사용하면 반복 작업을 간단하게 처리할 수 있습니다. 반복적인 일들은 엑셀과 VBA로 자동화해서 처리하면 여러분의 퇴근 시간이 앞당겨집니다.

,