반응형
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 |