VBA

엑셀(Excel) VBA GoTo 문으로 이동하기

꼰대 부장 2025. 2. 9. 09:39

1. GoTo 문의 기본 문법

GoTo 문의 기본 문법은 다음과 같습니다.

GoTo 라벨

라벨:
    실행할 코드

 

  • GoTo 라벨 : 해당 라벨로 코드 실행이 이동함.
  • 라벨: : 콜론( : )을 붙여서 정의한 위치.

2. 기본적인 GoTo 예제

아래 코드는 특정 조건이 충족되면 특정 부분으로 이동하는 기본적인 예제입니다.

Sub TestGoTo()
    Dim num As Integer
    num = InputBox("숫자를 입력하세요:")

    If num < 10 Then
        GoTo SmallNumber ' 숫자가 10보다 작으면 SmallNumber 라벨로 이동
    End If

    MsgBox "입력한 숫자는 10 이상입니다."
    Exit Sub ' 여기서 종료하지 않으면 아래 SmallNumber도 실행됨

SmallNumber:
    MsgBox "입력한 숫자는 10 미만입니다."
End Sub

 

 

설명

  • InputBox로 숫자를 입력받음.
  • 입력값이 10보다 작으면 GoTo SmallNumber 실행 → 해당 라벨로 이동.
  • Exit Sub을 추가하여 코드가 끝나는 부분을 명확히 함.

3. GoTo를 활용한 오류 처리 (On Error GoTo)

GoTo 문은 오류 처리를 할 때 가장 많이 사용됩니다.
특정 코드에서 오류가 발생할 경우, On Error GoTo 문을 사용하여 오류 처리 루틴으로 이동할 수 있습니다.

Sub DivideNumbers()
    On Error GoTo ErrorHandler ' 오류 발생 시 ErrorHandler로 이동
    
    Dim num1 As Integer, num2 As Integer, result As Double
    num1 = InputBox("첫 번째 숫자를 입력하세요:")
    num2 = InputBox("두 번째 숫자를 입력하세요:")

    result = num1 / num2 ' 0으로 나누면 오류 발생 가능
    MsgBox "결과: " & result
    Exit Sub ' 정상 실행 시 오류 처리 코드 실행 방지

ErrorHandler:
    MsgBox "오류 발생: 0으로 나눌 수 없습니다.", vbCritical
End Sub

 

설명

  • On Error GoTo ErrorHandler → 오류가 발생하면 ErrorHandler로 이동.
  • num2 = 0 이면 0으로 나누는 오류 발생 → MsgBox로 오류 메시지 출력

4. 반복문과 GoTo 활용 예제

GoTo 문을 활용하여 반복문을 만들 수도 있습니다.
하지만 일반적으로는 For, Do While, Do Until 등의 반복문을 사용하는 것이 더 좋습니다.

Sub LoopWithGoTo()
    Dim i As Integer
    i = 1

StartLoop: ' 라벨 정의
    If i > 5 Then Exit Sub ' 5번 반복 후 종료
    MsgBox "현재 숫자: " & i
    i = i + 1
    GoTo StartLoop ' 다시 StartLoop로 이동
End Sub

 

설명

  • StartLoop:에서 시작하여 i 값을 증가시키며 반복.
  • i가 5보다 크면 종료.

하지만 이 방법보다는 Do While 또는 For 반복문을 쓰는 것이 권장됩니다.
예를 들어, 위 코드는 아래와 같이 Do While을 사용하면 더 깔끔합니다.

Sub LoopWithWhile()
    Dim i As Integer
    i = 1
    
    Do While i <= 5
        MsgBox "현재 숫자: " & i
        i = i + 1
    Loop
End Sub

 

5. 여러 개의 조건을 활용한 GoTo

아래 코드는 사용자가 입력한 값에 따라 다른 메시지를 출력하는 예제입니다.

Sub CheckNumberWithGoTo()
    Dim num As Integer
    num = InputBox("숫자를 입력하세요:")

    If num < 0 Then
        GoTo Negative
    ElseIf num = 0 Then
        GoTo Zero
    Else
        GoTo Positive
    End If

Negative:
    MsgBox "입력한 숫자는 음수입니다."
    Exit Sub

Zero:
    MsgBox "입력한 숫자는 0입니다."
    Exit Sub

Positive:
    MsgBox "입력한 숫자는 양수입니다."
    Exit Sub
End Sub

 

설명

  • If 문을 통해 조건을 확인하고, 해당하는 라벨로 이동.
  • 각각의 라벨에서 적절한 메시지를 출력한 후 Exit Sub으로 종료.

하지만 이 코드도 Select Case를 사용하면 더 가독성이 좋아집니다.

Sub CheckNumberWithCase()
    Dim num As Integer
    num = InputBox("숫자를 입력하세요:")

    Select Case num
        Case Is < 0
            MsgBox "입력한 숫자는 음수입니다."
        Case 0
            MsgBox "입력한 숫자는 0입니다."
        Case Else
            MsgBox "입력한 숫자는 양수입니다."
    End Select
End Sub

 

6. GoTo 사용 시 주의할 점

 

  • 가독성 저하: 코드가 길어지면 흐름을 따라가기 어려워짐.
  • 디버깅 어려움: 코드 점프가 많으면 디버깅이 복잡해짐.
  • 반복문 사용 권장: GoTo를 이용한 반복문보다는 For, Do While, Do Until을 사용하는 것이 좋음.

GoTo는 오류 처리 또는 특정 상황에서만 사용하고, 일반적인 흐름 제어에는 If 문, Select Case, 반복문을 사용하는 것이 더 좋습니다.

 

7. GoTo 문이 꼭 필요한 경우

다만, 특정 조건에서 긴급하게 특정 부분으로 이동해야 할 때는 유용할 수 있습니다.
예를 들어 긴급 종료(Emergency Exit) 같은 경우입니다.

Sub EmergencyExit()
    Dim answer As String
    answer = InputBox("진행을 계속하시겠습니까? (Yes/No)")

    If LCase(answer) <> "yes" Then
        GoTo ExitNow
    End If

    MsgBox "계속 진행합니다..."
    Exit Sub

ExitNow:
    MsgBox "프로그램을 종료합니다.", vbExclamation
End Sub

 

 

VBA에서 GoTo 문은 특정 라벨로 이동할 때 사용되며, 특히 오류 처리(On Error GoTo)에서 유용하게 사용됩니다. 하지만 남용하면 코드 가독성이 떨어지므로 꼭 필요한 경우에만 사용하는 것이 좋습니다.

 

추천하는 활용 방법

  • 오류 처리 (On Error GoTo)
  • 긴급 종료 (Emergency Exit)

남용을 피해야 하는 경우

  • 반복문 (For, Do While 등을 대신 사용)
  • 일반적인 흐름 제어 (If, Select Case 사용)

GoTo 문을 적절히 활용하면서도, 가독성을 유지하는 것이 중요합니다!

'VBA' 카테고리의 다른 글

VBA For ~ Next 문으로 반복 실행하기  (0) 2025.02.28
VBA Selet Case 문 사용법 및 예제  (0) 2025.02.15
엑셀(Excel) VBA IF 문 함수  (0) 2025.02.09
VBA 배열의 선언과 사용  (0) 2025.02.08
VBA 변수와 예제  (0) 2025.02.08