[VBA] Sub 과 Function 프로시저의 차이를 알아보자
엑셀과 같은 MS 오피스에서 간단한 프로그래밍을 위해 VBA 를 많이 사용하는데, 그 때 마다 특정 동작을 수행하기 위해 Sub
과 Function
을 많이 사용하는데, 이 둘의 차이점과 기본적인 사용법을 정리 해봅니다.
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
의 몇 가지 특징을 정리하면 아래와 같습니다.
- 정의된 임무를 수행하면 종료
Sub
와End 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
의 몇 가지 특징을 정리하면 아래와 같습니다.
- 정의된 임무를 수행하면
{함수명 = ... }
형식으로 그 결과를 반환해줄 수 있음 Function
과End 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
는 인수 Num1
과 Num2
를 받아 스스로가 계산하지 않고, 그대로 Add
함수에 넘겨서 결과 값만 받아와 Sheet1 의 셀에 표시 하는 것입니다.
그 용도나 사용 방법이 거의 비슷하긴 하지만, 가장 큰 차이점은 역시 임수를 수행하고 나서 결과물을 반환을 하는지 아닌지 여부라고 생각합니다.
다른 프로그래밍 언어에서도 비슷한 형식이 구분되어 있으니 참고하시면 되겠습니다.