티스토리 뷰
반응형
VBA에서 배열을 크기를 미리 정하지 않고, 흐름에 따라서 배열 크기를 증가시키면서 사용하는 것을 동적 배열이라 하고, 이
때 redim preserve를 사용하게 된다.
일반적인 사용법을 찾아보면, redim preserve는 일차원 배열에 대해서만 사용가능하다고 나와있어, 다차원 배열을 사용하고자 할때는 어려움이 있었다.
좀 더 내용을 찾아보니, 배열에 배열을 저장하는 방식으로 사용하면, 다차원 배열처럼 사용할 수 있음을 알게 되었다.
일반적인 다차원 배열 저장방식
Sub test_array()
Dim aTemp(), aTemp1(), aTemp2()
Dim atest
ReDim aTemp2(2, 1)
aTemp2(0, 0) = "a"
aTemp2(0, 1) = 1
aTemp2(1, 0) = "b"
aTemp2(1, 1) = 1
aTemp2(2, 0) = "c"
aTemp2(2, 1) = 1
' 일반적인 2차원 배열의 주소
debug.print aTemp(1, 1)
End Sub
배열에 배열을 저장하는 방식
Sub test_array()
Dim aTemp(), aTemp1(), aTemp2()
Dim atest
ReDim aTemp1(2)
aTemp1(0) = "aaA"
aTemp1(1) = "bbbB"
aTemp1(2) = aTemp2
' 배열에 배열을 저장'
ReDim aTemp(1)
aTemp(0) = aTemp1
aTemp(1) = aTemp1
' 배열의 주소는 (1,2)가 아닌, (1)(2) 가 된다.'
debug.print aTemp(1)(2)
End Sub
또한, for 문이나 do 문과 같은 반복문 안에서 배열이 초기화되었는지를 판단할 때,
Not Not Array를 사용하여 판단할 수 있다.
' 동적배열 선언'
Dim aTemp()
Debug.Print Not Not aTemp ' Not Not aTemp의 값은 0이 출력됨'
' 배열의 크기가 선언되었을 때,'
redmi aTemp(0)
Debug.Print Not Not aTemp ' Not Not aTemp의 값은 0이 아닌 값이 출력됨'
동적 배열 초기화여부 판단하는 또다른 방법
Sub test()
Dim aTemp()
ReDim aTemp(0)
Debug.Print (IsEmpty(aTemp(0))) ' atemp(0)의 하위 데이터가 없으므로 true 출력 '
' 임시데이터 생성 '
Dim attt(2)
attt(0) = 1
attt(1) = 2
attt(2) = 3
' 임시데이터를 동적배열에 할당 '
aTemp(0) = attt
' 2차원 배열의 세부데이터 유무 검토 '
Debug.Print (IsEmpty(aTemp(0))) ' atemp(0)의 하위 데이터가 있으므로 False 출력'
End Sub
반응형
'EXCEL > VBA' 카테고리의 다른 글
[Excel VBA] MS WORD 자동화 (5) - 특정 페이지, 줄번호 이동 (0) | 2024.01.17 |
---|---|
[Excel VBA] MS WORD 자동화 (4) - WORD STYLE 스타일 지정 (0) | 2024.01.17 |
[Excel VBA] MS WORD 자동화 (3) - WORD FILE 쓰기 (0) | 2024.01.17 |
[Excel VBA] MS WORD 자동화 (2) - 파일 생성 / 열기 / 저장 (0) | 2024.01.17 |
[Excel VBA] MS WORD 자동화 (1) 준비하기 (0) | 2024.01.17 |
댓글