티스토리 뷰

VBA

배열(Array)

어린왕자1234 2021. 11. 14. 14:08

출처 : 프리렉 / 엑셀 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)

 

   사용 예

실행전 실행중 실행완료


exvba09.xlsm
0.02MB
8.5 배열_vba.docx
0.03MB

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
 

통합 문서1.xlsm
0.02MB

 

 

[Excel][VBA] Function Procesure(함수 프로시저)

함수 프로시저(사용자 정의 함수) : 계산을 수행하고 결과를 반환하는 VBA 프로시저 VBA 코드나 워크시트의 수식에서 함수 프로시져 사용 가능 ※ 사용자 정의 함수를 워크시트의 수식으로 사용하

office-automation.tistory.com