VBA 배열의 최소 크기와 최대 크기를 알려주는 LBound와 UBound 함수

⌜ VBA 배열의 최소 크기와 최대 크기를 알려주는 LBound와 UBound 함수 ⌟

안녕하세요. 창원에 서식하고 있는 BIG MAN입니다.

VBA의 배열의 최소, 최대 크기가 고정인 경우라면 코딩에 전혀 문제가 없겠지만, Redim 문을 사용하여 동적 배열을 사용한다면 리얼 타임으로 변하는 변수의 크기를 고정해서 사용할 수는 없습니다. 이런 경우 배열의 최소 크기와 최대 크기를 반환하는 LBound와 UBound를 사용하면 됩니다.

 

주의) 포스팅되는 모든 글은 게시자의 주관적인 관점이 포함되어 있으며, 절대적인 가이드가 아닙니다. 포스팅 글을 참조 후 발생되는 모든 책임은 본인에게 있음을 알려드립니다.

 

LBound - 최소 크기 반환

LBound은 배열에서 최소 크기를 반환해 줍니다. UBound 보다는 자주 사용되지는 않는 함수 입니다.

 

표현식

LBound(배열,[차원])

배열 : 배열의 변수명만 입력합니다.

차원 :  1차원 배열, 2차원 배열.... 인지를 표시하게 됩니다. 표시하지 않으면 1차원으로 진행됩니다.

 

아래 예시를 보시면 이해가 쉽습니다.

Sub ArrayUBound()

        Dim ArrayVar(1 To 3, 5 To 10) '2차원 배열 선언

        Dim var
                
        var = LBound(ArrayVar) ' 배열 이름 ArrayVar를 입력하고, 차원을 입력하지 않았기 때문에 1을 반환
        
        var = LBound(ArrayVar, 1) ' 배열 이름 ArrayVar를 입력하고, 1차원을 입력했기 때문에 1을 반환
        
        var = LBound(ArrayVar, 2) ' 배열 이름 ArrayVar를 입력하고, 2차원을 입력했기 때문에 5을 반환
                
End Sub

그럼 아래와 같이 배열을 선언하고, LBound 함수를 사용하게되면 var 변수에는 얼마의 값이 반환될까요? 

Sub ArrayUBound()

        Dim ArrayVar2(10)

        Dim var
 
        var = LBound(ArrayVar2)  ' Option Base에 따라서 0 또는 1을 반환
              
End Sub

배열의 Index는 0 부터 시작하기 때문에 결과 최소 크기는 예상했던 것 처럼 반환 값은 0입니다. 하지만, Module 수준에서 "Option Base 1" 옵션을 사용하게되면 배열 Index 값은 1 부터 시작하기 때문에 반환 값은 1이 될 수도 있습니다. 결과 값이 틀리게 나온다면 Module 수준의 옵션 선언을 한번 확인해 보시기 바랍니다.

 

UBound - 최대 크기 반환

UBound은 배열에서 최대 크기를 반환해 줍니다. LBound 보다 많이 사용되며, 반복문 또는 Cells, Range의 영역등을 선택할 때 자주 사용되므로 반드시 알아 둬야할 함수 중 하나입니다.

 

표현식

UBound(배열,[차원])

배열 : 배열의 변수명만 입력합니다.

차원 :  1차원 배열, 2차원 배열.... 인지를 표시하게 됩니다. 표시하지 않으면 1차원으로 진행됩니다.

 

앞서 LBound와 사용 방법은 동일합니다.

Sub ArrayUBound()

        Dim ArrayVar(1 To 3, 5 To 10) '2차원 배열 선언

        Dim var
                
        var = UBound(ArrayVar) ' 배열 이름 ArrayVar를 입력하고, 차원을 입력하지 않았기 때문에 3을 반환
        
        var = UBound(ArrayVar, 1) ' 배열 이름 ArrayVar를 입력하고, 1차원을 입력했기 때문에 3을 반환
        
        var = UBound(ArrayVar, 2) ' 배열 이름 ArrayVar를 입력하고, 2차원을 입력했기 때문에 10을 반환
                
End Sub

 

이해가 잘 안되거나, 궁금한 점은 언제든지 문의 주시면 됩니다. 간단한 코딩은 언제든지 도움 드릴 수 있습니다.

 

👾코로나18👾 항상 조심하시고 건강하세요~ 감사합니다. 👋🏻😃 

 

✅ 참고

2021.06.21 - VBA 입력된 값이 숫자인지 확인하는 IsNumeric 함수

2021.06.24 - VBA 실행 속도를 올리는 쉬운 방법 Application.ScreenUpdating = False

 

 

 

728x90