[VBA] Sub 과 Function 프로시저의 차이를 알아보자

folder 프로그래밍 calendar_month web_traffic 38

엑셀과 같은 MS 오피스에서 간단한 프로그래밍을 위해 VBA 를 많이 사용하는데, 그 때 마다 특정 동작을 수행하기 위해 SubFunction을 많이 사용하는데, 이 둘의 차이점과 기본적인 사용법을 정리 해봅니다.

Sub

Sub(Subroutine, 서브루틴)는 특정한 업무를 수행하는 것으로 그 역할을 다합니다. 계산을 하라면 계산을 하고 메시지 박스를 출력하라면 출력을 하는 것이 그 임무입니다.

기본 사용 방법은 아래와 같습니다.

Private Sub ShowAdd(Num1 As Double, Num2 As Double)
    Dim Result As Double
    Result = Num1 + Num2
    Sheet1.Cells(1, 1) = Result
End Sub

두 개의 숫자를 인수로 받아 더한 다음 Sheet1 의 첫번째 셀에 그 결과를 내보내는 작업을 수행하는 Sub 입니다. 이렇게 사용되는 Sub의 몇 가지 특징을 정리하면 아래와 같습니다.

  • 정의된 임무를 수행하면 종료
  • SubEnd Sub 사이에 수행할 임무를 정의함
  • Exit Sub을 사용해 End Sub 이전에 서브루틴을 강제로 종료할 수 있음
  • 외부에서 호출하기 위해 Call ShowAdd 또는 ShowAdd 과 같이 사용할 수 있음

Function

Function은 특정한 업무를 수행한다는 것은 같지만, 업무 수행에서 끝나는 것이 아니라 그 결과를 사용자에게 반환하는 것이 그 업무의 마지막입니다.

Function의 기본 사용 방법은 아래와 같습니다.

Private Function Add(Num1 As Double, Num2 As Double)
    Dim Result As Double
    Result = Num1 + Num2
    Add = Result
End Function

먼저 소개한 Sub와 같이 인수를 받아 더하는 작업을 수행하지만, 그 결과를 사용자에게 반환하는 것으로 그 임무를 다합니다. 이 Function의 몇 가지 특징을 정리하면 아래와 같습니다.

  • 정의된 임무를 수행하면 {함수명 = ... } 형식으로 그 결과를 반환해줄 수 있음
  • FunctionEnd Function 사이에 수행할 임무를 정의함
  • Exit Function을 사용해 End Function 이전에 함수를 강제로 종료할 수 있음
  • 보통 외부에서 호출하기 위해 {결과를 받을 변수} = {함수} 형태로 사용함

Sub 과 Function 의 혼용

위 두가지 예제를 함께 사용 해봅시다. Add 함수(Function)를 이용해 값을 더하고, ShowAdd 서브루틴을 조금 변형해 원래의 작업을 수행 하도록 해봅시다.

Private Function Add(Num1 As Double, Num2 As Double)
    Dim Result As Double
    Result = Num1 + Num2
    Add = Result
End Function

Private Sub ShowAdd(Num1 As Double, Num2 As Double)
    Sheet1.Cells(1, 1) = Add(Num1, Num2)
End Sub

ShowAdd 서브루틴이 훨씬 간단해졌죠? ShowAdd는 인수 Num1Num2를 받아 스스로가 계산하지 않고, 그대로 Add 함수에 넘겨서 결과 값만 받아와 Sheet1 의 셀에 표시 하는 것입니다.


그 용도나 사용 방법이 거의 비슷하긴 하지만, 가장 큰 차이점은 역시 임수를 수행하고 나서 결과물을 반환을 하는지 아닌지 여부라고 생각합니다.

다른 프로그래밍 언어에서도 비슷한 형식이 구분되어 있으니 참고하시면 되겠습니다.

댓글 남기기