엑셀 while - egsel while

코딩 초보를 위한 엑셀코딩, VBA 00장 들어가기 전에 00-1 책의 컨셉 00-2 절대로! 02장 일단 코딩해보기 02-1 간단 코드와 실행하기 02-2 코드는 순서대로 실행된다 02-3 변수는 변한다 02-4 수학과는 조금 다르다 02-5.1 코딩 천재 기분내기 02-5.2 좀 더 천재인 척 하기 03장 VBA 기본적인 문법 03-1 다시 변수 03-2 조건문 03-2.1 비교.논리연산자 03-3.1 반복문 (While) 03-3.2 반복문 (For) 04 엑셀에 보이는 코딩 04-1 코드의 묶음 04-1.1 단축키로 실행 04-1.2 버튼에 코드 넣기 04-2 직접 만드는 함수 04-3 매크로 기록기 활용 04-3.1 코드를 수정해 보자 05장 조금 복잡한 프로젝트 06장 마치며

흔히 반복문을 처리할 때 For 문을 이용하는데, 반복횟수가 아닌 특정조건을 만족할 때까지 작업하고 싶은 경우에는 Do While 을 사용합니다. 만약 조건을 잘못 입력해서 만족하는 경우의 수가 나오지 않는다면 무한루프에 빠지는 단점이 있습니다. Do While 문은 While 문 뒤의 조건이 True 일 동안에 반복하고 False 를 만나면 종료합니다.

첫 번째 While 문이 앞에 오는 경우입니다. 조건문은 Do While 뒤에 옵니다. Do While Loop 사이에 반복할 코드를 삽입합니다. 형태는 아래와 같습니다.

Do While 조건문

          반복할 코드

Loop

샘플 함수의 소스는 Do While 반복문에서 i 10을 넘어가면 종료합니다. 반복 작업은 1 씩 증가한 i 변수값을 콘솔에 출력합니다.

Sub DoWhileLoop()
   
    Do While i < 10
        i = i + 1
        Debug.Print i
    Loop
 
End Sub

함수를 실행한 결과는 다음과 같습니다.

엑셀 while - egsel while

두 번째 형태는 조건문이 마지막에 옵니다. 그러니까 While 문과 조건문이 마지막 Loop 뒤에 위치합니다. 무조건 한번은 코드를 수행하는 구조로 조건문이 참인 동안 작업을 반복해서 진행합니다.

Do

    반복 수행할 코드

Loop While 조건문

샘플 코드는 이전과 달리 조건문이 마지막에 추가가 되었습니다. 조건에 맞지 않더라도 무조건 반복은 한번 이상 수행됩니다.

Sub DoWhileLoop()
   
    Do
        i = i + 1
        Debug.Print i
    Loop While i < 10
 
End Sub

함수를 실행한 결과는 다음과 같습니다.

엑셀 while - egsel while



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

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

엑셀 while - egsel while
17연습파일.xlsm

엑셀 while - egsel while
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 문을 적용해서 충분한 횟수를 반복 하였기 때문에 빈 셀이 있어도 매크로를 반복한 것입니다.

    엑셀 while - egsel while

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

    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뿐만 아니라 다른 언어들의 감각을 익히는데 큰 도움이 되고 또 실무에 바로 적용할 수 있는 활용도 높은 문법 입니다.