[VBA 제 16강] 실행순서제어하기Ⅱ 썸네일 이미지
[VBA 제 16강] 실행순서제어하기Ⅱ
콘텐츠 타입 MS 오피스 엑셀 2003(2007, 2010가능), Windows XP 이상
용량0KB
조회1,215
즐겨찾기
[VBA 제 16강] 실행순서제어하기Ⅱ를 즐겨찾기 한 횟수는 1 1입니다.
이용등급 프리미엄
제품 상세정보

 




[ 기초 강좌 ]

 

제 16강

실행순서제어하기Ⅱ

 

실행제어구문에 대해 알아봅니다.

이럴 때 필요해요

엑셀에 내장된 VBA엔진을 이용하여 더 다양한 프로그램을 구축하기위해 사용합니다.

이렇게 사용해요

오늘은 지난 시간에 소개해 드린 실행순서 제어구문 중에서 GoTo, If ~ Then, Select Case文 등에 이어 

나머지 3가지의 제어문에 대해 소개해 드릴까 합니다.

 

For ~ Next 와 Do While 또는 Do Until 이 세가지를 특별히 Loop block Instruction 이라고 하기도 합니다.

특정한 조건을 만족하면 계속해서 프로그램을 실행하기 때문에 붙여 진 이름이지요.

 

For ~ Next 文

Loop block 을 만드는 가장 간단한 방법이 For ~ Next 구문입니다. 

몇 강좌 전에 소개해 드렸었던 For Each ~ Next 문도 바로, 이 For ~ Next 의 한 형태입니다.

이  For ~ Next 문은 앞에서도 몇 차례 등장했었으므로 그리 낯설지는 않을 것입니다만, 한번 더 

간단히 짚고 넘어 가도록 하겠습니다.

 

For counter= 시작 To 끝 [Step 값]

      … 어쩌고 … 

Next [counter]

 

위에서 예시한 것이 For ~ Next 문의 가장 일반적인 형태라고 할 수 있습니다.

 

[VBA 제 16강] 실행순서제어하기Ⅱ

[VBA 제 16강] 실행순서제어하기Ⅱ
[VBA 제 16강] 실행순서제어하기Ⅱ
 

 

 

저 식을 실행시키면 이연걸부터 성룡까지 텍스트박스로 나타납니다.

 

 

이제 이 For ~ Next 문에 대해서는 어느 정도 이해되시리라 생각됩니다만, 그런데 만약에 For ~ Next 문을사용하지 않고, 

동일한 결과를 구하려면 어떻게 해야 할까요? ^^

아마, 아래와 같이 무식한(?) 코딩을 해 주셔야 할 것입니다.

 

MsgBox Cells(35, 2)

MsgBox Cells(36, 2)

.

.

MsgBox Cells(41, 2)

 

자! 어떻습니까? 이제 응용력만 약간 발휘하면, 얼마든지 재미있는 것을 만들수 있을 것 같지 않습니까?

많이들 응용하시기 바라며, 다음으로 넘어 갑니다! ^^

 

Do ~ While 文

 

Loop block을 만드는 또한가지 방법은 Do ~ While 문을 사용하는 것입니다. 

이것은 특정한 조건을 만족하는 동안에는 계속해서 특정 명령을 수행하는 것으로, Do ~ While문은 

아래의 두가지 형태를 가집니다.

 

Do [While 조건]                               Do

      … 어쩌고 …                                … 어쩌고 …    

      Exit Do                                          Exit Do

      … 어쩌고 저쩌고 …                      … 어쩌고 저쩌고 … 

            Loop                                   Loop [While 조건]

 

위 두가지 형태의 차이점은, 다음의 예제를 보시면 명확해 집니다.

 

Sub DoWhileDemo1()

     Sheets(2).Activate

     Range("C4").Activate

    Do While Not IsEmpty(ActiveCell)

        ActiveCell.Value= 0

        ActiveCell.Offset(1, 0).Select

    Loop

End Sub

 

이 프로시저는 현재 셀 포인터가 위치해 있는 셀(여기서는 Sheets2의 C4 셀)을 시작으로 해서 아래로 한칸씩 

내려가면서 0(zero)을 셀에 삽입합니다. 

그리고 루프문을 한 바퀴씩 돌 때 마다 그 다음의 셀을 ActiveCell로 설정을 해 주고 있습니다. 

따라서, 이 프로시저는 경우에 따라 Do ~ Loop 내의 실행문을 한번도 실행하지 않을 수도 있겠지요? 

즉, 맨 처음 셀부터 아무 값도 입력된 것이 없다면, 아예 한번도 실행되지가 않을수 있습니다.

왜냐구요? Do문 안으로 들어가기 전에 미리 조건 비교를 해서 ActiveCell이 공란이면 Do ~ Loop 안으로 

들여 보내지를 않기 때문이지요.  그런데, 아래의 경우에는 어떤가요? 

 

Sub DoWhileDemo2()

     Sheets(2).Activate

     Range("C4").Activate

    Do

        ActiveCell.Value= 0

        ActiveCell.Offset(1, 0).Select

    Loop While Not IsEmpty(ActiveCell)

End Sub

 

이번에는 While이 Loop 다음에 있습니다. 이 경우에는 Do ~ Loop 사이에 있는 실행문을 적어도 한번은 실행을 하게 되지요.

 

결국, 이 두가지 형식의 차이점은 어느 시점에서 Loop문을 종료하느냐 의 차이인 것입니다. 그렇지만

실제 결과를 놓고 보면 같게 되지요.(적어도 위의 경우에는…)

 

Do ~ Until 文

 

Do ~ Until 루프문은 Do ~ While 문과 매우 흡사합니다. 

차이점은 Do While 문은 조건식이 True인 동안에는 명령을 계속 수행하는데 비해, Do Until 문은 조건식이 

True가 될 때까지 명령을 수행합니다.

 

Do [Until 조건]                                    Do

      … 어쩌고 …                                   … 어쩌고 …

      Exit Do                                             Exit Do

      … 어쩌고 저쩌고 …                            … 어쩌고 저쩌고 … 

 Loop                                                    Loop[Until조건]

 

While이 Until로 바뀌었다는 것 말고는 Do ~ While 구문과 똑같은 형태지요?

사용예제 역시 마찬가지입니다. While을 Until로 바꿔 줄려면 True와 False만 서로 바꿔 주면 되겠지요?

즉, 아래와 같이 말입니다.

 

[VBA 제 16강] 실행순서제어하기Ⅱ
 

 

실행순서를 제어하는 구문은 실제 프로그래밍 작업시 빈번하게 사용되는 것들입니다. 

모두 다섯 가지 밖에(?) 안되므로 잘 정리해 두시기 바랍니다.

 

저작권정보
1. 콘텐츠의 저작권은 쿠키(www.coukey.co.kr)에 있으며, 사용권한은 1인 1카피입니다.
2. 다운로드 받은 콘텐츠는 본인(본인회사)만 사용할 수 있습니다.
3. 다른 사람과 공유하거나 원본 또는 수정 후 무단전제,무단배포,무단판매,무단 공유할 수 없습니다.
4. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.
[VBA 제 16강] 실행순서제어하기Ⅱ
이용후기

업무자동화 맞춤제작

고객님의 상황에 100% 맞춘 콘텐츠 제작 전문 서비스를 이용해 보세요.
프리미엄 무료 이벤트 중