[엑셀] 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문으로 계속 변수의 크기를 바꾸어 선언 할수 있습니다.


같이 보면 좋은 글

VBA 배열선언
VBA 연산자
CHOOSE함수

댓글 쓰기