본문 바로가기

EXCEL/VBA

엑셀 VBA 동적배열변수 선언하기

배열변수의 크기가 고정된 것을 정적배열변수라고 하며,  상황에 따라 크기가 변하는 배열변수를 동적배열변수라고 합니다.

예를 들어 요일은 {일, 월, 화, 수, 목, 금, 토}로 더 이상 늘어나거나 줄어 들 일이 없습니다.

그러나 일은 1~12월이 {28일, 29일, 30일, 31}일 로 달라집니다.


이렇게 "일"과 같이 변수의 크기가 달라지는 경우는 배열변수의 크기를 다르게 선언해야 합니다.

그런데 배열변수의 크기가 달라질때마다 코드를 바꿀수는 없겠죠? 그래서 동적배열변수를 선언하여 사용합니다.



 정적배열변수 예제


Option Base 1 '---Index의 시작(최소)값을 1으로 선언


Sub 정적배열변수_예제1()


Dim 요일(7) As String '---배열변수크기는 상수 사용(변수사용 불가)


    For i = LBound(요일) To UBound(요일)

        요일(i) = Format(i, "aaaa") '---한글 요일서식 적용

        Debug.Print 요일(i) '---직접실행창에 결과 표시

    Next i

   

End Sub


1. Option Base 1 : Index의 시작(최소)값을 1로 선언합니다.

2. 배열변수 요일의 Index 갯수가 7개로 고정이 됩니다.(선언이후 수정 불가)

3. LBound(배열변수) :Index 최소값이며, Ubound(배열변수) : Index 최대값 입니다.

4. Debug.Print로 직접실행창에 배열을 출력합니다.



 동적배열변수 예제


Sub 동적배열변수_예제2()

Dim 일() As Byte '--- 동적배열변수 선언


년월 = Application.InputBox(prompt:="년월을 입력하세요", Default:="6자리숫자", Type:=1) '---①


'---입력오류가 없다는 전제로 오류에 대한 조치는 제외


년 = Left(년월, 4) '---년도 추출

월 = Right(년월, 2) '---월 추출

    

    마지막일 = Day(DateSerial(년, 월 + 1, 1) - 1) '---해당월의 마지막일 산정


    ReDim 일(마지막일) '--- 배열크기 변경(배열크기를 변수로 사용가능)


    MsgBox 년 & "년 " & 월 & "월의 마지막 일은 " & UBound(일) & "입니다." '---②


End Sub


1. 변수명( )로 동적배열을 선언합니다.

2. ReDim문으로 배열의 크기를 지정(변경)합니다. ReDim으로 선언된 배열의 크기는 다시 변경할 수 있습니다.

3. ①은 InputBox에 년월 6자리를 입력합니다. (예 : 201705)



4. ②는 InputBox에서 입력한 결과를 MsgBox로 알려줍니다.



5. 년도와 월이 계속 바뀌어도 ReDim문으로 계속 변수의 크기를 바꾸어 선언 할수 있습니다.



 관련글 보기


 배열 이해하기

  

02

  

03