코딩/vba

VBA/배열을 함수로부터 전달받기

Summer_tree 2024. 1. 11. 16:25
728x90

프로그램을 여러 서브프로그램으로 나눠 만들면 수정하기가 쉽고 이해가 쉽다.

그런데 배열을 다른 서브프로그램에서 전달받으려 할 때 종종 타입에러가 난다. 이는 VBA가 배열을 전달할 때 Variant로만 전달가능하기 때문에 일어나는 일이다.

 

아래 PrintArray()에서는 배열을 Integer로 지정했다. 만일 배열을 전달받을 서브프로그램에서 동일한 타입 Integer로 지정하면 배열인지 정수인지 구분할 수가 없어 에러가 난다. 함수에서 리턴값으로 배열을 넘기려면 무조건 Variant로 데이터형을 지정해야 한다. 함수는 Variant로 배열을 전달하지만 받는 프로그램은 정수형 배열로 지정되어도 상관없다.

728x90
Sub PrintArray()
    Dim arr() As Integer, countArray As Integer
    
    arr = GetArray
    countArray = UBound(arr, 2) - LBound(arr, 2) + 1
    Debug.Print "Count of dimension 2: " & countArray
    
    Dim i As Integer, j As Integer
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            Debug.Print arr(i, j)
        Next j
    Next i
End Sub
Function GetArray() As Variant
    Dim arr() As Integer, i As Integer, j As Integer, k As Integer
    
    k = 0
    For i = 0 To 3
        ReDim Preserve arr(1, i)
            For j = 0 To 1
                arr(j, i) = k
                k = k + 1
            Next j
    Next i
    GetArray = arr
End Function

728x90