[VBA] 배열의 크기 확인 하는 방법 feat. UBound and LBound

VBA 에서 배열변수(Array)를 사용하면 편리하죠. 그런데 이 배열변수를 가져다 쓸때는 그 배열의 크기를 알아야 for 문을 돌리는 어떻게 하면서 처리를 할 수 있습니다. 이 배열의 크기를 확인 해주는 UBoundLBound 에 대해 알아 봅시다.

배열변수 크기의 기본

아래와 같이 배열을 선언 했을때 배열의 크기는 얼마인지 알아봅시다.

Dim Arr1() as Variant
Dim Arr2() as Variant
Dim Arr3() as Variant

ReDim Arr1(10) as Variant
ReDim Arr2(1 to 20) as Variant
ReDim Arr3(-10 to 30) as Variant

Arr1 의 배열크기는 11개 입니다. VBA에서는 초기 값이 0 이기 때문에 0을 포함해 0 부터 10 까지의 개수는 총 11개 이기 때문입니다.

Arr2 의 배열크기는 20개 입니다. Arr1 과 달리 1 부터 20 까지로 정의했기 때문입니다.

Arr3 의 배열크기는 10 + 30 + 1 개로 41개 입니다. -10 부터 -1 까지 10개이고, 1 부터 30까지 30개이며, 0도 포함되기 때문입니다.

UBound

UBound 함수는 배열로 선언된 변수의 가장 큰 위치값을 반환해줍니다. 위 예제에서 선언된 배열 변수들의 UBound 는 아래 값을 가집니다.

Debug.Print UBound(Arr1) '10
Debug.Print UBound(Arr2) '20
Debug.Print UBound(Arr3) '30

LBound

LBound 함수는 배열로 선언된 변수의 가장 작은 위치값을 반환합니다.

Debug.Print LBound(Arr1) '0
Debug.Print LBound(Arr2) '1
Debug.Print LBound(Arr3) '-10

UBound 와 LBound 로 배열크기 구하기

UBoundLBound 를 이용해 배열크기 위치 중 가장 큰 값과 가장 작은 값을 알면 아래 식으로 배열변수의 크기를 알 수 있습니다.

ArrSize = UBound(Arr()) - Lbound(Arr()) + 1

가장 작은 값을 포함 해야 하므로 반드시 + 1 해주어야 합니다. 위 예제에 선언된 배열의 크기를 살펴 보면 아래와 같습니다.

Debug.Print UBound(Arr1()) - Lbound(Arr1()) + 1 '11
Debug.Print UBound(Arr2()) - Lbound(Arr2()) + 1 '20
Debug.Print UBound(Arr3()) - Lbound(Arr3()) + 1 '41

이제 배열변수의 크기를 몰라도 열심히 for 문을 돌릴수 있습니다.