Please Enable JavaScript!
Gon[ Enable JavaScript ]

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

엑셀(Excel)/VBA
반응형

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

 

환경: Microsoft Excel 2013

 

엑셀에서 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 객체 사용하는 방법

 

¤ 동적 배열 사용하기

 

동적 배열이라는 것은 프로그램 실행 중에 배열의 크기를 변경하는 것입니다. 상황에 맞도록 크기를 정의 하는 것이죠. 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 객체 사용하는 방법

 

반응형
Posted by 녹두장군

댓글을 달아 주세요