엑셀 VBA 배열의 크기를 알아 내는 방법

엑셀(Excel)/VBA

엑셀 VBA 배열의 크기를 알아 내는 방법

 

환경: Microsoft Excel 2013

 

VBA 에서 동적 배열을 다루는 경우 데이터를 처음부터 끝까지 꺼내서 가공하려면 배열의 시작과 끝을 알아야 합니다. VBA 에서는 배열이 무조건 0에서부터 시작하는 것이 아니기 때문입니다. 배열의 크기를 알아 내는 함수는 두 가지 입니다. 배열의 시작 인덱스와 마지막 요소의 인덱스를 알 수 있는 UBound LBound 입니다.

 

그림에서 선언한 1차원 배열의 10 0 ~ 10 까지 이므로 11자리를 가지고 있는 것입니다. Names(10) 과 같은 1차원 배열 형태일 경우 UBound(Names) + 1 로 배열의 크기를 구할 수 있습니다. 그럼 시작과 끝의 인덱스를 지정한 경우는 어떻게 구할까요?

엑셀 VBA 배열의 크기를 알아 내는 방법

 

Names(2 to 10) 는 시작 인덱스가 2 이고 종료가 10 입니다. 이렇게 배열을 선언할 때 시작과 종료를 지정할 수 있습니다. 이런 경우 UBound LBound 로 구해야 합니다. 식은 다음과 같습니다. 그러니까 10 - 2 + 1 = 9 이 되겠죠.

 

arrCount = UBound(Names) – LBound(Names) + 1

엑셀 VBA 배열의 크기를 알아 내는 방법

 

다음은 2차원 배열의 크기를 알아내는 방법입니다. UBound LBound 의 두 번째 인수는 배열의 차수를 나타냅니다. UBound(NamesOfPhone, 1) 1차원 배열의 마지막 인덱스 값을 반환합니다. UBound(NamesOfPhone, 2) 는 두 번째 인자가 2 이므로 2차원 배열의 인덱스 값이 됩니다. 그래서 1차원과 2차원 배열의 크기를 알아내는 소스는 다음과 같습니다.

 

Sub ArrayInfo()

   

    Dim x As Integer, y as Integer

'' 2차원 배열

    Dim NamesOfPhone(10, 10) As String

       

    x = UBound(NamesOfPhone, 1) - LBound(NamesOfPhone, 1) + 1

    y = UBound(NamesOfPhone, 2) - LBound(NamesOfPhone, 2) + 1

   

    MsgBox "x : " & x & ", y : " & y

 

End Sub

엑셀 VBA 배열의 크기를 알아 내는 방법

Posted by 녹두장군