본문 바로가기
IT 이모저모/VBA

VBA(엑셀 매크로)배열 길이 가져오는 법(UBound, LBound)

by 내일은맑음 2020. 7. 12.
반응형

VBA에서 배열크기를 취득하기 위해서는 마지막 인덱스 번호를 가져오는 UBound()함수와

처음 시작하는 인덱스 번호를 가져오는 LBound()함수를 활용하여 계산한다.

 

먼저 UBound(), LBound()의 구조와 활용법을 알아보고

UBound(), LBound()를 활용하여 아래와 같은 배열의 크기를 구하는 법을 알아보겠다.

 

1. 인덱스 번호가 0부터 시작하는 1차원 배열

2. 인덱스 번호가 0부터 시작하지 않는 1차원 배열

 

UBound(), LBound()의 구조와 활용법

1. UBound

구조 - 인수 : 배열 변수

         결과값 : 배열의 마지막 인덱스 번호

         UBound(배열)

 

아래는 간단한 예제이다.

Sub SearchLastIndexU()
    Dim tmpArr(10) As Integer
    MsgBox UBound(tmpArr)
End Sub

위의 소스의 실행 결과는 메세지 박스에 tmpArr의 마지막 인덱스 번호인 10을 출력한다.

tmpArr는 0부터 10까지의 인덱스가 존재하므로 길이는 11이다.

 

2. LBound(배열)

구조 - 인수 : 배열 변수

         결과값 : 배열의 첫번째 인덱스 번호

         LBound(배열)

 

아래는 간단한 예제이다.

Sub SearchLastIndexL()
    Dim tmpArr(3 To 7) As Integer
    MsgBox LBound(tmpArr)
End Sub

위의 소스의 실행 결과는 메세지 박스에 tmpArr의 첫번째 인덱스 번호인 3을 출력한다.

배열의 크기를 구하는 법

1. 인덱스 번호가 0부터 시작하는 1차원 배열

    UBound()는 마지막 인덱스 번호를 돌려준다. 0부터 5까지의 인덱스 번호를 가진 배열의 크기를 구하고자 한다면

    UBound(배열) +1 로 배열의 크기를 구할 수 있다. 배열의 크기는 6이다.

 

2. 인덱스 번호가 0부터 시작하지 않는 1차원 배열

    UBound(배열) - LBound(배열) + 1

    3부터 7까지의 인덱스 번호를 가진 배열의 경우 

    7 - 3 + 1 의 계산과 같은 결과가 나오기에 배열의 크기는 5가 된다.

 

아래는 1, 2번의 예제이다.

Sub SearchLastIndex()
    Dim tmpArr1(5) As Integer
    Dim tmpArr2(3 To 7) As Integer
    MsgBox UBound(tmpArr1) + 1
    MsgBox UBound(tmpArr2) - LBound(tmpArr2) + 1
End Sub

첫번째 메세지 박스에는 인덱스 번호가 0부터 5까지인 배열의 길이이다. 결과는 6

두번째 메세지 박스에는 인덱스 번호가 3부터 7까지인 배열의 길이이다. 결과는 5

반응형