엑셀 VBA On Error GoTo 반복문에서 에러를 걸러내고 데이터를 구하는 방법

 

환경: Microsoft Excel 2013

 

VBA 같은 경우 반복문에서 에러가 발생하면 함수를 끝내야 합니다. 그럼 자신이 원하는 결과값을 얻지 못하고 종료가 되겠죠. 만약 반복문에서 에러를 일으킬 만한 데이터가 포함되어 있어도 무시하고 최종 결과물을 얻을 수 있는 방법은 없을까요? 오늘은 오류 처리를 위해 사용하는 On Error Resume Next 문을 이용해서 반복문을 끝까지 처리하는 방법에 대해 알아 보겠습니다.

 

그림은 합계를 구하는 샘플입니다. 중간에 숫자가 아닌 텍스트가 있어서 에러가 발생하게 되어 있습니다. 텍스트를 무시하고 합계를 구해 보도록 하겠습니다.

엑셀 VBA On Error GoTo 반복문에서 에러를 걸러내고 데이터를 구하는 방법

 

먼저 반복문에서 오류 처리를 위해 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번에서 오류가 발생하고 확인을 누릅니다. 그럼  종료되는 것이 아니라 계산은 계속 진행이 되어서 텍스트를 뺀 숫자의 합계를 구하게 됩니다

엑셀 VBA On Error GoTo 반복문에서 에러를 걸러내고 데이터를 구하는 방법


저작자 표시 비영리 변경 금지
신고
Posted by 녹두장군