엑셀 VBA On Error GoTo 반복문에서 에러를 걸러내고 데이터를 구하는 방법 |
환경: Microsoft Excel 2013 |
VBA 같은 경우 반복문에서 에러가 발생하면 함수를 끝내야 합니다. 그럼 자신이 원하는 결과값을 얻지 못하고 종료가 되겠죠. 만약 반복문에서 에러를 일으킬 만한 데이터가 포함되어 있어도 무시하고 최종 결과물을 얻을 수 있는 방법은 없을까요? 오늘은 오류 처리를 위해 사용하는 On Error Resume Next 문을 이용해서 반복문을 끝까지 처리하는 방법에 대해 알아 보겠습니다.
▼ 그림은 합계를 구하는 샘플입니다. 중간에 숫자가 아닌 텍스트가 있어서 에러가 발생하게 되어 있습니다. 텍스트를 무시하고 합계를 구해 보도록 하겠습니다.
▼ 먼저 반복문에서 오류 처리를 위해 On Error GoTo 문을 사용합니다. GoTo 함수의 인수로 지정된 변수 InvalidValue는 에러가 발생했을 때 해당 줄로 이동해서 오류 처리를 하게 됩니다.
Set rng = ActiveSheet.Range("B1:B7")
For Each rCell In rng On Error GoTo InvalidValue: iTotal = iTotal + rCell.Value Next rCell |
▼ 만약 작업자가 이런 에러를 예상하고 있고 그것을 무시하고 계속해서 반복문이 수행되기를 원한다면 On Error Resume Next 문을 사용해야 합니다. 에러 처리 문장이 있는 InvalidValue 아래에 Resume Next 를 넣어 주면 에러 처리 후 For 반복문을 계속해서 진행하게 됩니다.
For Each rCell In rng On Error GoTo InvalidValue: iTotal = iTotal + rCell.Value Next rCell
ActiveSheet.Range("B9") = iTotal
InvalidValue: ‘’에러 처리
MsgBox "Err Number : " & Err.Number
Resume Next |
▼ 또 하나 추가할 것이 있습니다. 오류가 발생하지 않은 경우 오류 처리 코드가 실행되지 않도록 작업을 해 줘야 합니다. 오류 처리 루틴 바로 앞에 Exit Sub, Exit Function, Exit Property 문을 넣어 줍니다. 전체 소스는 다음과 같습니다.
Sub ErrorInfo()
Dim rng As Range Dim rCell As Range Dim iTotal As Integer
Set rng = ActiveSheet.Range("B1:B7")
For Each rCell In rng On Error GoTo InvalidValue: iTotal = iTotal + rCell.Value Next rCell
ActiveSheet.Range("B9") = iTotal
Exit Sub
InvalidValue:
MsgBox "Err Number : " & Err.Number
Resume Next End Sub |
▼ 위의 함수를 실행한 결과 그림처럼 1번에서 오류가 발생하고 확인을 누릅니다. 그럼 종료되는 것이 아니라 계산은 계속 진행이 되어서 텍스트를 뺀 숫자의 합계를 구하게 됩니다.
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 매크로 디버깅, 디버그 사용해서 효과적으로 코드 분석하는 방법 (0) | 2020.11.08 |
---|---|
엑셀 VBA GoTo 문 이용해서 줄로 분기하기 (0) | 2020.08.25 |
엑셀 VBA On Error GoTo 반복문에서 에러를 걸러내고 데이터를 구하는 방법 (0) | 2020.08.25 |
엑셀 VBA 매크로 실행 버튼을 만들어서 VBA 코드 실행하는 방법 (0) | 2020.08.24 |
엑셀 VAB 아티클 전체 목록 (0) | 2020.07.04 |
엑셀 VBA 개발할 때 로그 출력하는 방법 (0) | 2020.05.11 |
댓글을 달아 주세요