엑셀에는 Sub 프로시저만이 아니라 Function 프로시저도 존재합니다.
Sub는 단순히 어떤 동작을 시행할 뿐이지만, Function는 Sub처럼 동작을 시행한 후 결과값을 반환하게 됩니다.
우리가 엑셀에서 많이 쓰는 =SUM(A1,A2)도 Function이라 할 수 있습니다.
사용법은 아래에 아주 간단한 예제를 통해 보여드리겠습니다.
Function test(num As Integer)
test = num + 3
End Function
정수형 값을 하나 받아 3을 더한 뒤 반환하는 함수입니다.
반환하는 방법은
함수이름 = 반환값
입니다. 위의 예제에서는 t가 함수이름, num + 3 이 반환값입니다.
이 함수를 사용하는 방법은 두가지 있습니다.
1. 다른 프로시저에서 부르는 법
Sub callTest()
Dim give, take As Integer
give = 1
take = test(give)
End Sub
위의 예제에서는 take라는 변수의 값에 test(give)의 반환값인 4가 들어오게 됩니다.
2. 셀에서 부르는 법
우리가 보통 엑셀 함수라고 하면 셀에 입력하는 =SUM() 또는 =AVERAGE() 를 떠올리실 겁니다. 이들은 엑셀의 기본 내장 함수로써 이미 Function SUM() 이나 Function AVERAGE() 같이 정의되어 있습니다.
우리가 만든 함수도 이와 같은 방식으로 쓸 수 있습니다.
=test(A1)을 입력하면 A1의 값인 4에 3을 더해 7이 된 것을 볼 수 있습니다.
위와 같은 방식들을 사용하여 Function을 통해 많은 기능을 직접 만들 수 있습니다.
Function의 괄호() 안에 들어가는 인수(argument)들도 여러방식으로 받을 수 있습니다.
Function test() 처럼 인수가 아예 없어도 되고,
Function test(a,b,c,d) 처럼 뒤에 As Integer 를 붙이지 않아도 됩니다. (이럴경우 컴퓨터가 자동적으로 변수의 타입을 정해야 하기 때문에 시행 속도가 아주아주 약간 느려질 수 있습니다.)
Function test(a,b, Optional c = 0, Optional d = 1) 처럼 변수 앞에 Optional 을 붙여 선택적으로 인수를 줄 수 있습니다.
아래의 예제를 통해 더 자세히 알아봅시다.
Sub callTest()
Dim num1, num2, result As Integer
num1 = 1
num2 = 2
result = test(num1, num2)
MsgBox result
End Sub
Function test(a, b, Optional c = 3)
Dim d As Integer
d = a + b + c
test = d
End Function
test 함수에서 받는 인자는 a, ,b, c로 3개이지만 callTest에서 test 함수를 부를 때에는 num1 과 num2, 2개의 인자만 넘겨주었음에도 오류가 뜨지 않습니다.
이는 인자 c의 성질이 Optional로써 필수적으로 받아야하는 인자가 아니기 때문입니다.
인자를 넘겨준다면 그 인자의 값대로 설정이 되겠지만, 위의 예제처럼 인자를 넘겨주지 않는다면 기본값인 3이 됩니다.
여기서 주의할 점은 Optional 설정의 변수는 가장 오른쪽에 와야됩니다.
Function test(Optional a, b, c) 이런 식으로 왼쪽에 위치하게 되면 오류가 뜨게 됩니다.
Optional 성질의 인자를 여러개 생성할 수 있지만 배열을 이용해 무한대로 생성할 수도 있습니다. 이는 전달할 변수의 개수가 미정일 때 이용합니다.
Function test(ParamArray list()) 식으로 ParamArray설정을 이용합니다.
Sub Main()
Dim result As Integer
result = sum(1,2,3,4,5,6,7,8,9,10)
MsgBox result
End Sub
Function sum(ParamArray nums())
Dim temp As Integer
temp = 0
For Each num in nums
temp = temp + num
Next num
sum = temp
End Function
숫자 1부터 10까지 인수로 주었을 때, sum 함수의 num() 배열에 들어가게 됩니다.
그 후 For 반복문에서 차례차례 더한 후 반환하게 됩니다.
이상으로 Function 사용법을 마치겠습니다.
'엑셀 vba 기초' 카테고리의 다른 글
엑셀 vba Split 함수 사용하기 (0) | 2020.03.06 |
---|---|
엑셀 vba Sort 정렬 이용하기 (0) | 2020.03.04 |
엑셀 vba 시간 지연(딜레이) 넣는 법 (1) | 2020.02.22 |
엑셀 vba 셀 배경색 바꾸기 (1) | 2020.02.22 |
엑셀 vba 반복문 Do Loop 다루기 (0) | 2020.02.22 |
WRITTEN BY