[엑셀 VBA #13] (배열#2) 배열의 크기 확인 Ubound, Lbound






이번 시간에는 엑셀 VBA에서 배열의 크기를 구하기 위해 주로 사용되는 Ubound문과 Lbound문에 대해 알아보겠습니다.


예제를 받고 시작하겠습니다.





Ubound는 배열의 마지막 위치값을, Lbound는 배열의 첫 위치값을 반영합니다.


즉, 


dim varArray(1 to 20)


위와 같이 배열을 선언했을 때,


Ubound(varArray) 값은 20, Lbound(varArray) 값은 1을 반영한다는 것입니다.


"굳이 셀 필요가 있나, 1부터 시작하니까 배열의 크기는 당연히 20이겠지" 라고 생각할 수도 있습니다.


일반적으로 배열을 선언할 때, 시작을 1부터 하는것이 대부분이지만, 엑셀 VBA 기본값은 0부터 시작합니다.


그리고 굳이 1이 아니어도 모든 정수를 배열의 시작 위치값으로 설정할 수 있습니다.


dim varArray(-10 to 20)


위와 같이 배열을 선언했을 때,


Ubound(varArray) 값은 20, Lbound(varArray) 값은 -10이 됩니다.


실질적으로 배열의 크기는 20이 아닌 31이 되는거죠(-10부터 20까지 0을 포함한 모든 정수).


따라서 정확하게 배열의 크기를 구하려면 아래와 같이 코드를 짜야합니다.


UBound(varArray) - LBound(varArray) + 1


위 식의 값이 varArray 배열의 실제 크기가 되는 것이지요.






이제 예제를 살펴보겠습니다.



이번 예제는 첫 번째 행에 입력된 데이터를 배열에 넣고, 배열의 크기를 구하는 예제입니다.


Sub example_8()


Dim varArray()                    '배열 varArray 선언

Dim capacity As Long            '배열 크기 변수 capacity 설정

Dim Col As Long                    '첫 행의 마지막 값의 열 값 Col 변수 설정


Col = Cells(1, 1).End(2).Column            '첫 행의 마지막 값의 위치를 찾고 열 값을 설정


ReDim varArray(1 To Col)                        '배열 동적선언


varArray = Cells(1, 1).Resize(, Col).Value            '값을 배열에 저장

capacity = UBound(varArray) - LBound(varArray) + 1        '배열의 크기 구하기



MsgBox "배열의 크기는 " & capacity & "입니다."



End Sub










Posted by Simon K
: