VBA 동적 배열 (Redim 과 Redim Preserve)
이 튜토리얼에서는 VBA에서 동적 배열(Redim 과 Redim Preserve)을 사용하는 방법을 보여드립니다.
동적 배열
동적 배열은 일반 배열과 달리 크기를 변경할 수 있는 배열입니다.
동적 배열을 선언하려면 배열 크기는 생략해야합니다:
Dim strNames() As String
그런 다음 배열에 값을 할당하기 전에 ReDim 문을 사용하여 배열을 원하는 크기로 설정해야 합니다:
ReDim strNames(1 to 3)
이제 배열 크기를 변경하고 싶을 때마다 ReDim(또는 아래에서 배우게 될 ReDim Preserve)을 사용하여 재정의하면 됩니다.
Variant 동적 배열
참고: Variant 배열은 조금 다릅니다. Variant 배열을 사용하면 값을 할당하기 전에 ReDim문을 사용하여 배열 크기를 설정할 필요가 없습니다.
Sub TestArray()
'변수를 선언합니다
Dim varNames() As Variant
'배열을 채워줍니다
varNames() = Array("Fred", "Wilma", "Barney", "Betty")
'배열 값을 반환합니다
MsgBox Join(varNames, ",")
End Sub
Redim vs. Redim Preserve
ReDim 문은 배열의 크기를 조정하여 기존 값을 모두 삭제합니다.
ReDim Preserve 문은 기존의 모든 값을 유지하면서 배열의 크기를 조정합니다.
ReDim 사용하기
실제로 ReDim을 사용하여 배열의 크기를 조정하는 방법은 다음과 같습니다:
Sub TestReDim()
'문자열 배열을 선언합니다
Dim strNames() As String
'3개의 값을 담을수 있도록 문자열 배열의 크기를 조정합니다
ReDim strNames(1 to 3)
'3개의 이름을 배열 값으로 채워줍니다
strNames(1) = "철수"
strNames(2) = "영희"
strNames(3) = "영수"
'직접 실행 창에 배열의 값들을 표시합니다
Debug.Print Join(strNames, vbCrLf)
End Sub
ReDim Preserve 사용하기
이 예제에서는 ReDim을 사용하여 동적 배열을 설정한 다음 ReDim Preserve를 사용하여 원래 값을 유지하면서 배열의 크기를 조정합니다:
Sub TestReDim()
'문자열 배열을 선언합니다
Dim strNames() As String
'3개의 값을 담을수 있도록 문자열 배열의 크기를 조정합니다
ReDim strNames(1 to 3)
'3개의 이름을 배열 값으로 채워줍니다
strNames(1) = "철수"
strNames(2) = "영희"
strNames(3) = "영수"
'직접 실행 창에 배열의 값들을 표시합니다
Debug.Print Join(strNames, vbCrLf)
'기존 데이터를 유지하면서 기존 배열의 크기를 조절합니다
ReDim Preserve strNames(1 to 4)
strNames(4) = "영숙"
'직접 실행 창에 배열의 값들을 표시합니다
Debug.Print Join(strNames, vbCrLf)
End Sub
PRESERVE 문을 사용하지 않으면 이전 배열에 있던 데이터가 손실됩니다.
위의 직접실행 창에서 배열은 철수, 영희 및 영숙이 있었습니다. 배열을 다시 선언하면 해당 값이 제거되고 대신 빈 값 3개와 ‘영숙’ 값이 반환됩니다. 이는 PRESERVE 문이 생략되었기 때문입니다.