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

 




[ 기초 강좌 ]

 

제 15 강

실행순서 제어하기 Ⅰ

 

실행순서 제어하기에 대하여

알아봅니다.

 

 

이렇게 사용해요

오늘은 프로시저의 실행 순서를 제어하는 몇 가지 방법을 소개해 드릴까 합니다.

 

보통 VBA 프로시저를 실행하면 코드의 맨 윗 라인부터 시작해서 밑으로 한 라인씩 내려가며 실행이 됩니다.

앞서 소개해 드렸던 매크로 기록 기능을 사용해서 작성한 코드를 보면 바로 이런 방식으로 작성되고 실행이

되는 것을 알 수 있습니다.

그렇지만, 경우에 따라서는 이러한 순차적인 방식의 틀에서 벗어 나 특정 위치의 라인을 먼저 실행하고 위의

라인이 나중에 실행되기도 합니다.

이처럼 프로시저의 실행순서를 제어, 즉 바꾸는 방법에는 아래와 같이 몇 가지의 형태가 있습니다.

 

  GO TO 文

  If ~ Then 구문

  Select Case 구문

  For ~ Next 구문

  Do While 반복 구문

  Do Until 반복 구문

 

프로그램 내에서 실행순서를 바꾸는 가장 직접적인 방법이 GO TO 문을 사용하는 것입니다.

 

   Sub GoToDemo( )

      Dim UserName As String

      UserName = InputBox("귀하의 이름을 입력하세요","//김우수")

      If Len(UserName) = 0 Then GoTo mm

      MsgBox UserName & "님 환영합니다!!!"

      Exit Sub

         mm:

        MsgBox "아무 것도 입력하지 않으셨군요...", ,"//김우수"

    End Sub

 

위의 예에서 보듯이 "GoTo 위치"라고 해 주면 하늘이 두쪽 나도 "위치"로 가서 그 이후의 문장을 실행합니다.

그런데, 이 GoTo 문은 옛날 DOS시절에 사용하던 BASIC(Visual Basic말고)에서 사용하던 제어구조입니다.

이 구문은 달리 쓰지 않을 도리가 없을 때에 한해서 사용하는 것이 좋습니다. 여기서 쓸 수 밖에 없는 경우라는 것은

제 경험에 의하면, 에러 트래핑(ErrorTrapping), 즉 에러가 발생할 경우에 대비하여 어떤 검문소를 하나 설치하는 경우

정도 일 것입니다. 그 정도로 잘 사용을 하지 않습니다.

 

 If ~ Then 구문

 

아마도 VBA에서 가장 빈번하게 사용되는 명령 중의 하나가 If ~ Then 구문이 아닌가 생각됩니다. 엑셀에서

함수를 공부하실 때에도 다중 IF( )함수를 많이 사용하셨을 것입니다.

 

 Sub IfThen( )

    If Time >=0.5 Then

       MsgBox "Good Afternoon!!!"

   Else

       MsgBox Good Morning!!!"

  End If

 End Sub

 

 

  If [조건식] Then [참일 경우] [Else 거짓인 경우] End If

 

 

이것이 If ~ Then 구문의 가장전형적인 형태일 것입니다.

컴퓨터라는 것은 모든 것들 0과 1의 조합으로 받아 들입니다. 문자열은 물론이고 날짜나 시간인 경우에도

이것을 숫자로 받아 들이는 것입니다. 날짜에 있어서 1이라고 하면 컴퓨터(IBM 기종)는 1900년 1월 1일로

받아 들이게 됩니다. 또한 시간에 있어서도 1이라고 하면, 자정을 의미합니다.

즉 0이면 자정을, 0.5이면 정오를, 0.25이면 오전 6시, 0.75이면 오후 6시를 의미하는 것이지요

 

따라서, 위 프로시저에서 Time >=0.5 라는 것은 현재 시간이 정오보다 크냐 작으냐를 묻는 것이 되겠죠?

그래서 0.5보다 크면 "Good Afternoon!!!"이라는 문자열을, 그렇지 않으면 또다른 문자열을 화면상에 뿌려 주게 됩니다.

여기서 Else ~ 이하에 해당되는 조건이 많이 있을 경우, 다음과 같이 보다 세분화해서 구분을 할 수도 있습니다.

 

  Sub IfThen2( )

     If Time < 0.5 Then

        MsgBox "Good Morning!", ,"//김우수

     ElseIf Time > = 0.5 And Time < 0.75 Then

        MsgBox "GoodAfternoon"

     ElseIf Time > = 0.75 Then

        MsgBox "잘자 내꿈꿔!", ,"//김우수"

  End Sub

        

 

이 프로시저의 경우 세가지의 서로 다른 조건을 비교해서 처리를 해 주고 있지요

그런데, 비교해야 할 조건식이 많은 경우, 상당히 복잡하게 보입니다.

이론적으로 중첩 If 문장은 7개까지는 확장이 가능하지만, 비교 조건이 3개를 넘어 가면 Select Case문을

사용 할 것을 권장합니다.

 

 Select Case 구문

 

위의 IfThen2 프로시저를 Select Case 文을 써서 이렇게 변경해 줄 수도 있습니다.

 

 Sub SelectCase( )

    Dim Msg As String

    Select Case Time

       Case Is < 0.5

          Msg = "Good Morning!"

       Case 0.5 To 0.75

          Msg = "Good Afternoon!"

       Case Else

          Msg = "잘자 내꿈꿔!"

       End Select

      MsgBox Msg, , "//김우수"

 End Sub

 

어떠신가요? 훨씬 보기가 편해 졌죠 읽기가 편할 뿐만 아니라 새로운 조건을 추가할 경우에도 Case문만 추가하면 되고

10개 , 100개의 조건 추가도 가능하겠죠?

 

자 그럼 끝으로 Select Case문을 사용한 예제를 하나만 더 살펴 보고 가도록 하겠습니다.

 

 Sub SelectCase2( )

   Dim inNum As Integer

     inNum = InputBox("0에서 10까지의 숫자를 입력하세요.","//김우수")

 

   Select Case inNum

     Case 0

      MsgBox "제로!"

     Case 1,3,5,7,9

      MsgBox "홀수!"

     Case 2,4,6,8,10

      MsgBox :짝수!"

     Case Else

      MsgBox "범위외의 숫자입니다!"

     End Select

 End Sub

 

이해가 되셨나요

만약에, 위 프로시저와 같은 결과를 구하되, If ~ Then문을 사용한다면 어떻게 해야 했을까를 잘 생각해 보면

아마, Select ~ Case문에 대한 이해가 더욱 빠를 듯 싶습니다.

다만 Select ~ Case 문을 사용함에 있어서 하나의 Select~Case가 있으면 반드시 이에 대응하는 End Select 문이

존재해야 한다는 사실을 잊지 마시기 바랍니다.

 

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

업무자동화 맞춤제작

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