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 |