본문 바로가기

EXCEL/VBA

엑셀 VBA 배열 선언하기

엑셀에서 배열을 이해하기란 쉽지는 않습니다. 그래서 뭐라고 설명해야 할지 쉽지도 않습니다.

그냥 여러 개의 값을 한 덩어리로 가지고 있는 값이라고 해야하나...

아무튼 배열을 모르면 엑셀을 잘 하기가 쉽지 않습니다. 특히 VBA에서는 더욱 그런것 같습니다.

배열을 활용하면 많은 변수를 하나로 사용하니 변수가 줄어들고 변수입력을 위한 노력이 줄고 실행속도도 빨라 집니다.

그래서 배열을 많이 활용합니다.



 배열(Array)이란?


배열이란 데이터형이 같은 여러 개의 변수를 하나의 변수로 연결한 것입니다.

쉽게 설명을 드리면 기차가 1호차에서 10호차 까지 연결이 되어 있는것과 같습니다.

각각의 변수들은 배열변수를 따라 다닙니다. 그리고 그 변수값을 반환 받고 싶을때 인덱스 번호로 호출합니다.



 배열 변수 선언 방법


배열변수를 사용하기 위해서는 배열변수를 선언해야 합니다.

배열변수는 변수명에 (괄호)를 붙여서 선언하는데 (괄호)안에 들어있는 숫자가 배열의 크기입니다.

여기서 배열크기는 상수 이어야 하며 변수를 사용할 수 없습니다.


Type 1 : Dim 배열변수(배열크기) As 데이터형 '배열크기는 상수

TYPE 2 : Dim 배열변수(시작 To 끝) As 데이터형


배열크기를 Type2와 같이 시작과 끝의 값을 정하지 않으면 배열의 시작(첫번째 인덱스)은 0 으로 시작합니다.

그래서 10량의 기차를 배열변수로 선언하기 위해서는 Dim 기차(9) as String 으로 선언 해야 합니다. 

보통 배열의 시작이 0이면 많이 헤깔립니다. 그래서 배열의 시작을 1 부터 시작하고 싶으면 모듈 선언부에 Option Base 1 을 미리 선언 하는 것이 좋습니다.(아래 예제 참조)



 배열의 차원



배열에도 차원이 있습니다. 위 그림 처럼 배열에 1개의 열이 있는경우는 1차원 배열(선) 입니다.

2개 이상의 열이면 2차원 배열(면)이며, 여기에 레이어가 생겨 층이 생기면 3차원 배열(공간)이 됩니다.

3차원 말만 들어도 벌써 머리가 아파옵니다.


▶ 1차원 배열

Option Base 1 '인덱스 시작번호를 1부터 시작


Sub 배열_예제1()


Dim 기차(10) As String '배열크기는 상수를 사용(변수사용시 오류발생)


    For i = 1 To 10

        기차(i) = "KTX - " & i & "호차"

    Next i

    

    MsgBox 기차(3) '인덱스 3의 값을 반환


End Sub



Sub 배열_예제2()


Dim 기차(3 To 10) As String


    For i = 3 To 10

        기차(i) = "KTX - " & i & "호차"

    Next i

    

    MsgBox 기차(0) '--- ①시작이 3이므로 0입력시 오류발생

    MsgBox 기차(5) '인덱스 5의 값을 반환


End Sub


1. 예제1과 2번의 반환값은 아래와 같습니다.



2. ①과 같이 배열크기의 범위 밖의 값을 호출 하면 런타임 오류가 발생합니다.




▶ 다차원 배열

다차원의 배열 차수는 콤마(,)로 구분합니다. 저는 머리가 나빠 2차원 배열을 잘 넘기지 않습니다. ^^


Sub 배열_예제3()


Dim 방향 As Variant

Dim 기차(10, 4) As String '---2차원 배열

    

    방향 = Array("부산", "대구", "광주", "목포") '---방향(1) = 부산, ··· ,방향(4) = "목포"

    

    For r = 1 To 10 '---호차

        For c = 1 To 4 '---방향

            기차(r, c) = 방향(c) & "행 - " & r & "호차"

        Next c

    Next r

    

    MsgBox 기차(7, 1) '인덱스 (호차,방향)의 값을 반환


End Sub


1. 위 예제의 기차(7, 1)의 반환값은 부산행 - 7호차 입니다.



2. 예를 들어 기차의 방향, 호차, 좌석번호의 변수를 배열변수에 넣으면 3차원 배열이 됩니다.


※ 배열의 활용은 관련글을 참조 하세요. ^^



 관련글 보기


 콤보박스에 리스트 입력방법

  

 동적배열변수 선언

  

03