엑셀에서 배열을 이해하기란 쉽지는 않습니다. 그래서 뭐라고 설명해야 할지 쉽지도 않습니다.
그냥 여러 개의 값을 한 덩어리로 가지고 있는 값이라고 해야하나...
아무튼 배열을 모르면 엑셀을 잘 하기가 쉽지 않습니다. 특히 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 |
'EXCEL > VBA' 카테고리의 다른 글
엑셀 셀병합 단축키(그룹별 병합 및 해제) (5) | 2017.02.06 |
---|---|
엑셀 VBA 동적배열변수 선언하기 (0) | 2017.02.05 |
엑셀 콤보박스(ActiveX컨트롤)에 리스트 입력방법 (3) | 2017.02.04 |
엑셀 MsgBox 활용하기 (0) | 2017.01.30 |
엑셀 InputBox 함수와 메소드의 차이(VBA 오류의 원인?) (0) | 2017.01.30 |