Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 배열 처리를 위한 Array 객체 사용하는 방법

엑셀(Excel)/VBA

엑셀에서 VBA 도 다른 프로그램들처럼 배열 사용이 가능합니다. 한 두 개의 데이터 처리는 간단하지만 수많은 데이터들을 한번에 담아서 처리하려면 배열이 효과적입니다. 선언할 때부터 배열에 몇 개의 데이터를 집어 넣을 지 정하거나 얼마를 넣을 지 모르는 상태에서 동적으로 크기를 재정의 하는 것도 가능합니다. 이런 배열을 어떻게 사용하지는 샘플을 통해서 알아 보도록 하겠습니다.  

 

 

먼저 배열 문법은 다음과 같습니다. 두 가지 형태로 선언이 가능합니다. 객체를 생성할 때 인자로 넣은 숫자만큼의 크기를 지정하거나 To 이용해 배열의 처음과 끝을 지정할 수 있습니다. 그리고 쉼표로 “,” 인자를 구분해서 입력하면 2차원 배열을 지정할 수 있습니다.

 

Dim 이름(크기) As 데이터형
Dim 이름(배열시작 To 배열종료) As 데이터형
 

‘’ 이차원 배열

Dim 이름(크기1, 크기2) As 데이터형
Dim 이름(배열시작1 To 배열종료1, 배열시작2 To 배열종료2) As 데이터형

 

 

적정 배열 만들기

 

 

아래 그림처럼 Dim 으로 변수를 선언하는데 As 뒤에 데이터 형을 선언해야 합니다. 배열에 들어갈 데이터들이 어떤 것들이 들어갈지 미리 정하는 것이죠. 그리고 헷갈리지 말아야 할 것이 To 를 사용할 때 시작은 1 이 아닌 0 으로 하는 것이 좋습니다. 배열에 대한 접근은 0에서 시작하는데 1 로 선언하면 생성되지 않은 영역에 대한 접근이 발생해서 에러가 나겠죠.

 

Sub Array1()

    Dim arrStr(10) As String
    Dim arrInt(0 To 10) As Integer

	arrStr(0) = "A"
    arrStr(1) = "B"
    arrStr(2) = "C"

    arrInt(0) = 1
    arrInt(1) = 2
    arrInt(2) = 3

    For i = 0 To 2
        ActiveSheet.Range("A" & (i + 1)) = arrStr(i)
    Next i

    For i = 0 To 2
        ActiveSheet.Range("B" & (i + 1)) = arrInt(i)
    Next i

End Sub

 

 

 

위의 소스를 실행한 결과는 다음과 같습니다. For 문을 돌려서 배열에 값을 하나씩 꺼내 찍었습니다.

 

엑셀 VBA 배열 처리를 위한 Array 객체 사용하는 방법

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 영역(Range) 배열(Array) 변경하기
엑셀 VBA 배열의 크기를 알아 내기
엑셀 VBA 반환한 배열 데이터 셀에 표현하기
엑셀 VBA 반복문 For Next, For Each Next 사용하기
셀 VBA 매크로 디버깅, 디버그 코드 분석하기

 

 

 

 

동적 배열 사용하기

 

 

동적 배열이라는 것은 프로그램 실행 중에 배열의 크기를 변경하는 것입니다. 상황에 맞도록 크기를 정의 하는 것이죠. ReDim 명령어로 배열의 크기를 지정할 수 있으며 데이터형은 바꿀 수 없습니다.

 

Dim 이름(크기) As 데이터형

ReDim 이름(크기)

 

 

주의할 것은 최초에 선언한 데이터형 그대로 유지해야 하며 Dim 으로 배열 요소의 크기를 지정한 경우에는 재정의 할 수 없습니다. 크기가 선언되지 않은 배열을 ReDim 으로 재정의할 수 있는 것입니다. 이미 크기가 정해진 배열을 선언하려면 아래 그림과 같이 에러가 납니다.

 

엑셀 VBA 배열 처리를 위한 Array 객체 사용하는 방법

 

 

아래 샘플은 Dim 으로 선언한 배열을 ReDim 으로 재정의한 것입니다. 선언할 때 정의 되어 있지 않은 크기를 ReDim 으로 정하는 것이죠,

 

Sub Array2()

    Dim arrInt() As Integer

	ReDim arrInt(3)

    arrInt(0) = 1
    arrInt(1) = 2
    arrInt(2) = 3

    For i = 0 To 2
        ActiveSheet.Range("A" & (i + 1)) = arrInt(i)
    Next i

End Sub

 

 

 

이차원 배열 생성

 

 

 

배열의 인수로 두 개를 넘기면 2차원 배열이 됩니다. 첫 번째 인수는 X, 두 번째 인수는 Y 가 되는 것이죠. 아래 샘플처럼 arrInt(3, 3) 이면 X=3, Y=3 인 이차원 배열이 되며 총 9개의 배열요소가 생성됩니다.

 

Sub Array3()

    Dim arrInt(3, 3) As Integer

    arrInt(0, 0) = 1
    arrInt(1, 0) = 2
    arrInt(2, 0) = 3

    arrInt(0, 1) = 11
    arrInt(1, 1) = 22
    arrInt(2, 1) = 33

    arrInt(0, 2) = 111
    arrInt(1, 2) = 222
    arrInt(2, 2) = 333

    For i = 0 To 2
        For j = 0 To 2
            ActiveSheet.Cells(i + 1, j + 1) = arrInt(i, j)
        Next j
    Next i

End Sub

 

 

 

아래 그림은 이차원 배열에 값들을 하나씩 꺼내서 워크시트에 표현한 소스를 실행한 것입니다.

 

엑셀 VBA 배열 처리를 위한 Array 객체 사용하는 방법

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 영역(Range) 배열(Array) 변경하기
엑셀 VBA 배열의 크기를 알아 내기
엑셀 VBA 반환한 배열 데이터 셀에 표현하기
엑셀 VBA 반복문 For Next, For Each Next 사용하기
셀 VBA 매크로 디버깅, 디버그 코드 분석하기
Posted by 녹두장군1
,