Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA GoTo 문 이용해서 줄로 분기하기

엑셀(Excel)/VBA

VBA GoTo 문 이용해서 줄로 분기하기

 

환경: Microsoft Excel 365

 

GoTo 문은 프로시저에서 지정한 레이블로 점프해서 이동하게 해 주는 명령어입니다. 보통 특정 조건이 되었을 때 사용자가 지정한 줄로 바로 이동할 때 많이 사용합니다. 하지만 코드를 읽고 유지하기 위한 가독성이 떨어집니다. 코드가 조금만 복잡해지면 GoTo 문 때문에 로직이 꼬이기 때문에 자주 사용하지 마세요. 다른 현대적인 개발 언어들에는 이런 GoTo 문이 없습니다.

 

GoTo 문을 사용하기 위하 If 문을 이용했습니다. number = 1 이면 GoTo 를 이용해서 Line1 레이블이 붙은 라인으로 이동하게 했습니다. 그 외에는 Line2 로 이동합니다.

 

' GOTO 문으로 해당 레이블로 이동한다.

 If number = 1 Then

    GoTo Line1

 Else

     GoTo Line2

 End If

 

Line1 Line2 레이블에서는 출력할 문자열을 str 변수에 저장합니다. 그리고 마지막에 LastLine: 에서 str 변수에 저장한 문자열을 출력합니다.

 

Line1:

    str = "Number equals 1"

    GoTo LastLine

   

Line2:

    str = "Number equals 2"

 

' 마지막에 실행되는 창

LastLine:

    Debug.Print str

 

전체 소스는 다음과 같습니다. number = 1 이므로 GoTo Line1 가 실행되고 마지막 LastLine: 레이블로 가서 str 에 저장된 "Number equals 1" 을 출력합니다. 주의할 것은 레이블이 붙어도 코드는 순서대로 실행된다는 것입니다. 예를 들어 Line1: 레이블에 GoTo LastLine 이 없다고 합시다. 그럼 어떻게 출력이 될까요? Line2: 레이블을 건너뛰지 못하고 str "Number equals 2"을 덮어 씁니다. 출력 결과는 이전과 달리 저장된 "Number equals 2" 가 됩니다.

 

Sub GoToFunction()

    Dim number As Integer

    Dim str As String

   

    number = 1

   

    ' GOTO 문으로 해당 레이블로 이동한다.

    If number = 1 Then

        GoTo Line1

    Else

        GoTo Line2

    End If

        

Line1:

    str = "Number equals 1"

    GoTo LastLine

   

Line2:

    str = "Number equals 2"

 

' 마지막에 실행되는 창

LastLine:

    Debug.Print str

 

End Sub

 

그림에 아래 코드가 실행되는 순서를 표시했습니다.

엑셀 VBA GoTo 문 이용해서 줄로 분기하기


Posted by 녹두장군

댓글을 달아 주세요