이전 글에서 Function 프로시저에 대해 알아보았습니다. 그리고 Optional을 사용하여 매개변수 값이 생략되어 전달될 때 사용방법에 대해 알아보았습니다. 이번에는 Optional 사용 방법을 예제를 통해 알아보고 또한, 매개변수의 개수를 지정하지 않고 Function 프로시저를 사용하는 방법에 대해서도 알아보겠습니다.
1. 예제를 통해 Optional 사용에 대해 알아보기
우선 엑셀에서 VBE 창을 열고 Module을 추가합니다. VBE 창 여는 방법과 Module 추가 방법은 다음 링크를 통해 이전 글을 참조하시기 바랍니다.
① 생략되는 매개변수의 값을 지정할 때
Module 창에 다음과 같이 코딩을 합니다.
Function Cross(a As Integer, Optional b As Integer = 2) As Integer
Cross = a * b
End Function
그리고 엑셀 시트에서 다음과 같이 식을 입력합니다.
=cross(2)
식을 입력하고 엔터를 누르면 4라는 값이 출력됩니다. 이번에는 ' =cross(2,3) '이라고 입력한 후 엔터를 치면 6이라는 값이 출력됩니다. 즉, Optional은 매개변수에 값이 전달될 때에는 전달된 값으로 Function 프로시저를 진행시키고 매개변수가 전달되지 않았을 때는 주어진 초기값으로 Function 프로시저를 진행시킨다는 것을 알 수 있습니다.
② 생략되는 매개변수의 값을 지정하지 않을 때
Module 창에 다음과 같이 코딩을 합니다.
Function Cross2(a As Integer, Optional b As Variant) As Integer
If IsMissing(b) = True Then b = 2
Cross2 = a * b
End Function
위와 동일한 결과를 출력하지만 매개변수 값이 전달되었는지를 If 문을 사용하여 확인하고 참일 때 매개변수에 값을 지정하여 실행되도록 Function 프로시저를 코딩하였습니다.
엑셀시트에서 ' =cross2(2) '라고 입력하고 엔터키를 누르면 4가 출력되는 것을 보실 수 있습니다.
2. Function 프로시저 인수를 지정하지 않고 사용하기
Function 프로시저의 인수를 지정할 때 수량이 너무 많거나 실제 수량을 알 수 없는 경우 동적 배열 변수를 이용합니다.
사용방법은 다음과 같습니다.
Function 함수명 (ParamArray 매개변수( ) As Variant) As 데이터 형식
Dim 요소 As Variant
For Each 요소 In 변수
실행문
Next
함수명 = 결괏값
End Function
매개변수 앞에 ParamArray를 붙여서 사용하였으며 데이터 형식은 Variant로 선언하였습니다.
예제를 통해 알아보겠습니다.
VBE 창을 열고 Module 코딩 창에 다음과 같이 코딩을 합니다.
Function 합계(ParamArray i() As Variant) As Integer
Dim 값 As Variant
Dim 합 As Integer
For Each 값 In i
합 = 합 + 값
Next
합계 = 합
End Function
엑셀 시트 임의의 셀에 '=합계(1,2,3,4,5)'를 입력하고 엔터를 누릅니다. 그러면 주어진 인수의 합인 15가 출력되는 것을 보실 수 있습니다.
'엑셀 > VBA' 카테고리의 다른 글
VBA 내장 함수 - InputBox 함수 (0) | 2021.09.29 |
---|---|
VBA 내장 함수 - MsgBox 함수 (0) | 2021.09.28 |
엑셀 VBA - Function 프로시저 (0) | 2021.09.26 |
엑셀 VBA 반복문 For Each...Next문 사용하기 (0) | 2021.09.25 |
엑셀 VBA Switch 함수 & Select Case에 대해 알아보기 (0) | 2021.09.24 |