티스토리 뷰
출처 : 프리렉 / 엑셀 VBA 바이블 / 이현곤 구미숙 저
WIELY / Excel 2016 Power Programming with VBA / John Walkenbach
8.5 배열
배열은 같은 자료형을 가진 요소들의 집합
■ 배열 선언하기
1. [Dim/Public/Private] 배열명 ( 시작 인덱스 To 끝 인덱스 ) As 데이터 타입
Dim Myarray(0 To 100) As Integer
2. [Dim/Public/Private] 배열명 ( 끝 인덱스 ) As 데이터 타입
마지막 인덱스 번호만으로 배열 선언 ( index 0부터 시작 )
Dim Myarray(100) As Integer
# 상기와 같은 표현
3. 배열에 값 대입
'index 55에 100 대입
Myarray(55) = 100
■ 다차원 배열 선언하기
,(쉼표)로 차원 구별
Dim Myarray(1 To 10, 1 To 10) As Integer ' 2차원 배열 선언
Myarray(2, 4) = 100
■ 동적 배열 선언하기
요소의 수를 정하지 않고 선언 후 다음에 요소 수를 지정
Dim Myarray() As Integer
'redim은 여러번 사용가능하나 기본적으로 이전 자료는 사라짐
ReDim Myarray(1 To 50) ' redim 시 자료형 미지정
' redim 후 이전 자료 보존됨
ReDim Preserve Myarray(1 To x)
‘차원 재지정도 가능
Dim Myarray() As Integer
ReDim Myarray(10, 20, 1 To 10)
■ 사용 예
실행전 | 실행중 | 실행완료 |
CODE |
Private Sub 입력_Click() Dim arr() As Double Dim i, n, m As Integer '2의거듭제곱 출력 갯수 입력 i = InputBox("숫자를 입력하시요") ReDim arr(1 To i) For n = 1 To i arr(n) = 2 ^ n Next n For m = 1 To i Cells(m, 1).Value = arr(m) Next m End Sub |
■ 배열의 특징
▶ Array함수를 이용한 배열 변수 생성 가능
변수명 = Array( DATA1, DATA2, .... )
→ 반드시 variant 자료형이어야 한다.
→ 0번 index부터 생성
→ 행방향 자료형 생성 ( 열방향 자료로 변경 시 Application.Transpose 함수 사용)
Dim arr1 As Variant ' Dim arr1( ) As Variant 도 가능
arr1 = Array(1, 2, 3)
▶ UBound, LBound로 배열의 시작 끝 index를 알 수 있다.
▶ 셀영역에 배열 대입 가능
◆ 행 방향 셀영역에 배열 바로 대입
셀영역의 길이보다 배열의 길이가 적으면 #N/A 발생
Range("A1:C1") = arr1
◆ 열 방향 셀영역에 배열 대입 시 Transpose 함수 적용하여 방향 전환 필요
Range("A1:A3") = Application.Transpose( arr1 )
◆ 일반적으로 For문을 이용하여 셀영역에 배열을 대입하라!!!
CODE |
Sub Array_Test() Dim arr(1 To 3) As Integer [A1].CurrentRegion.Clear 'A1셀에 인접영역 셀의 값 전체를 삭제 arr(1) = 1 arr(2) = 2 arr(3) = 3 Range("A1:E1") = arr '1 Range("A3:C5") = arr '2 Dim arr1 As Variant ' 반드시 variant 자료형으로 지정 arr1 = Array(1, 2, 3) Range("A7:E7") = arr1 '3 Cells(9, 1).Resize(, 3) = arr1 '4 셀 영역 확대축소 Cells(10, 1).Resize(, UBound(arr1)) = arr1 '5 배열의 상하한 인덱스 반환 함수 사용 Cells(11, 1).Resize(, UBound(arr1) + 1) = arr1 '6 Debug.Print ("LBound: " & LBound(arr1) & " / UBound: " & UBound(arr1)) Cells(13, 1).Resize(3) = Application.Transpose(arr1) ' 7 배열 행 -> 열 변환 Cells(13, 3).Resize(3, 2) = Application.Transpose(arr1) ' 8 Dim n As Integer For n = LBound(arr1) To UBound(arr1) Cells(n + 17, 1) = arr1(n) ' 9 Next n End Sub |
'VBA' 카테고리의 다른 글
InputBox를 이용하여 입력된 데이터 split하여 배열로 만들기 (0) | 2021.11.16 |
---|---|
VBE 환경 사용자 지정 / VBE 조작키 / 직접실행창 (0) | 2021.11.15 |
[Excel ][VBA] comment 추가 (0) | 2021.11.14 |
[Excel][VBA] 배열을 이용한 셀영역 Shuffle (0) | 2021.11.14 |
[EXCEL][VBA] 엑셀 VBA 바이블 (0) | 2021.11.14 |
- Total
- Today
- Yesterday
- for each
- ProtectStructure
- Function Procesure
- WorkSheet Sort
- comment.text
- 강제 재계산
- 사용자 정의 함수 재계산
- Screenupdating
- 사용자 정의 함수
- 사용자 정의 함수 사용 예
- 워크시트 함수 재계산
- 프로시저 작성 실전
- 프로시저 호출
- vba
- 참조
- inputbox
- Excel
- 차트 서식변경
- 원본 데이터
- Application.InputBox
- Option Compare Text
- EnableCancelKey
- 개체
- function함수 예외
- 함수 재계산
- 적용 범위
- 배열
- 함수 프로시저
- bubble sort
- 차트 레이블 추가
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |