엑셀 VBA Function 와 Sub 프로시저의 차이점과 사용법 알아 보기

엑셀(Excel)/VBA

엑셀 VBA 강좌 - Function, Sub 차이점과 사용법 알아 보기

 

환경: Microsoft Excel 2013

 

VBA 프로그램을 하기 위해서 먼저 숙지해야 될 개념 중에 하나는 함수 만드는 방법입니다. 함수는 두 가지 종류의 Function 과 Sub 지시어를 사용해서 만듭니다. Function 과 Sub 동일하게 함수로 사용되지만 차이점이 있습니다. 결과 값을 반환하면 Function 이며, 반환하지 않으면 Sub 가 됩니다. 좀더 상세한 내용은 예제를 통해 알아 보도록 하겠습니다.

 

¤ Sub 프로시저

 

Sub 프로시저는 VBA 에서 주로 작성하는 코드로 매크로 기록을 하게 되면 자동으로 작성되는 코드와 같습니다. 그리고 반환 값이 없으며 코드 실행 후 끝납니다. 문법은 다음과 같습니다.

 

Sub 함수명 (인수1, 인수2..)

    소스 코드

End Sub

 

함수의 코드를 수행하다가 그 시점에서 바로 빠져 나올 수 있는 Return Exit Sub 코드가 있습니다. 아래 그림처럼 인수로 넘어온 데이터의 유효성 체크를 해서 원하지 않는 값이 들어 왔을 때 코드를 끝까지 수행하지 않고 빠져 나가게 하는 것입니다.  

 

Sub computeArea(ByVal length As Double, ByVal width As Double)

 

    Dim area As Double

    ' 길이 값이 제대로 넘어오지 않았을 때 함수를 빠져 나간다

    If length = 0 Or width = 0 Then

        Exit Sub

    End If

 

    area = length * width

    Debug.WriteLine(area)

End Sub

 

¤ Function 프로시저

 

Function 은 사용자 정의 함수라고도 합니다. 그 말은 엑셀에 기본으로 추가되어 있는 함수 외에 Function 을 이용해서 사용자가 직접 추가할 수 있습니다. 문법은 Function 으로 시작해서 End Function 으로 끝납니다. 그리고 Sub 와 달리 함수명에 결과값을 넣게 되면 값을 반환 받을 수 있습니다.

 

Function 함수명 (인수1, 인수2..)

    함수명 = 결과값

End Function

 

아래 샘플 소스는 함수의 인수로 숫자를 넣게 되면 제곱해서 값을 반환하게 됩니다. 그리고 Sub 처럼 반환하는 시점에 Exit Function 을 써서 함수를 빠져 나올 수 있습니다. 이것은 코드를 작성하는데 있어서 좀더 유연함을 가질 수 있습니다.

 

Function myDouble(ByVal a As Integer) As Double

    myDouble = a * a

    Exit Function

End Function

 

VBA 편집창에 함수를 추가했다면 사용자 정의 함수에 포함되었는지 확인해 보겠습니다. 함수 마법사 팝업창을 띄운 후 범주로 [사용자 정의] 를 선택합니다.

 

엑셀 VBA Function 와 Sub 프로시저의 차이점과 사용법 알아 보기

 

사용자 정의 함수에 myDouble 함수가 들어가 있는 것을 확인할 수 있습니다. 이런 식으로 Function 문을 사용하면 자신이 원하는 형태의 함수를 만들어서 사용할 수가 있습니다.

엑셀 VBA Function 와 Sub 프로시저의 차이점과 사용법 알아 보기

 

Posted by 녹두장군