Please Enable JavaScript!
Gon[ Enable JavaScript ]

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

엑셀(Excel)/VBA
반응형

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

 

아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 날짜 관련 함수, 개체 사용하는 방법
엑셀 VBA 입력된 형식 확인 Information 관련 함수 모음
엑셀 VBA 함수 만들어서 매크로와 연결하기
엑셀 VBA 반환한 배열 데이터 셀에 표현하기
셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하기

 

¤ 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 프로시저의 차이점과 사용법 알아 보기

아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 날짜 관련 함수, 개체 사용하는 방법
엑셀 VBA 입력된 형식 확인 Information 관련 함수 모음
엑셀 VBA 함수 만들어서 매크로와 연결하기
엑셀 VBA 반환한 배열 데이터 셀에 표현하기
셀 VBA 날짜 차이를 계산하는 DateDiff 함수 사용하기
반응형
Posted by 녹두장군1
,