프로젝트 및 실습/VBA

[VBA] 배열(Array) 사용하기

jooona 2022. 8. 2. 19:43
반응형

1차원 배열

 

배열 선언

Dim MyArray(0 To 9) As Integer
Dim MyArray(9) As Integer

위의 두 코드 중 어떤 방식을 선택하든, 0으로 초기화된 크기 10의 일차원 배열을 선언할 수 있습니다. 

 

 

배열 값 사용

Debug.Print (MyArray(0))

위의 코드와 같이 선언한 배열 이름 우측에 괄호를 열고 인덱스 값을 작성하는 것으로 해당 값을 사용할 수 있습니다.

 


N차원 배열 

 

배열 선언

'2차원 배열
Dim MyArray2D(0 To 9, 0 To 9) As Integer

'3차원 배열
Dim MyArray3D(0 To 9, 0 To 9, 0 To 9) As Integer

N차원 배열의 선언 역시 1차원 배열과 같은 방식을 사용합니다. 괄호 안에 범위를 계속 추가해주는 형식으로 원하는 만큼 차원을 늘릴 수 있습니다.

 

 

배열 값 사용     

'2차원 배열
Debug.Print (MyArray2D(0, 0))

'3차원 배열
Debug.Print (MyArray3D(0, 0, 0))

N차원 배열에서도 1차원 배열과 같이 괄호 안에 인덱스를 작성함으로써 원하는 주소의 값을 사용할 수 있습니다.

 


동적 할당

 

VBA에서는 ReDim을 이용해 동적 할당을 수행할 수 있습니다.

Sub Dynamic_Array()
    
    Dim MyArray() As Integer
    Dim variable As Integer '원하는 배열 크기
    
    variable = 9
    ReDim MyArray(0 To variable) '동적 할당
    
    Debug.Print (MyArray(0))

End Sub

 

 

만약 동적 할당을 할 때 원래 있던 값을 유지하고 싶다면 ReDim Preserve를 사용할 수 있습니다.

Sub Dynamic_Array()
    
    Dim MyArray() As Integer
    Dim variable As Integer
    
    variable = 9
    
    '최초 동적 할당
    ReDim MyArray(0 To variable) 

    MyArray(0) = 1
    
    'ReDim을 이용한 재할당
    ReDim MyArray(0 To variable) 
    
    Debug.Print ("Redim: " & MyArray(0))
    '출력: [Redim: 0]
    
    MyArray(0) = 2
   
    'ReDim Preserve를 이용한 재할당
    ReDim Preserve MyArray(0 To variable * 2)
    
    Debug.Print ("Redim Preserve: " & MyArray(0))
    '출력: [Redim Preserve: 2] 

End Sub

 

코드에서 볼 수 있듯이 MyArray(0)의 값에 1을 넣어준 뒤  ReDim을 이용해 재할당을 하면 1이 사라지고 0이 새로 생성되지만, MyArray(0)에 2를 넣어준 뒤 ReDim Preserve를 사용해서 재할당을 하면 넣어준 값이 그대로 유지되는 것을 확인할 수 있습니다.

 

C언어에서 Calloc과 Realloc의 차이라고 보시면 되겠네요.

반응형