엑셀에서 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 영역(Range)을 배열(Array) 로 변경하기 ▶ 엑셀 VBA 배열의 크기를 알아 내기 ▶ 엑셀 VBA 반환한 배열 데이터 셀에 표현하기 ▶ 엑셀 VBA 반복문 For Next, For Each Next 사용하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 |
◎ 동적 배열 사용하기 |
▼ 동적 배열이라는 것은 프로그램 실행 중에 배열의 크기를 변경하는 것입니다. 상황에 맞도록 크기를 정의 하는 것이죠. ReDim 명령어로 배열의 크기를 지정할 수 있으며 데이터형은 바꿀 수 없습니다.
Dim 이름(크기) As 데이터형
ReDim 이름(크기)
▼ 주의할 것은 최초에 선언한 데이터형 그대로 유지해야 하며 Dim 으로 배열 요소의 크기를 지정한 경우에는 재정의 할 수 없습니다. 크기가 선언되지 않은 배열을 ReDim 으로 재정의할 수 있는 것입니다. 이미 크기가 정해진 배열을 선언하려면 아래 그림과 같이 에러가 납니다.
▼ 아래 샘플은 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 영역(Range)을 배열(Array) 로 변경하기 ▶ 엑셀 VBA 배열의 크기를 알아 내기 ▶ 엑셀 VBA 반환한 배열 데이터 셀에 표현하기 ▶ 엑셀 VBA 반복문 For Next, For Each Next 사용하기 ▶ 엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 중복 데이터 재귀 호출과 반복문 사용해서 삭제하기 (0) | 2024.06.02 |
---|---|
엑셀 VBA 문자열, 텍스트 숫자를 문자열 숫자로 변경하기 (0) | 2024.06.01 |
엑셀 VBA 문자열 글자 하나씩 추출하기 (0) | 2024.05.31 |
엑셀 VBA 다른 셀에 일치하는 코드 값에 데이터 찾아 추가하기 (4) | 2024.05.29 |
엑셀 VBA 옵션 버튼 OptionButton 컨트롤 사용하기 (0) | 2024.05.26 |
엑셀 VBA 매크로 실행 버튼으로 코드 실행하기 (2) | 2024.05.22 |
엑셀 VBA 카메라 기능을 매크로로 작성하기 (1) | 2024.05.20 |
엑셀 VBA 반복문 For Next 문 사용하기 (0) | 2024.05.16 |