VBA 다차원 배열(2D 배열)
Last updated on 5월 3, 2023
In this Article
이 튜토리얼에서는 VBA의 2차원 및 다차원 배열에 대해 설명합니다.
다차원 배열 (2D 배열)
다차원 배열은 하나 이상의 차원(일반적으로 2차원 또는 3차원)을 포함하는 배열이지만 배열은 최대 32개의 차원을 가질 수 있습니다.
2D 배열 선언하기
두 개 이상의 차원이 있는 배열을 만들려면 쉼표를 사용하여 각각의 개별 차원을 정의합니다:
Dim intArr(2,3) as Integer
2D 배열 채우기
아래 코드는 2D 배열을 채운 다음 워크시트의 셀들을 배열의 값으로 채웁니다.
Sub Populate2D()
'2D 배열을 선언합니다
Dim intA(2, 3) As Integer
'변수들을 선언합니다
Dim rw As Integer
Dim col As Integer
'배열을 값으로 채웁니다
intA(0, 0) = 45
intA(0, 1) = 50
intA(0, 2) = 55
intA(0, 3) = 60
intA(1, 0) = 65
intA(1, 1) = 70
intA(1, 2) = 75
intA(1, 3) = 80
intA(2, 0) = 85
intA(2, 1) = 90
intA(2, 2) = 95
intA(2, 3) = 100
'배열을 반복하여 Excel의 셀에 값을 입력합니다
For rw = 0 To 2
For col = 0 To 3
Cells(rw + 1, col + 1).Value = intA(rw, col)
Next col
Next rw
End Sub
위 코드를 실행하면 Excel에 다음과 같이 값이 입력될 것입니다.
Excel 데이터로 2D 배열 채우기
아래 코드는 Excel 워크시트의 데이터로 2D 배열을 채운 다음 다른 시트에 배열의 값을 입력합니다.
Sub Populate2D()
'워크시트 객체를 선언합니다
Dim ws_Source As Worksheet
Dim ws_Destination As Worksheet
'배열을 선언합니다
Dim wsData(10, 2) As Variant
'사용할 변수를 선언합니다
Dim rw as Integer
Dim col As Integer
'데이터 소스가 있는 시트를 정의합니다
Set ws_Source = Worksheets("Sheet1")
'데이터 소스가 있는 시트에서 정보를 가져와서 배열을 채워줍니다
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
wsData(rw, col) = ws_Source.Range("A2").Offset(rw, col).Value
Next col
Next rw
'데이터를 옮길 시트를 정의합니다
Set ws_Destination = Worksheets("Sheet2")
'배열 값을 시트에 입력합니다
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
ws_Destination.Range("A1").Offset(rw,col).Value = wsData(rw, col)
Next col
Next rw
End Sub
ReDim과 ReDim Preserve문을 사용하여 크기 조정하기
ReDim을 사용하여 배열의 크기를 조정할 수 있습니다(자세히 알아보기).
Sub Resize2D()
'배열을 선언합니다
Dim varArray() as Variant
'배열의 크기를 선언합니다
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'배열의 크기를 조정하여 다시 선언합니다
ReDim varArray(0, 1)
'배열을 다시 채워줍니다
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
End Sub
ReDim 문을 사용하여 배열을 다시 선언하면 이전에 배열에 저장된 모든 데이터가 손실됩니다. 이전 배열의 데이터를 보존하려면 ReDim Preserve 문을 사용해야 합니다.
Sub Resize2D()
'배열을 선언합니다
Dim varArray() as Variant
'배열의 크기를 선언합니다
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'배열의 크기를 조정하여 다시 선언합니다
ReDim Preserve varArray(1, 3)
'기존 값을 보존한채로 추가 값으로 배열을 채웁니다
varArray(0, 3) = "Rob Barnes"
varArray(1, 3) = "Plumber"
End Sub
ReDim Preserve 문을 사용하여 배열의 원본 데이터를 유지하려는 경우 배열의 마지막 차원 크기만 조정할 수 있습니다.
디버그를 클릭하면 오류가 난 코드가 강조 표시됩니다. 다시 선언된 배열의 첫 번째 차원의 크기가 원래 배열과 동일하지 않기 때문에 오류가 발생합니다.