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

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

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

▼ 다음은 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 배열 처리를 위한 Array 객체 사용하는 방법 ▶ 엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 ▶ 엑셀 VBA 반환한 배열 데이터 셀에 표현하기 ▶ 엑셀 VBA 반복문 For Next, For Each Next 사용하기 ▶ 엑셀 VBA 문자열 글자 하나씩 추출하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 셀에서 연속된 데이터 한 번에 선택 CurrentRegion, UsedRange 사용 (0) | 2023.06.21 |
---|---|
엑셀 VBA 나머지를 구하기 위한 Mod 연산자와 몫 구하는 연산자 사용법 (0) | 2023.06.21 |
엑셀 VBA 함수 실행 중에 오류 처리하는 구문 On Error GoTo 사용하기 (0) | 2023.06.11 |
엑셀 VBA On Error GoTo 반복문에서 에러 거르기 (0) | 2023.06.09 |
엑셀 VBA 반복문 Do Until 사용하기 (0) | 2023.05.28 |
엑셀 VBA 셀 데이터 검색해서 찾기 (8) | 2023.05.23 |
엑셀 VBA 리스트 멀티 선택해서 추가 삭제하기 (0) | 2023.03.25 |
엑셀 VBA 반복문 이용 컨트롤 한번에 제어하기 (0) | 2023.03.25 |
녹두장군1님의
글이 좋았다면 응원을 보내주세요!