엑셀 중급_VBA 와 매크로 (17)

이번 시간은 엑셀 VBA 코딩을 위한 최소한의 3가지 문법 중 마지막 문법 Do While과 Do Until 문을 소개해 드리겠습니다. VBA뿐만 아니라 거의 모든 프로그래밍 언어에서 필수 적으로 사용 되는 If문 For 문, 그리고 이 Do While 문만 알아도 웬만한 수준의 코딩은 혼자 해결 할 수 있습니다. 이 기본 논리를 반복 하고 응용하면서 코딩이 길어 지고 복잡해 지는 것 입니다. 제가 프로그래밍을 처음 배운 시절의 GW Basic은 Goto 구문을 많이 사용 했었는데 요즘 추세는 거의 Do While로 해결 하는 것 같고 일분 새로운 프로그래밍 언어에서는 Goto 문 자체가 없습니다.

17연습파일.xlsm

17연습파일_완성본.xlsm

  1. For 문 vs Do while

    지금 저희가 보여 드린 예제에서는 확실히 For 문 보다 Do while이 적합한 상황 입니다. 그러나 둘의 용도는 확실히 다르며 모다 각자의 용도를 가지고 있습니다. For 문은 조건에 상관없이 특정한 횟수를 반복할 때 사용하고 Do while은 특정 조건이 나올 때 까지를 반복 합니다. 예를 들어 내가 주사위를 5번 던진 값을 평균을 구해야 한다면 For문이고 주사위를 6이 나올 때 까지 던진다고 한다면 Do while입니다. 지금 우리의 예제에서는 빈 셀이 나올 때 까지라는 확실한 조건이 있으므로 Do while, Do until 둘 중의 하나로 해결 해야 바람 직 합니다.

    연습 파일을 열어 보기의 매크로를 클릭하면 지난 시간에 만든 매크로가 있습니다. 3개의 필드는 Bold체로 나머지 필드는 이탤릭 채로 바꾸는 매크로 입니다.

     

     

    실행을 하면 248행까지 내려가 버립니다. For 문을 적용해서 충분한 횟수를 반복 하였기 때문에 빈 셀이 있어도 매크로를 반복한 것입니다.

     

     

    앞으로 와 보시면 매크로는 잘 적용되어 볼드체와 이탤릭 체가 각 각 적용된 것을 확인 할 수 있습니다.

     

     

    Alt + F11으로 VBA에디터에 와 보시면 For 문의 30회 반복을 확인 할 수 있습니다. 이 문법을 지금 상황에 더 바람직한 Do While, Do Until로 바꾸어 보겠습니다.

     

  2. Do While 과 Do Until 문 적용하기

    While 은 ~ 동안 이란 뜻이고 Until 은 ~ 까지 란 뜻이죠. 참 영어를 어느 정도만 해도 프로그램을 배우기는 한결 수월해 지는 것 같습니다. VBA에서도 Do While 은 코드를 특정 조건 동안에 반복 하란 뜻이고 Do Until은 특정 조건까지 반복하라는 뜻 입니다. For 구문이 항상 Next와 같이 쓰이고 If 문이 End If와 같이 쓰인다면 Do while과 Do Until 은 Loop (루프) 와 같이 쓰입니다.

    문법 구조

    Do While 조건

    코드

    Loop

    매우 간단합니다. 즉 우리가 만들어 놓은 코드는 건들지 말고 If문만 Do while이나 Do until 로 대체 하면 됩니다.

     

    이제 여기서부터는 간단한 엑셀의 객체 개념을 생각해 보셔야 할 때 입니다. 우리가 원하는 것은 빈 셀이 나올 때 까지 코드를 반복하는 것입니다.

    우리의 객체는 선택한 셀이 되고 이걸 어떻게 표시하는 지는 검색을 통해서 찾으면 됩니다. 정답은 ActiveCell 입니다.

    다음으로 고민 할 것은 VBA의 객체의 기본 속성 입니다. 객체가 셀이 된다면 속성은? 빈 셀이 됩니다. ""로 표기 할 수도 또는 함수로 구할 수 도 있습니다.

    여기 까지가 저도 코딩을 할 때 기본으로 알고 있는 부분이고 다음 과정은 거의 실시간으로 검색을 하면서 알아 갑니다. 숙련된 프로그래머도 인터넷 상의 소스 코드 도움을 받지 않는 프로그래머들은 없다고 생각합니다.

    검색은 이것과 같은 경우 "Do While empty cell in excel VBA" 로 같이 영어로 검색 하면 99프로 바로 찾을 수 있고 네이버의 검색은 "VBA에서 Do while로 빈 셀" 이라고 검색 하면 되겠지만 운이 좋아야 찾을 수 있습니다.

     

    Do while 구문의 선택된 셀이 빈 셀이 아닐때 까지 반복 하는 것 입니다.

     

    코딩을 어떻게 표현하는 지 방법은 다양하고 정답은 없습니다. 코드를 만드는 사람의 판단 입니다. 지금 위의 코드는 ActiveCell이란 VBA의 객체 즉 마우스 커서가 선택된 부분이 빈 셀 ("") 이 아닐 때까지(<>) 코드를 반복하라 입니다..

     

    이걸 Do Until 로 바꾼다면 선택된 셀이 빈 셀이 될 때까지 코드를 반복 하라 입니다.

     

    또는 엑셀의 함수를 써서 선택된 셀이 빈 셀이 될 때까지 코드를 반복하는 구문을 만들 수 있습니다.

     

    어느 방법이든 다 맞는 방법이고 정답은 없습니다. 다만 함수를 문법이나 함수를 타입 할 때 모든 문자를 소문자로 타입 하는 습관을 들이면 내가 바르게 문법과 함수를 입력했다면 자동으로 대문자로 바꾸어 줍니다. 만약 첫 글자가 대문자로 바뀌지 않는다면 내가 타입 실수를 한 것 입니다.

     

  3. 디버깅 하기

    코드를 만들었다면 항상 디버깅을 먼저 해보는 습관을 들여야 합니다. Alt+F11을 눌러 VBA창과 엑셀 창을 동시에 열어서 코드를 한 줄씩 실행 시켜서 올바르게 작동을 하는지 확인을 해 보겠습니다.

     

    프로시저(Procedure)의 아무 위치나 마우스 커서를 두고 F8을 누르면 그 프로시저(Procedure)의 코드 한 줄씩 실행하게 됩니다. 노란색 표시는 다음에 실행될 코드 입니다.

     

     

    Do Until 문에 진입 하였고 이 상태에서 F8을 누르게 되면 밑으로 5칸 이동해서 3개의 셀을 선택 합니다.

     

     

    루프에 도달하면 다시 Do Until로 돌아가서 조건을 비교해 봅니다.

     

     

    이제 빈 셀에 당도 했습니다. 계속 F8을 눌러 보겠습니다.

     

     

    조건이 끝나니 End Sub으로 루프를 벗어났습니다. 창을 닫거나 종료 버튼을 눌러서 디버깅 모드를 끝냅니다.

     

     

    이제 매크로를 실행하면 매크로는 정확히 빈 셀이 있는 부분에서 정지를 합니다.

     

    이상으로 엑셀 VBA의 최소 기본 문법 3개를 모두 소개 해 드렸습니다. 이 3가지를 응용만 하면 상당히 복잡한 자동화도 혼자 제작이 가능합니다. 물론 엑셀에서 기본으로 제공하는 폼 기능 이라던지 입력 상자 기능 등은 알면 좋겠지만 이건 프로그램적인 요소는 아니라고 생각합니다. 전 많은 프로그래밍 언어를 다루는 것은 아니지만 제가 다루는 모든 언어들은 이 3가지 문법을 가장 많이 사용합니다. If문 For문 Do While, Do Until문은 VBA뿐만 아니라 다른 언어들의 감각을 익히는데 큰 도움이 되고 또 실무에 바로 적용할 수 있는 활용도 높은 문법 입니다.


+ Recent posts