|
새 페이지 1
|
함수라는 것이 보통 하나의 값을 돌려줍니다. 그런데 종종 여러 개의 값을 돌려주어야 하는 경우가
생깁니다. 이런 경우 참조에 의한 전달을 사용할 수 있지만,
오늘은 참조에 의한 전달 대신 Variant형을 사용하여 여러 개의 값을 돌려주는 함수를 다루어
보고자 합니다.
Variant형은 배열수식과 관련이 있습니다. 즉 Variant형을 돌려주는 Function프로시져는
워크시트에서 배열수식으로 값을 돌려줍니다. 그리고 VBA코드에서는 배열의 형태로 돌려줍니다.
‘배열수식’을 들으면 필자가 가장 먼저 생각하는 함수가 행렬의 곱을 구하는 MMULT()함수입니다. 사실
이 함수를 처음 사용하면서 “배열수식”이라는 낯선 용어와 Ctrl+Shift+Enter 라는 낯선 키
조합을 접하게 되었으니 그럴만 하죠.
워크시트 함수인 MMULT()를 사용하여 다음과 같이 두 개의 행렬의 곱을 구하였습니다.
Sub MulMatrix()
Dim MatA(1 To 2, 1 To 3) As Double
Dim MatB(1 To 3, 1 To 2) As Double
Dim MatC
MatA(1, 1) = 3
MatA(1, 2) = 4
MatA(1, 3) = 7
MatA(2, 1) = 5
MatA(2, 2) = 6
MatA(2, 3) = 1
MatB(1, 1) = 2
MatB(1, 2) = 1
MatB(2, 1) = 3
MatB(2, 2) = 5
MatB(3, 1) = 6
MatB(3, 2) = 2
MatC =
Application.WorksheetFunction.MMult(MatA, MatB)
Dim r As Long
Dim c As Long
For r = LBound(MatC, 1) To
UBound(MatC, 1)
For c = LBound(MatC, 2) To UBound(MatC, 2)
Debug.Print MatC(r, c)
Next
Next
End Sub |
위에서
MatC는 Variant형 변수이며 워크시트에선 배열수식 형태로 결과를 돌려주는 MMULT()함수의
결과를 담게 됩니다. 이를 조사식에 넣어두고 관찰을 하노라면 다음 그림과 같이 2x2의 배열입니다.
![](http://www.officetutor.co.kr/newsletter/sjoo/img/faq1205_1.gif)
이번에 역으로 이렇게 계산한
결과를 워크시트에서 사용하도록 함수로 변경해볼까요?
Function MulMatrix() As Variant
Dim MatA(1 To 2, 1 To 3) As Double
Dim MatB(1 To 3, 1 To 2) As Double
MatA(1, 1) = 3
MatA(1, 2) = 4
MatA(1, 3) = 7
MatA(2, 1) = 5
MatA(2, 2) = 6
MatA(2, 3) = 1
MatB(1, 1) = 2
MatB(1, 2) = 1
MatB(2, 1) = 3
MatB(2, 2) = 5
MatB(3, 1) = 6
MatB(3, 2) = 2
MulMatrix =
Application.WorksheetFunction.MMult(MatA, MatB)
End Function |
위의 MulMatrix
프로시져는 Variant형을 돌려주는 Function프로시져입니다. 따라서 워크시트에선 배열수식으로 다음
그림과 같은 결과를 얻게 됩니다.
![](http://www.officetutor.co.kr/newsletter/sjoo/img/faq1205_2.gif)
|
|
|
|
|
|